sudo
和有啥区别gksudo
?
答案1
sudo
在命令行上要求输入密码,并gksudo
弹出一个对话框。
答案2
gksudo
是一个基于 GTK 的前端sudo
(顺便说一下,kdesudo
是一个基于 Qt 的前端),但是它(默认情况下)处理更多的环境变量(HOME
,XAUTHORITY
等),从而sudo
使以 root 身份运行命令更安全。
据我所知,只有@Logics 的答案足够正确(@Ignacio Vazquez-Abrams 的答案不完整)。以下是尽量避免对@Davros @knitti 的答案/评论做出澄清(请在不需要时删除/编辑它们):
- 虽然这两个命令确实代表了
sudo
,但所使用的 UI 并不是这两个命令的唯一区别。 - 运行 GUI 程序并不是您应该使用 gk/kdesudo 的唯一情况,相反,当您无法确定命令是否会创建/写入文件到您的主目录(在某些系统和情况下,
HOME
环境变量在命令中指向该sudo
目录)时,您应该使用 gk/kdesudo。 并非所有 GUI 应用程序都会写入你的主目录,也并非所有 CLI 应用程序都不会,因此命令的类型不是关键点。 - 你还可以使用
sudo
命令以 root 身份启动 GUI 应用程序(例如,查看应用程序的控制台输出),但是您需要正确处理HOME
(以及其他诸如XAUTHORITY
、、DISPLAY
输入法相关内容等)环境变量,以便启动的应用程序不会失败、失去功能或执行非常糟糕的操作。以下是我目前对使用sudo
sudo -H <rest of the command>
- (摘自
sudo
手册页第 8 节)该-H ( HOME )
选项要求安全策略将HOME
环境变量设置为密码数据库指定的目标用户(默认为 root)的主目录。根据策略,这可能是默认行为。 - 这至少可以防止在
sudo
呼叫者的主目录中创建文件
- (摘自
sudo -H DISPLAY=<a working X display name, usually :0> <rest of a GUI program command>
- 这应该让 <GUI 程序> 在 TTY 终端中执行并显示在您的桌面环境中。
sudo
命令的行为在所有系统上并不相同并且可以通过命令进行配置visudo
,请查看sudoers(5)
手册页以获取更多信息。
答案3
使用常规 sudo 运行图形程序偶尔会弄乱某些文件的权限。为安全起见,应使用 gksudo(或 kdesudo,视情况而定)来运行带有 GUI 的程序。我认为这确实是一个错误,尽管我听到有人解释说 gksudo 理解 X 服务器变量,而 sudo 不理解,这可能会导致问题。提示:如果您以 root 身份运行图形程序,则不要为每个要运行的程序打开一个终端,请键入 ALT-F2(同时按下 alt 和功能键 2),然后在弹出的对话框中键入“gksudo 程序”,不带引号,并将程序替换为要运行的应用程序。
答案4
目前的答案是错误的。根据Ubuntu RootSudo 维基:
“您永远不应该使用普通的 sudo 以 root 身份启动图形应用程序。您应该使用 gksudo(Kubuntu 上的 kdesudo)来运行此类程序。gksudo 设置 HOME=~root,并将 .Xauthority 复制到 tmp 目录。这可以防止您的主目录中的文件被 root 拥有。(据我所知,这就是使用 gksudo 与使用 sudo 启动进程的环境的所有特殊之处)。”