“sudo”默认保留$ HOME的优势是什么?

这个问题是用户主目录中文件的默认所有者/权限的副作用,以及在Unix和Linux SE上发现此问答的搜索之后。

当你使用

sudo command 

出于安全原因,只保留了一堆环境变量(虽然这里有争议……但是很好)。 配置默认值是决定是否保留$HOME ; 默认情况下,在Ubuntu中保留它,你需要使用sudo -H来保存它(并将其设置为目标用户)。

检查它(小心引用,我们不希望在调用sudo之前解决$HOME !):

 [romano:~] % sudo bash -c 'echo $HOME' /home/romano [romano:~] % sudo -H bash -c 'echo $HOME' /root 

我可以看到保留$HOME可能会产生负面影响,你可以使用sudo whatever ,如果程序在$HOME (配置,无论如何)中写入或修改文件,你将以root拥有的文件结束,随后不能正常修改用户。

这可能会对新用户造成严重破坏……由于在X下的终端仿真器中的一个(无可否认的疯狂) sudo startx ,或由于一个不可修改的配置设置,我们有很多登录循环由于root拥有的.Xauthority错误的sudo dconf-editor等等。

另一方面,我认为没有积极影响。 所以我现在正在运行

 Defaults always_set_home 

在我的/etc/sudoers (1)中 ,检查它:

 [romano:~] % sudo bash -c 'echo $HOME' /root 

问题: 如果有的话,默认保留$HOME有什么积极影响?


脚注

(1)始终,始终使用visudo和带有sudo -i shell运行的终端(更好的VC)编辑/etc/sudoers 。 如果你犯了一些错误,将自己从超级用户的权力中剔除,你将会感激不尽。

你指出sudo和在$HOME中写入文件的应用程序的潜在问题是正确的。

这种行为的原因并不是真正有意识的开发人员选择,而是更多的是它对于sudo最初设想的预期目的并不是真正必要的:用于简单的unix风格的应用程序,只需要一些输入并返回一些以可预测的方式输出然后返回。 最初它不会被设计为与交互式运行和管理自己的文件的大型应用程序竞争。

正如所指出的那样, sudo -i 对任何具有交互性的应用程序都有好处(想想代表互动 ,即使它不是它代表的东西)。 -i具有超过-H进一步理论优势,因为目标用户的环境(例如.profile )也被读取。

对于图形交互式应用程序,还有gksudo ,但是sudo -i 对于那些也适用。

如果你不想一直输入sudo -i ,你可以为它创建一个脚本/别名。