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 分钟,那就得要重新输入一次你的密码了。
原文链接:Linux使用者身份切换