答案1
好吧,这也许是幻想,但有许多人都说了同样的话:
为什么我应该对 Gtk 应用程序使用 gksudo 而不是 sudo?
不过,也有时候,副作用可能很轻微,例如 Firefox 扩展无法粘连,也可能很严重,例如由于 .ICEauthority 上的权限发生变化而无法再登录。
为什么用户永远不应该使用普通的 sudo 来启动图形应用程序?
假设您以 root 身份运行 gedit(图形文本编辑器)。如果您运行 sudo gedit,HOME 将继续指向您的主目录,即使该程序以 root 身份运行。因此,gedit 将以 root 身份将配置文件写入您的主目录。这有时会导致配置文件归 root 所有,因此您无法访问(当您稍后以自己而不是 root 身份运行该程序时)。
-
首先,不要使用 sudo 或 su 来更改用户以运行图形进程,否则您可能会遇到问题(~/.ICEauthority 更改所有者是一个值得注意的问题)。相反,请创建使用以下命令的快捷方式:
-
嗯,说实话,大多数时候都不是。对于很多应用程序,你可以以不正确的方式运行它们 - 对图形应用程序使用 sudo 并且不会看到任何不良副作用。
...
出现这些错误的原因是,有时
sudo
启动应用程序时,它会以 root 权限启动,但使用用户的配置文件。
那么,让我们测试一下。
2 个全新的虚拟盒。Ubuntu 14.04。切勿在其上运行 Firefox。运行该命令时会发生什么sudo firefox
?
tim@Hairy14CVB:~$ sudo firefox
(process:4857): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
...
[email protected]:2192:13
对于两个虚拟盒子来说,这是相同的(或至少非常相似)。在 Firefox 运行时,我安装了一个 YouTube 扩展 - 一个特色扩展。然后我关闭了 Firefox,并检查了输出。
tim@Hairy14CVB:~$ ls -la .ICEauthority
-rw------- 1 tim tim 1336 Jun 4 21:31 .ICEauthority
嗯,.ICEauthority
还行!不过……
tim@Hairy14CVB:~$ ls -la | grep root
drwxr-xr-x 3 root root 4096 Jun 1 20:49 ..
drwx------ 3 root root 4096 Jun 5 22:41 .dbus
drwx------ 4 root root 4096 Jun 5 22:41 .mozilla
我的主文件夹 ( /home/tim/
) 中有 3 个项目由 root 拥有(..
、.dbus
和.mozilla
)。对于两个虚拟盒来说,情况相同(或至少非常相似)。
那么,这有关系吗?我不确定,所以我运行了 Firefox,如下所示:
tim@Hairy14CVB:~$ firefox
(process:4959): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
Error: Access was denied while trying to open files in your profile directory.
还有这个丑陋的错误:
有关完整的终端输出(包括 Firefox babble),请参阅这两个 pastebins,这里和这里。
顺便说一下,我仍然可以以 root 身份运行 Firefox。但现在有更多文件被更改了:
tim@Hairy14VB:~$ ls -la | grep root
drwxr-xr-x 4 root root 4096 Jun 3 19:46 ..
drwx------ 3 root root 4096 Jun 5 22:55 .adobe
drwx------ 3 root root 4096 Jun 5 22:40 .dbus
drwx------ 3 root root 4096 Jun 5 22:55 .macromedia
drwx------ 4 root root 4096 Jun 5 22:40 .mozilla
这是因为我将图片上传到 imgur.com 吗?不确定。
我该如何解决这个问题?chown
我不明白,但是互联网说要做就做,它是一个虚拟框,所以 yolo。
sudo chown -R tim:tim /home/tim/
这样就修复了这个问题。现在输出只是文件..
:
tim@Hairy14VB:~$ ls -la | grep root
drwxr-xr-x 4 root root 4096 Jun 3 19:46 ..
在我的实际计算机上也一样。哦,在我的 Kubuntu 虚拟机上也是如此:
tim@Hairy14VB:~$ ls -la | grep root
drwxr-xr-x 3 root root 4096 May 16 14:10 ..
我甚至从未在其中运行过 sudo 命令。所以一切都很好。只是不要sudo
在 GUI 应用程序上运行。
最终测试:使用-H
和-i
标志运行它:
sudo -H firefox
和
sudo -i firefox
好消息!不过,唯一的 root “东西”是..
。而且我firefox
无需 root 就可以运行。
OP 想让我谈谈 Gedit。
我跑了
sudo gedit
然后安装了一些随机插件。输出如下:
tim@Hairy14VB:~$ ls -la | grep root
ls: cannot access .gvfs: Permission denied
drwxr-xr-x 4 root root 4096 Jun 3 19:46 ..
请注意,我甚至无法查看所有权,.gvfs
因此我执行了以下操作:
tim@Hairy14VB:~$ sudo ls -la | grep root
drwxr-xr-x 4 root root 4096 Jun 3 19:46 ..
dr-x------ 2 root root 0 Jun 6 10:05 .gvfs
因此运行sudo gedit
确实会将我的主目录中的文件更改为根目录。
我仍然可以打开 gedit,但这次我得到了一些垃圾:
(gedit:7422): Gtk-WARNING **: Attempting to read the recently used resources file at `/home/tim/.local/share/recently-used.xbel', but the parser failed: Failed to open file '/home/tim/.local/share/recently-used.xbel': Permission denied.
这表明有另一个文件 ( ~.local/share/recently-used.xbel
) 已被更改。我认为这是最近使用的文件列表,(幸运的猜测)我现在不再有最近使用的文件列表:
那里应该有一个名为的文件output2.txt.save2
。我的代词是他/他
答案2
至于sudo gedit
,没有什么可怕的,只是做法不当,尤其是最近。建议会有多难sudo -H gedit
?
-H
,--set-home
请求安全策略将 HOME 环境变量设置为目标用户的密码数据库条目指定的主目录。根据策略,这可能是默认行为。
什么做发生?
您的主文件夹中有几个 root 拥有的文件。其中一个 ( recently-used.xbel
) 可能会返回用户所有权。当文件被删除并重新创建时,可能会发生这种情况。要查看sudo gedit
发生了什么变化,请运行find ~ -user root -group root
并查看返回的内容。默认情况下,这应该什么都没有。
使用该命令,您可能会看到几个由 root 拥有的文件。其中一个是新的.file
、,.gvfs
稍后会是 root 拥有的~/.cache/dconf
,以及前面提到的recently-used.xbel
。
所以没有“天空正在衰落”之类的东西,但仍然如此。现在有报告称继续使用会导致其他问题,但我不会声称我在这里没有看到什么。
还请注意,从 13.10 开始,asudo gedit
将使用用户的 gedit 配置,而不是 root 的 gedit 配置。同样,这只是不好的做法,那么为什么要继续这样做或建议其他人这样做呢?