Linux通常比许多其他操作系统更安全。这种安全性的一个关键部分来自于,它控制谁可以在系统上执行什么操作。默认情况下,普通用户无法进行系统级操作。
当普通用户需要进行影响整个系统的更改时,他们必须使用su或者sudo命令以获得临时管理权限。
以下解释基于,但它适用于。
su(替代用户) – 此命令可让您切换到另一个用户帐户,通常是 root 帐户。要使用它,您需要 root 密码,这意味着如果其他人也需要访问权限,则与其他人共享此密码,这被认为是有风险的。sudo(超级用户做) – 此命令允许用户以管理权限执行特定的系统命令,而无需共享 root 密码。相反,用户输入自己的密码,这提供了更安全的责任委派。
例子:
# Using su to switch to root su - Password: [root password here] # Using sudo to update packages sudo apt update [sudo] password for user: [your password here]
如你看到的,sudo与相比,提供了更安全、更灵活的方式来执行管理任务su。
什么是须藤?
sudo是一个特殊的程序(setuid 二进制文件),允许授权用户以 root 用户或其他用户身份运行命令。它提供了一种无需共享 root 密码即可执行管理任务的安全方法。
当你使用sudo,您必须输入自己的密码,而不是 root 密码,这可确保您运行的每个命令的责任都与您的帐户相关联。
在以下示例中,Apache Web 服务器以 root 权限重新启动,请注意用户从未键入 root 密码;而是使用他们自己的密码。
sudo systemctl restart apache2
谁可以使用 sudo?
可以运行的用户列表sudo被控制在/etc/sudoers文件,可以通过visudo命令以避免可能破坏系统的语法错误:
sudo visudo
默认条目如下所示,这意味着 root 用户可以以任何用户身份在任何主机上运行任何命令。
root ALL=(ALL:ALL) ALL

向其他用户授予 sudo 访问权限
无限制的给予sudo访问多个用户可能存在风险。如果每个用户都可以以 root 身份运行任何命令,那么一个简单的错误或帐户被盗可能会破坏系统或暴露敏感数据。
危险的例子(不要这样做):
adam ALL=(ALL:ALL) ALL tom ALL=(ALL:ALL) ALL
这里,adam和tom可以在任何计算机上以 root 身份运行任何命令,这实际上赋予了他们类似于 root 用户的完整管理权限。
相反,仅授予每个用户所需的特定权限,如下所述。
了解 sudo 语法
正确配置的sudo非常灵活,用户可以运行的命令数量可以精确配置。
配置的语法sudo线路是:
User_name Machine_name=(Effective_user) command
该语法可以分为四个部分:
- 用户名→ 名称
sudo用户。 - 机器名称→ 主机名
sudo命令有效,当您有多个主机时这很有用。 - 有效用户→ 将运行该命令的用户(例如 root 或其他帐户)。
- 命令→ 允许该用户执行的一个或多个命令。
这种结构允许管理员精确控制每个用户可以执行的操作,而不是授予完全的 root 访问权限。
sudo 配置示例
以下是一些常见情况以及如何配置sudo对于每个:
1. 授予特定用户完整的数据库访问权限
你有一个用户mark谁是数据库管理员,并且您希望他能够完全访问数据库服务器 beta.database_server.com,但无法访问其他主机,您的 sudo 行应该是:
mark beta.database_server.com=(ALL) ALL
2. 以特定非 root 用户身份运行命令
你有一个用户tom谁应该以特定用户身份执行系统命令(而不是根)在同一数据库服务器?
tom beta.database_server.com=(tom) ALL
3. 限制用户只能使用单个命令
你有一个 sudo 用户cat谁应该只运行命令dog。
cat beta.database_server.com=(cat) dog
4. 允许用户运行多个命令
用户需要执行多个命令,但列表很短(少于 10 个命令)。
cat beta.database_server.com=(cat) /usr/bin/command1 /usr/sbin/command2 /usr/sbin/command3
对于较长的命令列表,最好使用别名。
User_Alias ADMINS=tom,jerry,adam User_Alias WEBMASTERS=henry,mark WEBMASTERS WEBSERVERS=(www) APACHE Cmnd_Alias PROC=/bin/kill,/bin/killall,/usr/bin/top
您还可以通过在组名称前添加前缀来将命令分配给整个组%:
%apacheadmin WEBSERVERS=(www) APACHE
5. 允许无密码 sudo
用户需要运行特定命令而无需输入密码。
adam ALL=(ALL) NOPASSWD: PROCS
在这里,用户adam可以执行别名下的所有命令PROCS无需输入密码。
概括
sudo与相比,提供了一个强大、安全的环境和灵活性su。而且,sudo配置很简单。一些 Linux 发行版有sudo默认情况下启用,而当今大多数发行版都要求您启用它作为安全措施。
添加用户(bob)到sudo,只需以 root 身份运行以下命令:
adduser bob sudo
现在就这些了。我会带着另一篇有趣的文章回来。在那之前,请继续关注并连接到 Howtoing。不要忘记在评论部分向我们提供您的宝贵反馈。
