这个问题是用户主目录中文件的默认所有者/权限经过一番搜索,发现有关 Unix&Linux SE 的问答。
当你使用
sudo command
出于安全原因,只保留了一组环境变量(尽管这一点在这里有争议……但很好)。是否$HOME
保留取决于配置默认值;在 Ubuntu 中,默认情况下会保留它,您需要使用不sudo -H
保留它(并将其设置为目标用户)。
检查一下(引用时要小心,我们不想$HOME
在打电话之前得到解决sudo
!):
[romano:~] % sudo bash -c 'echo $HOME'
/home/romano
[romano:~] % sudo -H bash -c 'echo $HOME'
/root
我可以看到,保留$HOME
可能会产生负面影响,sudo whatever
并且如果程序写入或修改文件$HOME
(配置等),您将最终得到一个由 root 拥有的文件,随后普通用户无法修改该文件。
这可能会造成严重破坏,尤其是对新用户...我们在 X 下的终端仿真器中因 root 拥有而出现相当多的登录循环.Xauthority
(诚然很疯狂)sudo startx
,或者因误导而导致无法修改的配置设置sudo dconf-editor
,等等。
另一方面,我看不到任何积极的影响。所以我现在正在运行
Defaults always_set_home
在我的/etc/sudoers
(1),检查一下:
[romano:~] % sudo bash -c 'echo $HOME'
/root
问题:$HOME
如果有的话,默认保留有哪些积极影响?
脚注
(1)始终使用终端(最好是 VC)并运行 shell 进行编辑/etc/sudoers
。visudo
当sudo -i
您犯错时,您会感激自己失去了超级用户权限。
答案1
您正确地指出了sudo
在 中写入文件的应用程序存在的潜在问题$HOME
。
这种行为的原因实际上并不是开发人员的刻意选择,而更多的是因为它对于 sudo
最初设想的预期目的来说并不是真正必要的:用于更简单的 unix 风格应用程序,这些应用程序只需接受一些输入并以可预测的方式返回一些输出,然后返回。它最初的设计目的并不是与以交互方式运行并管理自己的文件的大型应用程序竞争。
正如正确指出的那样,sudo -i <command>
对于任何应用程序来说都是很好的交互的(想想我代表交互的,即使这不是它所代表的意思)。 -i
具有进一步的理论优势,-H
因为目标用户的环境,例如.profile
,也被读取。
它还gksudo <command>
适用于图形交互式应用程序,但sudo -i <command>
对于这些应用程序来说也运行得足够好。
如果你不想sudo -i <command>
一直打字,我想你可以为其创建一个脚本/别名。