当 gedit 与 sudo 一起使用时会发生哪些具体的坏事?

Pil*_*ot6 9 configuration gedit root sudo ownership

我读了这个答案,解释说“有时” root 可以在/home/$USER目录中拥有某些东西。

谁能举个例子来证明。当我运行时,当发生非常糟糕的事情时给出一个测试用例

sudo gedit /etc/rc.local
Run Code Online (Sandbox Code Playgroud)

编辑文件并保存。

我在试图帮助 OP 的过程中得到了很多反对意见,并且大量评论说使用 sudo 运行 gedit 是一种犯罪。

谁能举一个真实的例子?

我清楚地解释了为什么这个问题不是重复的。对于链接的问题,没有特定于 gedit 的答案。

重要的是要解释为什么广泛使用sudo gedit是不好的,或者不是真的,等等。

Tim*_*Tim 12

好吧,也许这是一种幻想,但有很多人都在说同样的话:

  • 为什么我应该为 Gtk 应用程序使用 gksudo 而不是 sudo?

    但是,也有其他时候,副作用可能像 Firefox 扩展程序不粘连一样轻微,也可能像 .ICEauthority 的权限发生变化而导致无法再登录。

  • 为什么用户永远不应该使用普通的 sudo 来启动图形应用程序?

    假设您以 root 身份运行 gedit(一个图形文本编辑器)。如果您运行 sudo gedit,HOME 将继续指向您的主目录,即使程序以 root 身份运行。因此,gedit 将以 root 身份将配置文件写入您的主目录。这有时会导致配置文件由 root 拥有,因此您无法访问(当您以后以自己而不是 root 身份运行程序时)。

  • 如何以不同的用户 (Debian) 运行 GUI 程序?

    首先,不要使用 sudo 或 su 来更改用户以运行图形进程,否则您很可能会遇到问题(~/.ICEauthority 更改所有者是一个值得注意的问题)。相反,创建一个使用以下命令的快捷方式:

  • 以图形方式运行 Sudo

    好吧,老实说,大多数时候并非如此。对于许多应用程序,您可以以不正确的方式运行它们 - 将 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

...

shutdownObserver@XPIProvider.jsm:2192:13
Run Code Online (Sandbox Code Playgroud)

这对于两个虚拟盒子是相同的(或至少非常相似)。当 firefox 运行时,我安装了一个 youtube 扩展程序 - 一个特色扩展程序。然后我关闭了 Firefox,并检查了输出。

tim@Hairy14CVB:~$ ls -la .ICEauthority 
-rw------- 1 tim tim 1336 Jun  4 21:31 .ICEauthority
Run Code Online (Sandbox Code Playgroud)

嗯,.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
Run Code Online (Sandbox Code Playgroud)

我的主文件夹 ( /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.
Run Code Online (Sandbox Code Playgroud)

还有这个丑陋的错误:

在此处输入图片说明

对于完整的终端输出(包括 firefox babble),请参阅这两个 pastebin,herehere

顺便说一下,我仍然可以以 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
Run Code Online (Sandbox Code Playgroud)

这是因为我上传了一张图片到 imgur.com 吗?没有把握。

我是如何解决这个问题的?chown. 我不明白,但互联网上说要这样做,它是一个Virtual Box,所以yolo。

sudo chown -R tim:tim /home/tim/
Run Code Online (Sandbox Code Playgroud)

这修复了它。现在输出只是..文件:

tim@Hairy14VB:~$ ls -la | grep root
drwxr-xr-x  4 root root  4096 Jun  3 19:46 ..
Run Code Online (Sandbox Code Playgroud)

在我的实际计算机上也是如此。哦,在我的 Kubuntu 虚拟机上:

tim@Hairy14VB:~$ ls -la | grep root
drwxr-xr-x  3 root root  4096 May 16 14:10 ..
Run Code Online (Sandbox Code Playgroud)

我什至从未运行过 sudo 命令。所以一切都很好。只是不要sudo在 GUI 应用程序上运行。

最终测试:使用-H-i标志运行它:

sudo -H firefox
Run Code Online (Sandbox Code Playgroud)

sudo -i firefox
Run Code Online (Sandbox Code Playgroud)

还有好消息!尽管如此,唯一的根“东西”是... 我可以在firefox没有root的情况下运行。


OP 要我谈谈 Gedit。

我跑了

sudo gedit
Run Code Online (Sandbox Code Playgroud)

然后安装了一些随机插件。这是输出:

tim@Hairy14VB:~$ ls -la | grep root
ls: cannot access .gvfs: Permission denied
drwxr-xr-x  4 root root   4096 Jun  3 19:46 ..
Run Code Online (Sandbox Code Playgroud)

请注意,我什至无法查看所有权,.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
Run Code Online (Sandbox Code Playgroud)

所以运行sudo gedit确实将我的主目录中的文件更改为 root。

我仍然可以打开 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.
Run Code Online (Sandbox Code Playgroud)

这表明还有另一个文件 ( ~.local/share/recently-used.xbel) 已更改。我认为这是最近使用的文件列表和(幸运的猜测)我现在不再有我最近使用的文件列表:

那里应该有一个名为output2.txt.save2. 我的代词是他/他

  • @Pilot6 - 在问题“谁能举一个例子来证明它..... 谁能举一个真实的例子?” - 这链接到过去的东西,并给出了一个例子,说明以 Firefox 为 root 会发生什么 - 应该我将您的评论标记为“没有建设性”,因为我找不到“奇怪的脾气暴躁”?做个好人 :) (5认同)
  • 引文和详细示例都使这非常有用!我很高兴你添加了 Gedit,但我同意 @Wilf 的观点,它甚至在之前就很好。我(故意)不包括[那里](https://askubuntu.com/a/270019)不仅仅是* Gedit *示例。如果人们愿意,我可以在那里添加一个关于“有时”的简短说明,但我真的认为这个问题是分开的,[我已经投票重新开放](https://askubuntu.com/q/632798#comment1522738_632798)。如果我们重新打开这个,我会尝试添加另一个关于 Gedit 的更多细节的答案,但*这个*对大多数人来说仍然是最有用的答案。 (4认同)

dou*_*oug 10

至于sudo gedit,没有什么可怕的,只是糟糕的练习,尤其是最近。提出建议有多难sudo -H gedit

-H,--set-home请求安全策略将 HOME 环境变量设置为目标用户的密码数据库条目指定的主目录。根据策略,这可能是默认行为。

什么没有发生?

您的主文件夹中有几个根拥有的文件。一个 ( recently-used.xbel) 可能会回到用户所有权。删除并重新创建文件时可能会发生这种情况。要查看sudo gedit更改的内容,请运行find ~ -user root -group root并查看返回的内容。默认情况下,这应该是什么。

使用该命令,您可能会看到 root 拥有的几个文件。一个将是一个新的.file.gvfs迟早是根拥有的~/.cache/dconf和前面提到的recently-used.xbel

所以没有“天空正在失败”的东西,但仍然如此。现在有报道称继续使用会导致其他问题,但不会声称我在这里没有看到。

另请注意,从 13.10 开始,asudo gedit将使用用户的 gedit 配置而不是 root 的 gedit 配置。再次只是不好的做法,那么为什么要继续这样做或建议其他人这样做呢?