su 命令必须要有root 密码,而 sudo 命令只需要用户自己密码。

su 命令

su 命令格式:

[root@study ~]# su [-lm] [-c 指令] [username] 
选项与参数: 
-   :单纯使用 - 如『 su - 』代表使用 login-shell 的变量文件读取方式来登入系统;       若使用者名称没有加上去,则代表切换为 root 的身份。 
-l  :与 - 类似,但后面需要加欲切换的使用者账号!也是 login-shell 的方式。 
-m  :-m 与 -p 是一样的,表示『使用目前的环境设定,而不读取新使用者的配置文件』 
-c  :仅进行一次指令,所以 -c 后面可以加上指令

使用 - 参数,就是读取欲切换身份的 login-shell 的变量文件来登入系统,登入后变量名(如 PATH)之类的都是新身份的而不是旧身份证的。而单纯使用 su 切换成为 root 的身份,读取的变量设定方式为 non-login shell 的方式,这种方式很多原本的变量不会被改变,如 PARH、 MAIl,输入 mail 时, 收到的邮件还是 原来用户的。

范例: su - -c "head -n 3 /etc/shadow"

sudo 命令

并非所有人都能够执行 sudo , 而是仅有规范到 /etc/sudoers 内的用户才能够执行 sudo 这个指令。

使用 visudo 命令修改 /etc/sudoers 文件,visudo 用法与 vim 类似,不过最后保存时 visudo 会检测文件内容语法是否正确。

单一用户可进行 root 所有指令,与 sudoers 文件语法:

[root@study ~]# visudo 
....(前面省略)....
root    ALL=(ALL)       ALL  <==找到这一行
vbird1  ALL=(ALL)       ALL  <==这一行是你要新增的
[ 1 ]   [2]  [3]       [ 4 ]

这样 vbird1 就可以使用root的任何指令。

相关解释

  • 1 『使用者账号』:系统的哪个账号可以使用 sudo 这个指令的意思;
  • 2 『登入者的来源主机名』:当这个账号由哪部主机联机到本 Linux 主机,意思是这个账号可能是由哪一部网 络主机联机过来的,这个设定值可以指定客户端计算机(信任的来源的意思)。默认值 root 可来自任何一部网络主机
  • 3 『(可切换的身份)』:这个账号可以切换成什么身份来下达后续的指令,默认 root 可以切换成任何人
  • 4 『可下达的指令』:可用该身份下达什么指令,这个指令请务必使用绝对路径撰写。 预设 root 可以切换任 何身份且进行任何指令之意

利用 wheel 群组以及免密码的功能处理 visudo

通过群组来管理是否可以使用 sudo 命令,系统默认的群组为 wheel 群组。
范例:

[root@study ~]# visudo  <==同样的,请使用 root 先设定 
....(前面省略)....
%wheel     ALL=(ALL)    ALL <==大约在 106 行左右,请将这行的 # 拿掉! # 在最左边加上 % ,代表后面接的是一个『群组』之意!改完请储存后离开 
 
[root@study ~]# usermod -a -G wheel pro1 <==将 pro1 加入 wheel 的支持

在 CentOS7 以后,这个群组默认是可用的。
继续修改,使用 sudo 命令不需要密码:

[root@study ~]# visudo  <==同样的,请使用 root 先设定 
....(前面省略).... 
%wheel     ALL=(ALL)   NOPASSWD: ALL <==大约在 109 行左右,请将 # 拿掉! # 在最左边加上 % ,代表后面接的是一个『群组』之意!改完请储存后离开

有限制的指令操作

范例:

root@study ~]# visudo  <==注意是 root 身份 
myuser1 ALL=(root)  !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

sudo 的时间间隔问题:

两次执行 sudo 的间隔在五分钟内,那么再次执行 sudo 时就不需要再次输入密码了, 这是因为 系统相信你在五分钟内不会离开你的作业,所以执行 sudo 的是同一个人。不过如果两次 sudo 操作的间隔超过 5 分钟,那就得要重新输入一次你的密码了。