将gedit与sudo一起使用时,会发生哪些特定的不良情况?


10

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

任何人都可以举例说明如何证明这一点。当我真正运行时,只要给出一个测试案例,

sudo gedit /etc/rc.local

编辑文件并保存。

我有很多反对意见,试图帮助OP,并泛滥成灾,说使用sudo运行gedit是犯罪。

谁能举一个真实的例子?

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

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


2
总是将它与sudo一起使用,从来没有问题。好问题。
Dario Salvati

1
@ Wilf,nano喜欢编写〜/ .nano_history,如果您使用sudo运行它,则会导致该文件归root用户所有,因此,当您不使用sudo运行nano时,它会抱怨无法访问该文件。一个简单的sudo chown解决它。
psusi 2015年

1
就rc.local而言,这是一个运行级脚本,它应归root用户所有,因此sudo对其没有影响。尝试使用〜/ .bashrc。我不认为如果root拥有该文件,shell不会接受该文件,而应恢复为默认设置。但这只是一个建议。我明天会回来,看看这个问题是怎么回事
Sergiy Kolodyazhnyy 2015年

1
对于大多数编辑者来说,它不是开孔,而是按SAVE。多数编辑器还会将设置s保存在某处,因此,如果您/它修改了设置,则会对其进行更新。
Wilf 2015年

2
对于它的价值,我只是就地对其进行编辑以-H在看到它时使用。
muru 2015年

Answers:


11

到目前为止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开始,a sudo gedit将使用用户的gedit配置,而不是root的gedit配置。同样,这只是不好的做法,那么为什么要继续这样做或建议其他人这样做呢?


1
有时候,我现在也借此机会向用户展示如何使用nano,因为它很容易,而且大多数情况下都可以取代gedit。在某些情况下,即使对于那些知道如何使用的人,gedit仍然比nano更好。同样,sudo gedit可能会导致sudo nautilus,这可能会更糟。.(在这里,我启用了pkexec,启用了gedit,但这超出了本讨论的范围
doug

@wjandrea,听起来不错,已编辑
doug

12

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

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

    但是,在其他情况下,由于.ICEauthority的权限发生了变化,副作用可能像Firefox扩展不持久一样严重,或者甚至无法登录,甚至导致极端后果。

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

    假设您以root用户身份运行gedit(图形文本编辑器)。如果您运行sudo gedit,即使程序以root身份运行,HOME仍将继续指向您的主目录。因此,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

这对于两个虚拟盒子都是相同的(或至少非常相似)。在运行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

在我的主文件夹(3件事/home/tim/)的所有者是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混响),请参见此处此处的这两个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。我不明白,但是互联网说可以做到,这真是个虚拟盒子。

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 virtualbox上:

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

好消息!不过,唯一的根“物”是..。而且我可以firefox无根运行。


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确实会将我的主目录中的文件更改为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.

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

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


1
除了问题的答案,您都写了所有东西。只需使用gedit给出一个测试案例。我应该标记为“不是答案”吗?还是“质量很差”(虽然很长?)))
Pilot6'6

5
@ Pilot6-问题中的内容Can anyone give an example how to prove it ..... Can anyone give a real example?-链接到过去的内容,并举例说明了使用Firefox作为根目录可能发生的情况-我是否应该将您的注释标记为“不具有建设性”,因为我找不到“怪异的脾气”?是好的cmon :)
Wilf

1
哦,请不要使用,ls -la|grep root而是find . -uid 0find . -user root
solsTiCe 2015年

1
@ Pilot6好的,我已经编辑过一些关于gedit的内容。我认为这不会给我的答案带来任何帮助,但您似乎希望如此……
蒂姆(Tim

4
引文和详细示例都使它超级有用!我很高兴您添加了Gedit,但我同意@Wilf的观点,即使在以前也很好。这不仅是Gedit的例子,我(故意)不包括存在。如果人们愿意,我可以在其中添加有关“有时”的简短说明,但我确实认为这个问题是单独的,因此我投票决定重新开放。如果我们重新打开此,我会试着和关于gedit的更多详细信息添加其他答案,但是仍然是大多数人最有用的答案。
伊莱亚·卡根
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.