su
参数:
- :单纯使用 - 如“ su - ”代表使用 login-shell 的变量文件读取方式来登陆系统;
若使用者名称没有加上去,则代表切换为 root 的身份。
-l :与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。
-m :-m 与 -p 是一样的,表示“使用目前的环境设置,而不读取新使用者的配置文件”
-c :仅进行一次指令,所以 -c 后面可以加上指令# 切换用户 [kevin@CentOS ~]$ su Password: [root@CentOS kevin]# id uid=0(root) gid=0(root) groups=0(root),490(sfcb) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@CentOS kevin]# env | grep kevin USER=kevin PATH=/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/kevin/bin #不是root MAIL=/var/spool/mail/kevin # 不是root PWD=/home/kevin # 不是root LOGNAME=kevin # 虽然身份是root,但是很多数据都无法利用
读取的变量设置方式为 non-login shell 的方式,这种方式很多原本的变量不会被改变, 尤其是我们之前谈过很多次的 PATH 这个变量,由于没有改变成为 root 的环境, 因此很多 root 惯用的指令就只能使用绝对路径来执行。
# 只是想要执行一个只有root才能进行的命令,且执行完就回复原本身份 [kevin@CentOS ~]$ head -n 3 /etc/shadow head: cannot open `/etc/shadow' for reading: Permission denied [kevin@CentOS ~]$ su - -c "head -n 3 /etc/shadow" Password: root:$6$/FNg5CtP$KsYAYM4LBgkAYbvD5MiPAOSMcmAnohDcANoZspPblw7Eh9MqwlQzhmsyCgvTMg5E.yAWyhWHg/lufHCd6sbU21:17227:0:99999:7::: bin:*:15980:0:99999:7::: daemon:*:15980:0:99999:7:::
sudo
此并非所有人都能够执行sudo , 而是仅有规范到 /etc/sudoers 内的用户才能够执行 sudo 这个指令
参数:
-b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
-u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root# 想要以sshd的身份在/tmp下新建一个名为mysshd的文件 [root@CentOS kevin]# sudo -u sshd touch /tmp/mysshd [root@CentOS kevin]# ll /tmp/mysshd -rw-r--r--. 1 sshd sshd 0 Mar 18 16:18 /tmp/mysshd # 以kevin的身份新建~kevin/www并于其中新建index.html文件 [root@CentOS kevin]# sudo -u kevin sh -c "mkdir ~kevin/www; cd ~kevin/www; echo 'This is index.html file' > index.html" [root@CentOS kevin]# ll -a ~kevin/www total 12 drwxr-xr-x. 2 kevin kevin 4096 Mar 18 16:20 . drwx------. 32 kevin kevin 4096 Mar 18 16:20 .. -rw-r--r--. 1 kevin kevin 24 Mar 18 16:20 index.html # sh -c执行一串指令
但是 sudo 默认仅有 root 能使用啊!为什么呢?因为 sudo 的执行是这样的流程:
1 . 当使用者执行 sudo 时,系统于 /etc/sudoers 文件中搜寻该使用者是否有执行 sudo 的权
限;
2 . 若使用者具有可执行 sudo 的权限后,便让使用者“输入使用者自己的密码”来确认;
3 . 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密
码);
4 . 若欲切换的身份与执行者身份相同,那也不需要输入密码。[root@CentOS ~]# visudo root ALL=(ALL) ALL kevin ALL=(ALL) ALL
sudo 执行的重点是:“能否使用 sudo 必须要看 /etc/sudoers 的设置值, 而可使用sudo 者是通过输入使用者自己的密码来执行后续的指令串”。因为该文件的内容是有一定的规范
的,因此直接使用 vi 去编辑是不好的。 此时,我们得要通过 visudo 去修改这个文件。
visudo 只是利用 vi 将 /etc/sudoers 文件调用出来进行修改而已,所以这个文件就是 /etc/sudoers。[root@CentOS ~]# cat /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL kevin ALL=(ALL) ALL
上面这一行的四个部分意义是:
1 . “使用者帐号”:系统的哪个帐号可以使用 sudo 这个指令的意思;
2 . “登陆者的来源主机名称”:当这个帐号由哪部主机连线到本 Linux 主机,意思是这个帐号可能是由哪一部网络主机连线过来的, 这个设置值可以指定用户端计算机(信任的来源的意思)。默认值 root 可来自任何一部网络主机
3 . “(可切换的身份)”:这个帐号可以切换成什么身份来下达后续的指令,默认 root 可以切换成任何人;
4 . “可下达的指令”:可用该身份下达什么指令?这个指令请务必使用绝对路径撰写。 默认root 可以切换任何身份且进行任何指令之意。#我想让 vbird1 可以进行任何身份的任何指令, 就如同上表特殊字体写的那样,其实就是复制上述默认值那一行,再将 root 改成 vbird1 即可: [kevin@CentOS ~]$ tail -n 1 /etc/shadow tail: cannot open `/etc/shadow' for reading: Permission denied [kevin@CentOS ~]$ sudo tail -n 1 /etc/shadow We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for kevin: pro3:$6$PddldVqg$q3uHqeICjB1HSXTdB994lFfHFgVySSzG1gtUCEABi3fJtfxK728v47IrAPaysmCu7AYDsTLipLGbI0qu1Z0pK1:17243:0:99999:7:::
利用用户组以及免密码的功能处理visudo
# 新建三个用户,通过用户组的功能让这三个人可以管理系统 [root@CentOS ~]# visudo # Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL #修改去掉注释 # 将user1加入wheel用户组的支持 [root@CentOS ~]# usermod -a -G wheel user1 # 上面的设置值会造成“任何加入 wheel 这个群组的使用者,就能够使用 sudo 切换任何身份来操作任何指令”的意思 # 以user1的身份运行 [user1@CentOS ~]$ sudo tail -n 1 /etc/shadow We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for user1: pro3:$6$PddldVqg$q3uHqeICjB1HSXTdB994lFfHFgVySSzG1gtUCEABi3fJtfxK728v47IrAPaysmCu7AYDsTLipLGbI0qu1Z0pK1:17243:0:99999:7::: # 以user2的身份运行 [user2@CentOS ~]$ sudo tail -n 1 /etc/shadow We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for user2: user2 is not in the sudoers file. This incident will be reported. # 提示user2不在/etc/sudoers文件的设置中
不需要密码即可使用 sudo”
[root@CentOS ~]# visudo ## Allows people in group wheel to run all commands %wheel ALL=(ALL) NOPASSWD: ALL # 修改87行 # %后面代表用户组 # NOPASSWD代表免密码
有限制的命令操作
如果我想要让使用者仅能够进行部分系统任务, 比方说,系统上面的 myuser1 仅能够帮 root 修改其他使用者的密码时,亦即“当使用者仅能使用 passwd 这个指令帮忙 root 修改其他用户的密码”时,
你该如何撰写呢?可以这样做:[root@CentOS ~]# visudo # Allow root to run any commands anywhere root ALL=(ALL) ALL kevin ALL=(ALL) ALL user1 ALL=(root) /usr/bin/passwd # 发现这样user1可以修改root密码,需要进行限制: [root@CentOS ~]# visudo ## Allow root to run any commands anywhere root ALL=(ALL) ALL kevin ALL=(ALL) ALL user1 ALL=(root) ! /usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root # 加上感叹号是不可执行的意思
通过别名设置visudo
# 用命令别名处理一下(批处理) User_Alias ADMPW = user1, user2, myuser1, myuser2 AMND_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root ADMPW ALL=(ALL) ADMPWCOM
很多时候我们需要大量执行很多 root 的工作,所以一直使用 sudo 觉得很烦ㄟ!那有没有办法使用 sudo 搭配 su , 一口气将身份转为 root ,而且还用使用者自己的密码来变成 root呢?是有的!而且方法简单的会让你想笑! 我们创建一个 ADMINS 帐号别名,然后这样做:
[root@CentOS ~]# visudo User_Alias ADMINS = pro1, pro2, pro3, myuser1 ADMINS ALL=(root) /bin/su -
鸟哥的linux私房菜学习笔记《二十七》用户身份切换
最新推荐文章于 2022-04-08 09:59:46 发布