要根或不根?

请看这里 (有点)相关的话题。

我在Linux机器上的日常任务需要超级用户访问,因为我将(重新)启动服务,监视系统,(不)安装的东西等

前一段时间,我在IRC会议上被侮辱/嘲笑,因为我是以root身份login安装ruby的。

显然,在root用户下安装服务是正常的,而不是从root帐户运行的服务。 这是可以理解的 – 你不希望访问违反例如apache,以允许root权限。

*与IRC上真棒的人相矛盾……去图。

所以我想,主要的问题是为什么要为许多服务安装指令(最近,在nodejs,ruby和cloud9ide上看过),假设你在安装时没有root权限?

例如,仅在上个星期,我安装了cloud9ide,但由于它明确禁止我以root身份运行它,所以无法运行。 然而,没有人提到这件事。 我已经通过运行解决了这个问题:

su -s /bin/sh apache -c "node /var/www/cloud9/server.js -l 192.168.1.117 -p 3131 -w /var/www/html" 

除了已经提到的原因之外,

在一个足够大的环境中有一个主机或一组主机的多个系统pipe理员,sudo允许共享root帐户的问责制没有。

正如你已经意识到某些东西需要root权限。 当你需要他们时,你应该使用他们。

当你知道你正在运行的命令会做什么,并且不会有任何意想不到的副作用时,使用root是完美的。

下载互联网软件并编译它是潜在的危险。 它可能是越野车,或有故意伤害的命令。 例如,makefile中可能有一个rm -rf命令。 或者,也许构build脚本的其他部分有一些未知的错误,将消灭你的系统。 同样的推理也可以用来鼓励你不要在生产系统上编译未经testing的软件。 您应该在testing环境中构build和testing软件包,这并不重要。

在执行root权限时,您可以遵循一个简单的清单。 如果你不能对这三个项目回答yes,你可能不应该使用root。

  • 该命令是否需要root权限?
  • 你完全明白这个命令会做什么吗?
  • 你有备份还是有能力撤销/如果什么时候中断

所以在一台虚拟机上,你只需要一个快照就可以逃脱你的root权限。 在你的生产服务器上有许多关键的服务,你需要更加谨慎地使用root权限。

就像所有与安全相关的东西都是关于风险的。 与努力/奖励相比,您必须对潜在风险做出明智的决定。 有些地方几乎不应该使用root,有些情况下使用root编译东西可能没有风险。

这些指令试图假定读者应该遵循隐含的“最佳实践”,它不需要以root身份login。

这些types的教程/说明有一部分目标受众只是复制粘贴命令,或者有足够的知识来创build一个真正的混乱。

限制初学者遵循这些最佳实践来保护自己(以及在IRC上的感受)是非常重要的。

在这方面有一些确定的事情:

  • 每个直接使用root的人都会发指令,会在某个时候散乱地冒出来。 (这并不是说“sudo”用户是免疫的,只是不太可能,并且可以对这种损害给予限制)。

  • 大多数忽视最佳实践并最终导致肥胖的用户不知道如何解决新的混乱问题。

  • 该用户可能会接近帮助论坛或IRC频道寻求帮助,从而被嘲笑为根源。