su、sudo、runuser区别
一、su 命令临时切换用户身份
SU:( Switch user切换用户),可让一个普通用户切换为超级用户或其他用户,并可临时拥有所切换用户的权限,切换时需输入欲切换用户的密码;也可以让超级用户切换为普通用户,临时以低权限身份处理事务,切换时无需输入欲切换用户的密码。
zai Linux 系统中,有时候普通用户有些事情是不能做的,除非是 root 用户才能做到。这时就需要用 su 命令临时切换到 root 身份来做事了。
1、su 的语法
su [OPTION选项参数] [用户]
-, -l, –login
切换用户时,使环境变量(home,shell,user,logname,path等)和欲切换的用户相同、不使用则取得用户的临时权限,不加载环境变量。用su命令切换用户后,可以用 exit 命令或快捷键[Ctrl+D]可返回原登录用户;
-c, –command=COMMAND
使用 -c 传递单个命令到 shell 中,执行命令后,就恢复原来的用户身份,退出所切换到的用户环境;
–session-command=COMMAND
使用 -c 传递单个命令到 shell 中,并且不创建新的会话;
-f, –fast
通过 -f 参数到 shell (针对 csh 或 tcsh);
-m, –preserve-environment
不重置环境变量;
-s, –shell=SHELL
2、su 的范例:
su -
su - root
su - root -c "ls -l /root"
su - oracle -c "ulimit -aHS"
su -s /bin/sh -c "/usr/local/nginx/sbin/nginx"
二、sudo 命令
1、sudo 的适用条件
由于su 对切换到超级权限用户 root 后,权限的无限制性,所以 su 并不能担任多个管理员所管理的系统。如果用 su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。通过 sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道 root 密码,所以 sudo 相对于权限无限制性的 su 来说,还是比较安全的,所以 sudo 也能被称为受限制的 su。另外 sudo 是需要授权许可的,所以也被称为授权许可的 su。
sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户,而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。默认只有 root 用户能使用 sudo 命令,普通用户想要使用 sudo,是需要 root 预先设定的,默认 root 能够 sudo 是因为这个文件中有一行”root ALL=(ALL) ALL”。
2、sudo 配置文件
我们可以用他的专用编辑工具 visodu ,此工具的好处是在添加规则不太准确时,保存退出时会提示给我们错误信息;配置好后,可以用切换到您授权的用户下,通过sudo -l 来查看哪些命令是可以执行或禁止的。
/etc/sudoers 文件中每行算一个规则,前面带有 # 号可以当作是说明的内容,并不执行;如果规则很长,一行列不下时,可以用 \ 号来续行,这样看来一个规则也可以拥有多个行。
/etc/sudoers 的规则可分为两类:一类是别名定义,另一类是授权规则;别名定义并不是必须的,但授权规则是必须的。
sudo授权规则(sudoers配置):
1
授权用户 主机=命令动作
这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用( )号括起来,如果不需要密码直接运行命令的,应该加 NOPASSWD: 参数,但这些可以省略。举例说明:
执行visudo之后,可以看见缺省只有一条配置:
root ALL=(ALL) ALL
那么你就在下边再加一条配置:
admin ALL=(ALL) ALL
这样,普通用户 admin 就能够执行 root 权限的所有命令。
让普通用户support只能在某几台服务器上,执行root能执行的某些命令,首先需要配置一些Alias,这样在下面配置权限时,会方便一些,不用写大段大段的配置。Alias主要分成4种:
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
配置Host_Alias:就是主机的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上 ! 表示不能执行此命令。命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
Cmnd_Alias COMMAND_FLAG = command1, command2, command3 ,!command4
配置User_Alias:就是具有sudo权限的用户的列表
User_Alias USER_FLAG = user1, user2, user3
配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
配置权限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
当然新用户的配置也可以放到,/etc/sudoers.d/ 下的文件里,也会生效,修改也方便。
3、sudo 语法
sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command
三、runuser 命令
runuser命令使用一个替代的用户或者组ID运行一个Shell。这个命令仅在root用户时有用。
仅以会话PAM钩子运行,并且没有密码提示。如果用一个非root用户,并且该用户没有权限设置user ID,这个命令将会因为程序没有setuid而失败。因runuser不会运行认证和账户PAM钩子,它比su更底层。
1、runuser 语法
语法与 su 命令基本一样:
-, -l, –login
让shell成为登录shell,用 runuser -l PAM 文件替代默认的;
-g –group=group
指定主要的组;
-G –supp-group=group
指定追加组
-c, –command=COMMAND
使用 -c 传递单个命令到 shell 中,执行命令后,就退出到 root;
–session-command=COMMAND
通过一个单一的命令用 -c 参数到 shell ,不创建一个新的会话;
-f, –fast
通过 -f 参数到 shell (针对 csh 或 tcsh);
-m, –preserve-environment
不重置环境变量;
-p same as -m
-s, –shell=SHELL
指定执行命令的shell;
2、runuser 样例
runuser -l userNameHere -c '/path/to/command arg1 arg2'
runuser -l oracle -c 'ulimit -SHa'
runuser -s /bin/sh -c "/usr/local/nginx/sbin/nginx"
有时,root用户由于权限(安全)问题不能浏览NFS挂载的共享:
ls -l /nfs/wwwroot/http或cd /nfs/wwwroot/http
可能的输出:
-bash: cd: /nfs/wwwroot/http/: Permission denied
这时若apache用户被允许浏览或访问挂载在/nfs/wwwroot/http/下基于nfs的系统:
runuser -l apache -c 'ls -l /nfs/wwwroot/http/' 或
runuser -l apache -c 'cd /nfs/wwwroot/http/; vi index.php'
使用runuser命令,无需使用密码,并且,只能在root用户下使用。
四、总结:su VS su VS dorunuser
|
命令 |
root到用户 |
用户到root |
任意用户到任意用户 |
认证方式 |
日志文件 |
备注 |
|
runuser |
Y |
N |
N |
无 |
无 |
因runuser不会运行认证和账户PAM钩子,它比su更底层。 |
|
su |
Y |
Y |
Y |
目标用户的密码 |
/var/log/auth.log 或/var/log/secure |
你必须与其它用户分享你的密码或 root 密码。 |
|
sudo |
Y |
Y |
Y |
认证用户使用他们自己的密码,而不是目标用户。 |
/var/log/auth.log 或/var/log/secure |
允许系统管理员委托授权给一个特定的用户(或用户组),让其在提供审计跟踪命令后可以以root或其它用户运行某些(或全部)命令。 |
ref:https://www.cnblogs.com/bodhitree/p/6018369.html
浙公网安备 33010602011771号