在服务器管理中应该使用 sudo 还是只使用 su root?

在服务器管理中应该使用 sudo 还是只使用 su root?

哪种方法更好?

对于桌面使用来说,sudo 似乎更好,因为:

  • 作为普通用户,我可以拥有更一致的历史记录
  • 不需要记住两个密码,尤其是当我不经常进行管理工作时。
  • 安装时无需创建额外的 root 帐户。

但是关于服务器管理呢?

在服务器中,通常你已经创建了一个 root 帐户,并且你可能经常执行管理工作。因此 sudo 的优势似乎不再存在。

而且,在大多数发行版中,在命令行上配置 su 非常简单,只需将用户添加到 wheel 组即可。(您甚至可以在输入-G wheel时传递useradd。)因此,配置 su 可以轻松地自动化到 shell 脚本中。

但是对于 sudo 呢?您需要先添加用户,然后visudo以交互方式运行。这很糟糕,因为您无法将其自动化到 shell 脚本中。

(当然可以。例如,

echo '%wheel    ALL=(ALL)   ALL' >> /tmp/sudoers.tmp
cp /etc/sudoers /etc/sudoers.old
visudo -c -f /tmp/sudoers.tmp &&  mv /tmp/sudoers.tmp /etc/sudoers

但至少不是那么容易。)

那么你的看法是什么?对于服务器环境,你更喜欢 sudo 还是 su root?

答案1

服务器上肯定需要 root 帐户,但我更喜欢授予 sudo 权限,尤其是当机器上有多个用户时,原因如下:

  • 我不仅使用 sudo 授予所有命令的所有权限,还使用 ​​sudo 授予特定用户对特定命令的特定权限。
  • 通过将用户分配到功能组,我可以使用 sudoers 中的这些组来管理他们的权限,而不是单独管理用户。
  • sudo 访问默认记录在 auth.log 中,包括哪些用户在什么时候使用了 sudo。
  • sudo 允许使用一个文件管理多台机器的配置。
  • 每个用户都保留自己的密码,因此当用户离开时无需更改 root 密码。

至于使用脚本进行管理,新版本的 sudo 支持包含,但我更喜欢使用 puppet 并设置连接 sudoers 内容的类。

Puppet 还可以与奥杰阿斯管理你的 sudoers 文件。

答案2

你似乎给自己找了麻烦(当涉及到管理 /etc/sudoers 时)。一个简单的

echo '%wheel    ALL=(ALL)   ALL' >> /etc/sudoers

就足够了。visudo 所做的只是锁定文件以防止并发编辑并确保文件仍能正确解析。

相关内容