专栏首页大闲人柴毛毛Linux用户身份切换

Linux用户身份切换

为什么需要切换用户身份?

在日常工作中,尽量使用普通用户账号操作,当需要root权限的时候再通过身份切换的方式切换至root管理员,这样能保证系统的安全性。使用普通账号的安全性主要体现在两个方面:

  • 防止因误操作而删除了系统重要文件;
  • 创建一些系统账户专门用来启动某些服务,这样即使该服务被攻陷,系统仍然是安全的。

下面介绍两种Linux中切换用户身份的方式。

身份切换方式一:su

该命令可以将身份切换至指定账户,但需要输入该账户的密码。

su [-lm] [-c 命令] username
  • 若不加username则表示切换至root
  • 使用su和su -均能切换至root账户,但不加-会使很多变量仍然保持切换前用户的变量,而加了-之后则参数将会完全变成root的参数,尤其是环境变量PATH,从而能够直接使用某些命令,而无需指定绝对路径。
  • 若只想执行一个root权限才能执行的命令的时候,可以将命令直接写在-c的后面,这样无需切换身份,如:
su -c vim /etc/shadow

身份切换方式二:sudo

使用su切换身份需要直到root账号的密码,这样并不安全。为了提高安全性,我们可以使用sudo来执行需要root权限的功能。 sudo由root指定,指定后用户只需输入自己账号的密码就能申请到root权限,而无需告诉任何人root密码,因此安全了不少。

sudo [-b] [-u username] 需要执行的命令

-b:使后续的命令自行执行,而不与目前的shell产生影响。

使用visudo指定拥有sudo权限的账户

拥有sudo权限的账户由/etc/sudoers文件维护,我们只需修改该文件的内容即可指定用户拥有sudo权限。但sudoers文件具有一定的语法规则,因此不建议使用vim直接修改,而是使用visudo命令进行操作,因为visudo命令能进行语法检查,当我们出现语法错误时能够及时纠正。 下面我们就来看看sudoers文件的内容:

root    ALL=(ALL)       ALL
  1. 第一个参数表示允许进行sudo操作的用户名
  2. 第二个参数表示允许的源主机IP
  3. 第三个参数表示可以切换的用户名
  4. 第四个参数表示允许执行的命令

使用visudo指定拥有sudo权限的用户组

$users    ALL=(ALL)       ALL

$表示该用户为一个用户组。在visudo中设置了用户组后,只要是该用户组的用户均有sudo权限。如果想让一个用户获得sudo权限,只需加入该用户组即可,无需再修改sudoers文件。

开启sudo免密功能

先前的用户在执行sudo命令后都需要输入自己的密码,然而对于一些十分信任的用户可以免去他们在sudo时输入密码:

$users    ALL=(ALL)       NOPASSWD:ALL

只需在最后一个参数前加上NOPASSWD即可!

限制sudo操作

1.限制可切换的用户范围,如:只允许chai能sudo至root

chai    ALL=(root)       ALL

2.限制用户能执行的操作,如只允许用户执行命令/usr/bin/passwd

chai    ALL=(root)       /usr/bin/passwd

通过别名设置visudo

  • 通过User_Alias为用户们起一个别名
  • 通过Cmnd_Alias为可执行的操作起一个别名 如,允许jsmith, mikem这两个用户将身份切换至root,并可以执行/sbin/route和 /sbin/ifconfig这两个命令。
User_Alias ADMINS = jsmith, mikem
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig
ADMINS ALL=(root) NETWORKING

sudo与su的搭配使用

su和sudo各有千秋,su能切换用户身份,但需要知道对方的密码,这并不安全;而sudo无需知道对方的密码,但每次执行root命令都需要加上sudo,这很不方面,下面的配置能够让这两种方式的优点结合起来:

User_Alias ADMINS = chai1,chai2,chai3
ADMINS ALL=(root) /bin/su -

此时只要输入sudo su -并输入自己的密码后即可变成root账户。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 揭秘ThreadLocal

    ThreadLocal是开发中最常用的技术之一,也是面试重要的考点。本文将由浅入深,介绍ThreadLocal的使用方式、实现原理、内存泄漏问题以及使用场景。...

    大闲人柴毛毛
  • 剑指offer代码解析——面试题31连续子数组的最大和

    题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组和的最大值。要求时间复杂度为O(n) 分析:统计连续子数...

    大闲人柴毛毛
  • Java并发容器大合集

    概述         java.util包中的大部分容器都是非线程安全的,若要在多线程中使用容器,你可以使用Collections提供的包装函数:synchro...

    大闲人柴毛毛
  • CVE-2019-14287:利用sudo提权复现

    sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root...

    Timeline Sec
  • Centos7 普通用户加入sudo组 原

    1、首先切换到root #su -  (注意有- ,这和su不同,在用命令"su"的时候只是切换到root,但没有把root的环境变量传过去,还是当前用户的...

    拓荒者
  • Centos7下ELK+Redis日志分析平台的集群环境部署记录

    之前的文档介绍了ELK架构的基础知识(推荐参考下http://blog.oldboyedu.com/elk/),日志集中分析系统的实施方案: - ELK+Red...

    洗尽了浮华
  • Windows下Nginx安装与配置教程

    Nginx是一个开源的Web服务器,同时Nginx也提供了反向代理和负载均衡的功能。 Nginx通常作为负载均衡器暴露在外网接受用户请求,同时也使用其反向代理的...

    KenTalk
  • 【iOS开发】跳转到『设置App』的任意条目

    有时候,我们为了让用户方便地设置一些内容,希望可以让用户点击一个按钮,就可以跳转到 设置->通用,或 设置->�Safari,等『设置App』中的详细条目,这样...

    KyXu
  • MogileFS基于Nginx反向代理实现分布式存储与访问

    前言 随着信息社会的发展,越来越多的信息被数据化,尤其是伴随着大数据时代的来临,数据呈爆炸式增长。传统存储在面对海量数据存储表现出的力不从心已经是不争的事实,例...

    小小科
  • 正则表达式

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo

扫码关注云+社区

领取腾讯云代金券