su
命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
语法
su [OPTION]... [-] [USER [ARG]...]
选项
-c
执行完指定的指令后,即恢复原来的身份
-f
适用于csh与tsch,使shell不用去读取启动文件
-l
改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量
-m
变更身份时,不要变更环境变量
-s
指定要执行的shell
应用实例
1. 使用123用户身份在/tmp下创建test目录
su -c "mkdir /tmp/test" 123
2.切换用户123
su 123
普通用户使用 su
切换到另一个用户需要输入密码,root
不用
还有一种用法是 su -
su
和su -
的区别是:
前者只是改变了身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -
命令切换以后,工作目录变成root的工作目录了。用echo $PATH
命令看一下su
和su -
以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -
命令
单独运行 su
会切换到 root
用户
sudo
命令用来以其他身份来执行命令,预设的身份为root
。在/etc/sudoers
中设置了可执行sudo
指令的用户。若其未经授权的用户企图使用sudo
,则会发出警告的邮件给管理员。用户使用sudo
时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
选项
-b
:在后台执行指令
-H
:将HOME环境变量设为新身份的HOME环境变量
-k
:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
-l
:列出目前用户可执行与无法执行的指令
-p
:改变询问密码的提示符号
-s
:执行指定的shell
-u<用户>
:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v
:延长密码有效期限5分钟
sudo
的工作流程
1. 当用户执行 sudo
时,系统于 /etc/sudoers
档案中搜寻该使用者是否有执行 sudo
的权限;
2. 若使用者具有可执行 sudo
的权限后,便让使用者输入用户自己的密码来确认;
3. 若密码输入成功,便开始进行 sudo
后续接的指令(但 root 执行 sudo 时,不需要输入密码);
4. 若欲切换的身份与执行者身份相同,那也不需要输入密码。
visudo
单用户授权
visudo
是直接操作/etc/sudoers
文件,我们也可以直接 vi /etc/sudoers
,但是visudo
命令的好处在于,退出/etc/sudoers
文件时,系统会检查/etc/sudoers
语法是否正确。
提示语法错误我们有三种选择:键入e
是重新编辑,键入x
是不保存退出,键入Q
是退出并保存。如果真选择Q
,那么sudo
将不会再运行,直到错误被纠正。
运行
visudo
找到
root ALL=(ALL) ALL
在其下面添加
test ALL=(root) ALL
第一个字段:test为能使用sudo命令的用户;
第二个字段:第一个ALL为允许使用sudo的主机,可以是IP地址和IP段,第二个括号里的ALL为使用sudo后以什么身份(目的用户身份)来执行命令
第三个字段:ALL为以sudo命令允许执行的命令,ALL是所有的,可以指定单个或是多个命令如:/bin/ls
,也可使用!
来表示不可执行的命令
总结就是 允许test用户从任何地方登陆以root用户身份执行所有命令
举例:
1. 允许test2
用户通过sudo
来修改所有其它用户的密码,但不能修改root
的密码
test2 ALL=(root) /usr/bin/passwd,!/usr/bin/passwd root
2. visudo
利用群组授权
%test ALL=(ALL) ALL
在最左边加上 %
,代表后面接的是一个群组,格式和单用户授权一样
任何加入test这个群组的使用者,就能够使用 sudo
切换任何身份来操作任何指令
3. 不需要密码即可使用 sudo
%wheel ALL=(ALL) NOPASSWD: ALL
在指令处加入NOPASSWD:ALL
即可
6、visudo
利用别名授权
公司有很多部门,要方便管理,就可使用别名的方式,如:开发部,运维部,技术支持部,每个部门里多个人,部门之间拥有的命令权限也不一样,同一部门权限一样。如果一条一条写的话,写也麻烦,改就更麻烦了。
User_Alias ADMPW = pro1,pro2, pro3, myuser1, myuser2 # 配置用户别名ADMPW Cmnd_Alias ADMPWCOM =!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root # 配置命令别名ADMPWCOM ADMPW ALL=(root) ADMPWCOM # 指定用户别名里的成员,拥有命令别名里的权限
配置sudo
日志文件跟踪
1. 查询sample.sudoers
文件位置
rpm -ql sudo
/usr/share/doc/sudo-1.8.6p3/sample.sudoers /usr/share/doc/sudo-1.8.6p3/sample.syslog.conf
2. 查看sample.sudoers
中的日志相关配置
sample.syslog.conf
这个文件为官方配置sudo
日志配置笔记
cat /usr/share/doc/sudo-1.8.6p3/sample.sudoers|grep "log"
Defaults syslog=auth Defaults>root !set_logname Defaults@SERVERS log_year, logfile=/var/log/sudo.log
3. 创建日志文件
touch /var/log/sudo.log
4. 把sudo
日志文件加入系统日志
把下面命令添加到/etc/rsyslog.conf
末尾
local2.debug /var/log/sudo.log
注意:空白处不能用空格,必须用 TAB
4. 在/etc/sudoers
末尾中添加日志路径
echo 'Defaults logfile=/var/log/sudo.log' >> /etc/sudoers