su 或 sudo 命令。文章目录
su vs sudosu 会让你将你的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) ALLQ2. 你有一个用户 tom,他应该以root以外的用户身份在同一数据库服务器上执行系统命令,如上所述。对于上述情况,sudo 行可以写成:mark beta.database_server.com=(tom) ALLQ3. 你有一个sudo用户 cat,他应该只运行命令 dog。要实现上述情况,我们可以写 sudo 为:mark beta.database_server.com=(cat) dogQ4. 如果用户需要被授予多个命令怎么办?如果用户需要运行的命令数量少于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) APACHEQ5. 如何在不输入密码的情况下执行 sudo 命令?我们可以通过使用 NOPASSWD 标志来执行 sudo 命令,无需输入密码。adam ALL=(ALL) NOPASSWD: PROCS在这里,用户 adam 可以执行所有在 "PROCS" 下别名的命令,无需输入密码。sudo提供了一个比 su 更强大、更安全的环境,并且有很多灵活性。此外,sudo的配置很简单。一些Linux发行版默认启用了 sudo,而现在大多数发行版需要你作为安全措施启用它。要将一个用户(bob)添加到sudo,只需以root身份运行下面的命令。
adduser bob sudo