su 和 sudo 的区别以及在 Linux 中配置 sudo

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

这里,adamtom可以在任何计算机上以 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。不要忘记在评论部分向我们提供您的宝贵反馈。