sudo 与 gksudo。区别?

sudo 与 gksudo。区别?

sudo和有啥区别gksudo

答案1

sudo在命令行上要求输入密码,并gksudo弹出一个对话框。

答案2

gksudo是一个基于 GTK 的前端sudo(顺便说一下,kdesudo是一个基于 Qt 的前端),但是它(默认情况下)处理更多的环境变量(HOMEXAUTHORITY等),从而sudo使以 root 身份运行命令更安全。


据我所知,只有@Logics 的答案足够正确(@Ignacio Vazquez-Abrams 的答案不完整)。以下是尽量避免对@Davros @knitti 的答案/评论做出澄清(请在不需要时删除/编辑它们):

  1. 虽然这两个命令确实代表了sudo,但所使用的 UI 并不是这两个命令的唯一区别。
  2. 运行 GUI 程序并不是您应该使用 gk/kdesudo 的唯一情况,相反,当您无法确定命令是否会创建/写入文件到您的主目录(在某些系统和情况下,HOME环境变量在命令中指向该sudo目录)时,您应该使用 gk/kdesudo。 并非所有 GUI 应用程序都会写入你的主目录,也并非所有 CLI 应用程序都不会,因此命令的类型不是关键点。
  3. 还可以使用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 终端中执行并显示在您的桌面环境中。
  4. 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 启动进程的环境的所有特殊之处)。”

相关内容