我已经阅读了社区“RootSudo”文档并对这一行感兴趣:
您永远不应该使用普通的 sudo 以 Root 身份启动图形应用程序。
为什么?有什么不同?请提供一个简单的解释,因为我只是一个普通的桌面用户。
Eli*_*gan 136
在 Ubuntu 19.10 及更高版本中,该文章(以及本答案)中的警告不再适用。请参阅WinEunuuchs2Unix 的回答以及这个问题。
图形应用程序通常将设置和其他特定于用户的数据存储在写入用户主文件夹内的配置文件中。应用程序用来确定它们应该用作用户主文件夹的主要机制是HOME 环境变量。(您可以使用 自行检查echo $HOME)。
假设您正在运行gedit(图形文本编辑器)作为root. 如果您运行sudo gedit,HOME将继续指向您的主目录,即使程序以root. 因此,gedit会写配置文件作为root到你的home目录。这有时会导致在配置文件中所拥有的root,因而无法访问你(当你在以后运行程序为自己,而不是为root)。这主要发生在应用程序必须创建新的配置文件时。默认情况下,新创建的文件归创建它们的用户所有(在这种情况下是root,而不是您)。
这就是为什么你应该使用图形sudo前端而不是直接运行图形应用程序的主要原因sudo。在 Ubuntu 及其大多数衍生产品(包括 Xubuntu 和 Lubuntu)中,标准图形前端是gksu/gksudo。在 Kubuntu 中,它是kdesudo. (这取决于所使用的桌面环境。)
如果您想sudo直接使用来运行图形应用程序,例如gedit,您可以运行:
sudo -H gedit
Run Code Online (Sandbox Code Playgroud)
该-H标志sudo设置HOME为指向root的主文件夹(即/root)。
这仍然不会.Xauthority通过将其复制到临时文件夹来自动处理所有权(这是图形sudo前端为您处理的另一件事)。但是在.Xauthority无法访问的偶发事件中,您会收到一条错误消息,指出它是,然后您可以通过删除它 ( sudo rm ~/.Xauthority)来解决问题,因为它会自动重新生成。因此,保护.Xauthority的所有权和权限不如保护配置文件的所有权和权限重要。
与root-owned 相比.Xauthority,当配置文件归为 时root,问题所在并不总是那么明显(因为图形程序通常会运行,但不能很好地运行,并且会向控制台输出任何有用的错误)。有时修复起来会更麻烦,特别是如果您希望主目录中的一个或多个文件归您以外的其他人所有(因为这样您就无法简单地通过递归地chown对所有文件进行修复)回到你自己)。
因此,sudo(至少没有-H)不应该用于运行图形应用程序,除非您非常熟悉应用程序的内部工作方式并确定它不会尝试编写任何配置文件。
Win*_*nix 14
从Ubuntu 19.10 开始,sudo some_command现在输入与输入效果相同sudo -H some_command。这意味着触及的任何配置文件的目录都在/root目录下而不是/home/regular_userID目录下(又名$HOME)。
这使得整个问答在很大程度上对于 Ubuntu 19.10 及更高版本的用户来说是一个没有实际意义的问题。
要查看是否在您的发行版中sudo工作sudo -H,请尝试以下简短测试:
$ sudo printenv | grep HOME
HOME=/home/rick
$ sudo -H printenv | grep HOME
HOME=/root
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,sudo上面的表现并不像sudo -H这样使用普通sudo会损害你的用户配置文件。
的替代方法gksu nautilus,gksu gedit或者sudo -H gedit是使用nautilus-admin附加组件。它允许您使用Nautilus浏览文件和目录,然后以 root(管理员)身份打开它们。
安装很简单:
sudo apt install nautilus-admin
Run Code Online (Sandbox Code Playgroud)
现在,当您在 Nautilus 中时,您将有一个额外的选项以管理员身份进行编辑:
gedit 作为 root 不允许首选项当您gedit以 root 身份运行时,您不能使用您作为普通用户设置的首选项,用于制表位、将制表符转换为空格、字体名称、字体大小、换行等。
为了解决这个问题,我编写了脚本sgedit来继承用户首选项并将它们应用到 root:如何将我的 root gedit 与我的用户 gedit 的首选项同步?
sgedit filename1 filename2 ...sudo -H保留文件所有权,同时获得根权限。sudo超时,则请求密码。gedit作为后台任务调用,以便终端提示立即重新出现。| 归档时间: |
|
| 查看次数: |
31307 次 |
| 最近记录: |