su
或 sudo
命令。文章目录
su
vs sudo
su
会让你将你的root密码分享给其他用户,而 sudo
则可以在不需要root密码的情况下执行系统命令。sudo
让你使用自己的密码来执行系统命令,即,无需root密码就可以委派系统责任。sudo
?sudo
是一个 setuid 二进制程序,代表授权用户执行root命令,用户需要输入自己的密码才能执行跟随 sudo
的系统命令。sudo
?/usr/sbin/visudo
来添加或者删除可以执行 sudo
的用户列表。$ sudo /usr/sbin/visudo
默认情况下,sudo列表看起来像下面这样的字符串:
root ALL=(ALL) ALL
注意:你必须是root用户才能编辑/usr/sbin/visudo文件。
root ALL=(ALL) ALL
是一个模板,并授予其他人无限制的访问权限,这可能非常有害。编辑 /usr/sbin/visudo
文件为类似下面的模式可能会非常危险,除非你完全信任所有列出的用户。root ALL=(ALL) ALL
adam ALL=(ALL) ALL
tom ALL=(ALL) ALL
mark ALL=(ALL) ALL
```text
#### sudo的参数
一个正确配置的 sudo
是非常灵活的,需要运行的命令数量可以精确配置。
配置的 sudo
行的语法是:
User_name Machine_name=(Effective_user) command
上述语法可以分为四部分:
sudo
行可以写成:mark beta.database_server.com=(ALL) ALL
Q2. 你有一个用户 tom
,他应该以root以外的用户身份在同一数据库服务器上执行系统命令,如上所述。对于上述情况,sudo
行可以写成:mark beta.database_server.com=(tom) ALL
Q3. 你有一个sudo用户 cat
,他应该只运行命令 dog
。要实现上述情况,我们可以写 sudo
为:mark beta.database_server.com=(cat) dog
Q4. 如果用户需要被授予多个命令怎么办?如果用户需要运行的命令数量少于10,我们可以把所有的命令放在一起,中间用空格隔开,如下所示:
mark beta.database_server.com=(cat) /usr/bin/command1 /usr/sbin/command2 /usr/sbin/command3 ...
如果这个命令列表变化到范围,其中实际上不可能手动输入每个命令,我们需要使用别名。别名!对,就是那个Linux实用程序,一个长长的命令或一列命令可以被引用为一个小而简单的关键字。
一些可以在sudo
配置文件中替代条目的别名示例。User_Alias ADMINS=tom,jerry,adam
user_Alias WEBMASTER=henry,mark
WEBMASTERS WEBSERVERS=(www) APACHE
Cmnd_Alias PROC=/bin/kill,/bin/killall, /usr/bin/top
可以指定系统组,代替用户,属于该组的用户只需在后面加上 %
,如下所示:%apacheadmin WEBSERVERS=(www) APACHE
Q5. 如何在不输入密码的情况下执行 sudo
命令?我们可以通过使用 NOPASSWD
标志来执行 sudo
命令,无需输入密码。adam ALL=(ALL) NOPASSWD: PROCS
在这里,用户 adam
可以执行所有在 "PROCS" 下别名的命令,无需输入密码。sudo
提供了一个比 su
更强大、更安全的环境,并且有很多灵活性。此外,sudo
的配置很简单。一些Linux发行版默认启用了 sudo
,而现在大多数发行版需要你作为安全措施启用它。要将一个用户(bob)添加到sudo,只需以root身份运行下面的命令。
adduser bob sudo