我已经阅读了社区“RootSudo”文档并对这一行感兴趣:
您永远不应该使用普通的 sudo 以 Root 身份启动图形应用程序。
为什么?有什么不同?请提供一个简单的解释,因为我只是一个普通的桌面用户。
例如,我一直建议按ALT+F2和打字,gksu nautilus
或者gksudo nautilus
两者都是等价的;以root权限运行图形程序。但是,我刚刚在测试系统上安装了 raring,这不再有效。
gksu
并且gksudo
不作为默认安装的一部分安装;尽管它们在存储库中。至少在 12.04 中gksudo
只是一个符号链接到gksu
我一直这样做的原因是,虽然sudo
在某些情况下使用它通常是安全的,但它可能会导致图形应用程序出现问题,因为gksu
您是否以root身份运行程序,而sudo
您以自己的身份运行但具有提升的权限。
这可能意味着您无意中更改了关键系统文件的所有者。这可能会导致问题。
这个推理在这里得到了更好的解释:
为什么从全新安装中删除了命令,我们应该改用什么?
突然间 gksu 停止为我工作:
~$ gksu gparted
(gpartedbin:24252): Gtk-WARNING **: cannot open display: :0
Run Code Online (Sandbox Code Playgroud)
同样的情况发生在gparted-pkexec
:
~$ gparted-pkexec
No protocol specified
(gpartedbin:25454): Gtk-WARNING **: cannot open display: :0
Run Code Online (Sandbox Code Playgroud)
什么可能导致这种情况?
我没有通过 SSH 或 VNC 运行它。这是普通终端窗口中的localhost 。
之间有什么区别sudo
,su
,visudo
,chroot
,和gksu
?
我安装了 Ubuntu 17.10。现在我遇到了gksu
以下问题:
$ gksu -dg synaptic
No ask_pass set, using default!
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
STARTUP_ID: gksu/synaptic/8760-0-alex-XPS-15-9530_TIME4974977
cmd[0]: /usr/bin/sudo
cmd[1]: -H
cmd[2]: -S
cmd[3]: -p
cmd[4]: GNOME_SUDO_PASS
cmd[5]: -u
cmd[6]: root
cmd[7]: --
cmd[8]: synaptic
buffer: -GNOME_SUDO_PASS-
brute force GNOME_SUDO_PASS ended...
Yeah, we're in...
Unable to init server: Could not connect: Connection refused
(synaptic:8767): Gtk-WARNING **: cannot open display: :1
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
xauth_env: (null)
dir: /tmp/libgksu-HgUjgQ
Run Code Online (Sandbox Code Playgroud)
如果我不使用-g
,密码对话框将被禁用。所以看起来像为 root 创建 tty 的问题。
有什么建议吗?
我有一个很小的脚本,我希望它在启动时运行,但它需要 sudo 权限,所以我使用 gksudo 来完成这项工作。但它失败了。(使用 sudo 可以正常工作。)除了接口之外,sudo 和 gksudo 之间有什么区别吗?
顺便说一句:这是我提到的小脚本:
#!/bin/bash
cat /sys/devices/platform/sony-laptop/kbd_backlight|if read state; then \
echo $((1-$state)) | sudo tee /sys/devices/platform/sony-laptop/kbd_backlight; fi;
Run Code Online (Sandbox Code Playgroud) 我定义了 2 个用户帐户:
sudo
权限)=> 让我们称之为adminuser
。normaluser
normaluser
因此,当我打开一个normaluser
会话并希望以管理员权限运行应用程序时,
我打开一个终端Ctrl+ Alt+T并:
su adminuser
sudo anyapplication ...
Run Code Online (Sandbox Code Playgroud)
它工作正常,无需退出normaluser
会话(无需打开adminuser
会话)。
但是,如果应用程序需要使用 GUI(图形用户界面)运行,我该怎么办?
我想:
su adminuser
gksu anyapplication ...
Run Code Online (Sandbox Code Playgroud)
但我明白了
** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多关于 gksu 从许多 Linux 版本中删除的主题,包括 Ubuntu 18.04。许多人表示 gksu 是一种令人憎恶的东西,任何用户都不需要使用类似的东西。我有 2 个例子,据我所知,我必须有一些东西可以让我以 root 身份运行(不仅仅是为了编辑文件)。
首先,只有在(GUI)命令上打开加密文件夹后,我才需要启动 mysql。这意味着让启动 mysql 服务的加密系统运行一个脚本。这必须以 root 身份完成,所以我在那个要求我输入密码的启动脚本中使用 gksu。我还能如何从 GUI 系统启动服务?
我也以root身份运行Ubuntu系统备份,否则很多系统文件无法备份。所以桌面文件使用 gksu 开始备份。
pkexec 看起来很复杂,需要策略文件。这是唯一的选择吗,如果是,为什么它更安全?
类似问题的其他答案似乎并没有解决人们现在 gksu 不再存在(或更难找到......)的个人问题。我认为来自非专家用户的此类问题将从更详细的答案中受益。我现在有一些,所以想回答我自己的问题。
sudo cmd
and之间的区别,和
用and启动 shellgksu cmd
的区别一样吗? sudo -i
sudo -s
... 或者换一种说法,
是sudo cmd
一样sudo -i cmd
和gksu cmd
一样sudo -s cmd
吗?
编辑:根据我在Ubuntu 文档页面上阅读的内容,它说:
You should never use normal sudo to start graphical applications as root.
You should use gksudo (kdesudo on Kubuntu) to run such programs. gksudo sets
HOME=~root, and copies .Xauthority to a tmp directory. This prevents files
in your home directory becoming owned by root.
(AFAICT, this is …
Run Code Online (Sandbox Code Playgroud)