哪种方法更好?
对于桌面使用来说,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 所做的只是锁定文件以防止并发编辑并确保文件仍能正确解析。