一、sudo简介
sudo表示“superuser do”,它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或root用户。我们经常用sudo来提升自己的权限去执行命令。
sudo命令与安全策略配合使用,默认安全策略是sudoers,可以通过编辑 /etc/sudoers 来配置。
二、配置sudo
1、/etc/sudoers 配置文件
/etc/sudoers 这个文件记录着谁可以用sudo命令来提升权限,添加普通用户为 sudo用户。
添加记录的格式为:
who where=(whom:group) command
其实就是“哪个用户在哪个主机以某个组谁的身份执行什么命令”。这里的主机是指通过哪台机器ssh上来的;group可以省略,表示不限制组。
例如,在 /etc/sudoers 中对于root用户的记录为:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
root:表示root用户。如果这个参数前带有百分号,则代表这个用户组。如 %admin,表示amdin组的用户。
ALL:表示从任何主机上都可以执行
ALL:表示可以以任何人的身份执行
ALL:表示任何命令
解释为:用户root可以在任何主机以任何人的身份执行所有命令。
例如配置普通用户hao可以使用root身份执行mkdir命令:
hao ALL=(ALL) /usr/bin/mkdir
2、通过将普通用户添加到sudo组来提升用户权限
编辑配置文件 /etc/sudoers 给用户添加 sudo 权限,不过还有一种更加简单的方法,就是将用户添加到 sudo 或者 admin用户组(需要将这sudo组在sudoers文件中配置权限)。下面使用命令
#创建sudo组
groupadd sudo
#将用户hao添加至sudo 组
usermod -G sudo hao
#在/etc/sudoers 中配置 sudo 组权限
vi /etc/sudoers
#添加记录:
%sudo ALL=(ALL) ALL
然后就将普通用户hao添加至sudo组,sudo组在/etc/sudoers 中赋予了权限。
注意:
1、(ALL)和(ALL:ALL)的区别。test1:test2表示test2组的test1用户。如果仅仅使用(ALL),那么sudo无法使用 -g 来指定用户组运行程序。
2、root ALL=(ALL,!root) ALL,其中“!root”,表示允许以除root以外的用户的身份执行命令。
3、不允许执行某个命令,也使用感叹号“!”去排除。
4、为用户定义可以运行的命令时,必须使用完整的命令路径。这样做是完全出于安全的考虑,如果我们给出的命令只是简单的userad 而非 /usr/sbin/useradd,那么用户有可能创建一个他自己的脚本,也叫做userad,然后放在它的本地路径中,如此一来他就能够通过这个名为 useradd的本地脚本,作为root来执行任何他想要的命令了。
三、sudo免密配置
略过。
四、sudo命令及参数
-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。
具体实例和讲解可参考:
https://wangchujiang.com/linux-command/c/sudo.html
五、sudo与su
在Linux/GNU中,有两种方式可以用来提升权限运行命令:sudo 和 su
su 表示 “swich user”。使用 su 命令,我们可以切换到root用户并执行命令。但这种方式有一些缺点:
①需要与别人共享root密码;②无法审查用户执行的命令;③对于root用户,不能授予有限的权限。
sudo以独特的方式解决了这些问题,
①不需要共享root密码,普通用户可以使用自己的密码提升权限执行命令;②sudo操作的记录都会被记录下来,管理员可随时审查用户的操作;③可控的sudo用户访问,可以限制普通用户只能执行哪些命令。