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


8

哪种方法更好?

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

  • 作为普通用户,我可以拥有更一致的历史记录
  • 不需要记住两个密码,当我不定期执行管理工作时,尤其如此。
  • 无需在安装时创建其他根帐户。

但是关于服务器管理?

在服务器中,通常您已经创建了一个根帐户,并且您可能经常会做一些管理工作。因此sudo的优点似乎不再成立。

而且,在大多数发行版中,在命令行上配置su很容易,只需将用户添加到wheel组即可。(您甚至可以-G wheeluseradding 时通过。)因此,可以很容易地将su的配置自动化到shell脚本中。

但是对于须藤?您需要先添加用户,然后才能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?


这应该是一个Wiki,否则可能会因为过于主观而被关闭。
John Gardeniers

我认为这不太主观。就像Raphink的出色答案所示,在多用户环境中,sudo是首选。
弱势

我认为这根本不是一个主观的问题。这与您是否喜欢sudo无关,而在于它是否适合一种用途。
ℝaphink

顺便说一句,我对您的visudo -c命令也感到有些惊讶,因为我认为您需要visudo -c -f检查特定的文件。
ℝaphink

@Raphink是的,你是完全正确的。我已经编辑了我的问题。
09年

Answers:


16

当然,在服务器上必须有root帐户,但是我更喜欢授予sudo权限,尤其是在计算机上有多个用户的情况下,这是出于以下几个原因:

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

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

Puppet也可以与Augeas关联以管理您的sudoers文件。


3
实际上,我没有考虑多用户案例。没错,当有多个用户时,sudo显然是赢家。但是对于单个用户,我仍然认为su就足够了。PS感谢您提到木偶。只是之前没有意识到这种可爱的工具。
弱势

顺便说一句,如果您希望在使用puppet部署之前先验证sudoers文件,那么我手边有一个validate函数可以做到这一点。
phaphink

1
使用sudo时,root用户甚至不需要输入有效的密码,因为您只需要依赖用户的密码即可。除了在有人离开时无需更改root密码之外,您还少了一个可以猜到/破解/被黑客入侵的密码。
香农纳尔逊

@ShannonNelson我相信他们提到的是root用户和密码,因为通常随这些服务器提供租用的服务器。
AJP

1

您似乎在使自己受苦(在管理/ etc / sudoers时)。一个简单的

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

就足够了。visudo所做的所有事情都是锁定文件以防止并发编辑,并确保文件仍然正确解析。


如果出现问题,我使用visudo -c来检查文件。(尽管不应该。但是也许当我编辑草稿时,我错过了键入某些字符的权限,或者更糟的是,键入了一些特殊的不可见的特殊字符。)但是我同意,您的单行解决方案就足够了。
弱势
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.