查看原文
其他

Linux账号管理(6)- 身份切换su、sudo

Cloud研习社 Cloud研习社 2023-06-06



su




su [-] [-c] [username]
选项和参数:
-  表示使用login-shell的变量文件读取方式登录系统。即切换用户的时候,环境变量也变成对应用户的,如果没有这个“-”符号,则只变换身份,不变换环境变量
-c 后面接命令,表示用username(如果没有写用户名,默认是root)这个用户的身份执行-c后面的命令。
用户名 可写可不写,不写的话默认就是root

我们来看看实际例子:
# 以jason用户登录系统,然后切换到root用户
[jason@studyclub ~]$ su               # 切换到root用户
Password:                      # 输入root用户的密码【注意,如果是root切换到普通用户,则不需要输入密码】
[root@studyclub jason]# env | grep "root"       # 已经切换到root了,我们看看有哪些变量是root用户的
HOME=/root                            # 只有一个HOME变量是root的
[root@studyclub jason]# env | grep "jason"
USER=jason                      # 环境变量里竟然还是jason用户
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/jason/.local/bin:/home/jason/bin # 看看这些可执行文件还是jason的
MAIL=/var/spool/mail/jason               # mail还是jason的
PWD=/home/jason                   # 也不是root的家目录
LOGNAME=jason

# 下面我们在用su -命令看看效果:首先以jason用户登录系统
[jason@studyclub ~]$ su -
Password:                 # 输入root的密码
Last login: Wed Jun 9 11:17:16 CST 2021 on pts/0
[root@studyclub ~]# env | grep "root"
USER=root                 # USER已不再是jason
MAIL=/var/spool/mail/root         # mail也换成了root的mail
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin #PATH也换成了root对应的变量
PWD=/root
HOME=/root
LOGNAME=root

# 如果切换成普通用户应该怎么做?
[jason@studyclub ~]$ su - james
Password:                 # 输入james用户的密码即可
Last login: Sat May 15 14:16:38 CST 2021 on pts/1

经过上面的例子,我们强烈推荐以后切换用户使用“su -”这种形式。
再看看-c这个选项:
这个选项的场景是我们有一条命令需要root身份,但是执行完成后就可以回到原来的用户身份了。我们来看:

[jason@studyclub ~]$ su - -c "cat /etc/shadow"   # 查看/etc/shadow文件,只有root才有权限
Password:                             # 输入root用户的密码
root:$6$/rdt/QFLzpIiFWqM$J89knIK3LfL6B2FYXWid.XSitQMNLoygJGQWFC3IFs6xXmuaX/CXJc.hzgDWW2dD94Cek/3QVsKdD4ttWIbnm1::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
......



sudo



sudo用户用来帮助普通用户临时获取root用户的权限进行执行命令,不需要root的密码(这样可以做到既不想给他root密码,还能满足他以root权限执行某些命令)。只有root用户指定的普通用户才能使用sudo命令,这样才能更好的保证系统的安全性和用户的便捷性。
日常工作中,在保证用户完成工作的前提下,尽可能少的给与普通用户权限。
在/etc/sudoers文件中配置可以执行sudo命令的用户。但是对于这个配置文件,我们不用vim打开、编辑。我们推荐使用visudo命令。因为/etc/sudoers配置文件有特殊的语法格式,使用visudo可以自动检查你写的内容是不是符合要求,避免出错。

[root@studyclub ~]# visudo
......
root ALL=(ALL) ALL
jason ALL=(ALL) ALL     # 这一上是我新加的,允许jason用户执行所有命令
......

visudo以后,对于文件的编辑、保存和vim的操作方式是一样的,如果您忘记了,可以找到vim的讲解内容去复习一下。
我们来看看上面这三列输出内容的含义:
第一列:可以使用sudo命令的用户名
第二列:“=”左侧是指允许第一列的用户通过哪台主机连接到本Linux,即指定可以信任的主机。ALL的意思是所有,允许所有。
“=”右侧是允许切换成什么用户来执行后续的命令,默认root可以切换成任何用户。
第三列:指明切换用户后可以执行的命令有哪些,多个命令用逗号分开,每个命令写绝对路径。
注:上面的ALL就代表所有的意思。
我们来看看给与jason用户sudo权限以后的效果:

[jason@studyclub ~]$ head -n 3 /etc/shadow        # 这个shadow文件只有root可以看
head: cannot open ‘/etc/shadow’ for reading: Permission denied
[jason@studyclub ~]$ sudo head -n 3 /etc/shadow      # 加上sudo以后,临时获取root权限查看文件的内容
[sudo] password for jason:                     # 输入jason的密码
root:$6$/rdt/QFLzpIiFWqM$J89knIK3LfL6B2FYXWid.XSitQMNLoygJGQWFC3IFs6xXmuaX/CXJc.hzgDWW2dD94Cek/3QVsKdD4ttWIbnm1::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
上面我们使用sudo的时候需要用户输入一次密码,比较麻烦,我们也可以不让用户输入密码直接执行sudo后面的命令:
# 修改sudo文件
[root@studyclub ~]# visudo
......
jason ALL=(ALL) NOPASSWD: ALL
......

[jason@studyclub ~]$ sudo head /etc/shadow     # 现在就不需要输入密码了
root:$6$/rdt/QFLzpIiFWqM$J89knIK3LfL6B2FYXWid.XSitQMNLoygJGQWFC3IFs6xXmuaX/CXJc.hzgDWW2dD94Cek/3QVsKdD4ttWIbnm1::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::

看见了吗,和上一个例子的区别就是在sudoers文件里,jason用户那一行最后的“ALL”改成“NOPASSWD: ALL”。

好了,用户管理的内容就到这了。下一次推文我们开始学习文件的打包和压缩。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存