我读过很多关于 gksu 从许多 Linux 版本中删除的帖子,包括 Ubuntu 18.04。许多人表示 gksu 是令人厌恶的,任何用户都不应该使用类似的东西。我有两个例子,据我所知,我必须有一些东西允许我以 root 身份运行(而不仅仅是编辑文件)。
首先,我需要在(GUI)命令上打开加密文件夹后才启动 mysql。这意味着加密系统运行一个脚本来启动 mysql 服务。这必须以 root 身份完成,因此我在启动脚本中使用 gksu,它会要求我输入密码。我还能如何从 GUI 系统启动服务?
我还以 root 身份运行 Ubuntu 系统备份,否则许多系统文件无法备份。因此桌面文件使用 gksu 启动备份。
pkexec 看起来很复杂,需要策略文件。这是唯一的选择吗?如果是,为什么它更安全?
其他类似问题的答案似乎没有解决人们现在遇到的个别问题,因为 gksu 不再存在(或更难找到……)。我认为非专家用户的这些问题需要更详细的答案。我现在有一些,所以想回答我自己的问题。
答案1
我发现这个命令
alias gksu='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
在这一页
运行别名命令后:
gksu /path/to/script.sh
它会像平常一样要求您输入密码。
您需要将别名添加到末尾~/.bashrc
以使 gksu 命令在重启时保持持久性。
答案2
我知道其他地方有答案,但我没有找到任何足够清晰和简单的答案来解决这个问题。所以我在很多地方寻找答案,最后找到了这个。我仍然不明白为什么 Linux 社区决定让我们这些简单的桌面用户的生活如此艰难(我试图理解许多解释),但这就是生活。我几乎在所有事情上都使用 GUI,只在必要时使用终端窗口。据我所知,使用 sudo 选项的解决方案对此没有帮助。所以我有.desktop
文件和脚本可以完成我经常使用的所有工作。
有两种基本解决方案。
1. 重新安装gksu
这种解决方案可能会持续,也可能不会持续。反对 gksu 的技术人员可能会找到阻止它的方法。但与此同时,.deb
从下载 2 个文件libgksu (x64)和gksu (x64)。使用 gdebi 或任何你喜欢的安装工具安装 libgksu2,然后安装 gksu。这对我有用。
2.使用pkexec
作为(希望)长期解决方案,我设法让 pkexec 适用于我需要的工具。
从脚本启动服务。事实证明,不需要 gksu 或 pkexec。只需
start service xyz
输入密码即可。要编辑 root 文件,或者以 root 身份打开 nautilus,请参阅如何使用 pkexec 而不是 gksu 以 root 身份运行 Gedit 和 Nautilus - Web Upd8。这为 pkexec 提供了两个“polkit”文件,允许您使用包含的脚本
pkexec gedit
来编辑根文件,对 nautilus 也是如此。所有说明都在该网页上。我现在使用“filemanager-actions”来提供右键单击操作以以 root 身份运行 gedit 或 nautilus。我以 root 身份运行 deja-dup 来备份核心系统。我很少这样做,但不包括
/home
(因为/home
我经常进行不需要 root 访问权限的备份)。为了使它正常工作,我复制了第 2 步中用于 gedit 的文件,并针对 deja-dup 对其进行了编辑。我不太明白它的内容,但它确实有效,既可用于备份,也可用于恢复文件,使用pkexec backup
从 .desktop 文件启动的脚本。我将这个新文件添加到/usr/share/polkit-1/actions
包含以下内容的文件中:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD polkit Policy Configuration 1.0//EN" "http://www.freedesktop.org/software/polkit/policyconfig-1.dtd"> <policyconfig> <icon_name>deja-dup</icon_name> <action id="org.gnome.DejaDup"> <description gettext-domain="deja-dup">Backup</description> <message gettext-domain="deja-dup">Privileges are required to backup system files</message> <defaults> <allow_any>no</allow_any> <allow_inactive>auth_admin</allow_inactive> <allow_active>auth_admin</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/deja-dup</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> </action> </policyconfig>
请注意,此目录中还有另一个 deja-dup 文件,据称可以帮助恢复文件,但我无法让它工作。这个新文件需要有一个唯一的名称,例如
org.gnome.DejaDupNew.policy
。
目前,我运行的时候没有使用 gksu。我会尝试继续……
答案3
Nautilus 管理员 (nautilus 管理员)是 Nautilus 文件管理器的一个简单 Python 扩展,它在右键菜单中添加了一些管理操作:
- 以管理员身份打开:在以管理员(root)权限运行的新 Nautilus 窗口中打开一个文件夹。
- 以管理员身份编辑:在以管理员(root)权限运行的 Gedit 窗口中打开文件。
要在所有当前支持的 Ubuntu 版本中安装 Nautilus Admin,请打开终端并输入:
sudo apt install nautilus-admin
我已经在 18.04 中针对 Files 和 Gedit 以外的其他应用程序测试了 gksu 的所有替代品,其中似乎最有效的是:
sudo-H 复制代码应用程序名称&> /dev/null
pkexec
是 gksu 的最佳替代品,因为它提供了更高的安全性,但它在不同的应用程序中非常不一致(例如它不适用于 Gedit)并且可能导致某些应用程序崩溃。sudo -i
不必要地难以管理,因为它会在较长时间内将您的权限提升为 root,而您只需要以 root 身份运行单个命令。
答案4
Ubuntu 18.04:某些安装程序和其他安装程序确实需要使用同名的 gksudo 或 gksu。要使它们正常工作:
安装 gnome 版本的ssh-askpass
。如果没有这个,密码对话框可能会隐藏在另一个窗口后面:
sudo apt-get install ssh-askpass-gnome
创建新文件my-gksudo.sh
:
sudo -H gedit /etc/profile.d/my-gksudo.sh
文件内容:
export SUDO_ASKPASS=/usr/bin/ssh-askpass
创建具有相同内容的新文件 gksudo 和 gksu:
sudo -H gedit /usr/bin/gksudo
和
sudo -H gedit /usr/bin/gksu
两者的文件内容:
sudo -A $@
使 gksudo 和 gksu 可执行:
sudo chmod +x /usr/bin/gksudo
和
sudo chmod +x /usr/bin/gksu
重新启动计算机。