注:本文为“Linux 命令:pkexec ”相关合辑。
略作重排,未整理去重。
如有内容异常,请看原文。
Linux 命令:强大的 pkexec
夏夜星语 IP 属地:上海 2016.06.04 14:32:10
一时冲动,把 /etc/sudoers
文件改了,而且只是把一个 #
删除了,就无法使用 sudo su
命令了,老是提示如下图:
sudo: >>> /etc/sudoers:syntax error 在行 25 附近<<<
sudo: /etc/sudoers 中第 25 行附近有解析错误
sudo: 没有找到有效的 sudoers 资源,退出
sudo: 无法初始化策略插件
然后就各种 google,首先查到的是这种方法:(源于网上)
重启进入 recovery mode,当光标选中 recovery mode 时,按
e
进入编辑,将ro
改为rw single
后,[CTRL + X] 保存退出到有 root 界面,然后进入 root,更改/etc/sudoers
权限,chmod u + w /etc/sudoers
,然后用vim /etc/sudoers
编辑文件。最后保存退出即可。
可是到了我这里,进行到 vim /etc/sudoers
时,发现 vim 无效,没有安装此程序,用 gedit
也无效,当场就 JJ 了。终于继续在晚上查的时候,发现了 pkexec
这个命令,然后进入 ubuntu 系统,进入我的用户,用 pkexec visudo
命令,果真打开了 exc/sudoers
文件,然后将文件改过来,按照步骤提示保存下来后,DONE~!
到现在我觉得一开始浪费的那么 3 个多小时,就是白费力气,不如直接在普通用户模式下用 pkexec visudo
命令,就直接进入了 root
权限,使用了 visudo
命令。下面来解析下这个 pkexec
命令:
pkexec [命令]
直接以 root
权限执行 命令
:比如 pkexec visudo
就可以以 root
身份执行 visudo
命令。
pkexe visudo
输入当前用户密码后,就可以以 root
权限执行命令了。
下面是官方的对 pkexec
的解释:
allows an authorized user to execute PROGRAM as another user. If username is not specified, then the program will be executed as the administrative super user, root.
允许授权用户以另一个用户的身份执行 PROGRAM。如果未指定 username,则程序将以管理超级用户 root 执行。
当 sudo su
命令切换不了 root
时,不要忘记,还有 pkexec
命令。
最后编辑于 :2017.12.03 06:16:44
Linux超级超级管理pkexec权限完美解决/etc/sudoers、/etc/sudoers.d is world writable和kex_exchange
源代码杀手于 2021-12-12 21:29:50 发布
一、完美解决/etc/sudoers
xxx
是你编辑错的地方,修改回来的方法如下:
在你的 sudo 不可用的情况下 pkexec su 可进入你的 root 开启两个 ubuntu 终端,一个终端进入 root 修改 sudoers,两个作为保存,使用 pkexec visudo 即可 当一个终端进入 root 或者 vim 保存 sudoers,第二终端执行输入密码即可。
步骤:
- 在第一个 ssh 会话中执行
"echo $$"
并记下 PID - 在第二个 ssh 会话中执行
"pkttyagent --process PID"
- 在第一个 ssh 会话中执行
"pkexec visudo"
然后再第二个 ssh 会话中输入密码。 - 在第一个会话中修改错误后保存。
二、完美解决/etc/sudoers.d is world writable
解决方法:记得继续使用上面的方法,方便输入超级超级管理权限密码
chown -R root:root /etc/sudoers.d
chmod u = rwx,g = rx,o = rx /etc/sudoers.d/
chmod u = r,g = r,o = /etc/sudoers.d/*
案例:
root@computer:/home/xxx# chown -R root:root /etc/sudoers.d
root@computer:/home/xxx# chmod u = rwx,g = rx,o = rx /etc/sudoers.d/
root@computer:/home/xxx# chmod u = r,g = r,o = /etc/sudoers.d/*
root@computer:/home/xxx# exit
exit
Vim: Caught deadly signal HUP 1,78 全部
Vim: Finished.
Vim: Finished.
xxx@computer:~$ sudo
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u
user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h
host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s]
[<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host]
[-p prompt] [-T timeout] [-u user] file ...
三、解决ssh登录问题kex_exchange_identification: read: Connection reset by peer
解决方法:ssh-keygen -R XXX.XXX.XXX.XXX
// XXX.XXX.XXX.XXX
为要登陆主机的 IP 地址
案例:
sh-keygen -R 192.168.124.3
# Host 192.168.124.3 found: line 4
/home/xxx/.ssh/known_hosts updated.
Original contents retained as /home/xxx/.ssh/known_hosts.old
附件技能
进入 visudo 命令
pkexec visudo
直接编辑修改
Ctrl + O
保存
会弹出 tmp,继续回车
然后 ctrl + x
退出
这样就可以继续正常使用了。
linux服务器中/etc/sudoers文件报错导致sudo权限无法使用
一只在坑里摸爬滚打想上天的猪于 2020-11-12 18:42:35 发布
报错:
~$ sudo
sudo: >>> /etc/sudoers:syntax error 在行 21 附近<<<
sudo: /etc/sudoers 中第 21 行附近有解析错误
sudo: 没有找到有效的 sudoers 资源,退出
sudo: 无法初始化策略插件
第一种情况(不知道 root 密码):
很悲惨,你不知道 root 密码是什么,这时候你需要通过 ubuntu 进入恢复模式,修改 root 密码,然后再通过 root 用户修改 /etc/sudoers
文件。1 - 3 需要在服务器主机上操作,后面在自己本地命令行里操作。
1、重启 ubuntu,进入恢复模式
1)在重启的过程中长按 shift 键或者 esc 键。
A. 第一种情况:长按 shift 键可能直接会到恢复模式选择处,如下图所示,这时按下键到 advanced 项,按回车。
B. 第二种情况:(我又很惨,长按 shift 没有用)长按 esc 键,会进入 grub 命令窗口,你看到的应该是:
grub>
这时候,别慌,输入 normal,即:
grub>normal
然后,按下 esc 键,我们就可以看到这个图了,选 advanced 项,回车。
- 选择恢复模式
注意:下键找到 recovery mode,按 ‘e’ 键,不要按回车!!!这样才能编辑修改。
按回车你将进入 recovery menu,里面只能读不能改!!!
2、删除并添加命令
在显示页面中找到(仔细找,一定有):
ro recovery nomodeset
并删掉,在当前行末尾加上:
rw single init = /bin/bash
输完之后,按 F10 键进行引导。
3、修改 root 密码
不知道密码,咱就改一个。上一步操作完之后,会弹出下面图中所示的黑框,会运行到红色箭头所示部位,等待一会儿,按回车,就会出现下面熟悉的 root@:
修改 root 密码:
passwd root
然后输入新密码,这次牢牢记住,重启之后,root 新密码应该就生效了。
4、修改 /etc/sudoers
文件
用自己的用户 ssh 登陆,然后切换至 root 用户。
通过 su 进入 root 用户,输入密码。
su root
1)/etc/sudoers
文件可修改
修改 /etc/sudoers
文件,将错误改正,按 i 修改文件。
vim /etc/sudoers
改完 bug 之后,按 esc,再输入 :wq!
保存退出。
2)如果此时 /etc/sudoers
文件是只读文件:
首先修改 /etc/sudoers
文件权限,改成可读写文件。
chmod 777 /etc/sudoers
然后再将错误改正,按 i 修改文件。
vim /etc/sudoers
改完 bug 之后,按 esc,再输入 :wq!
保存退出。
最后再把 /etc/sudoers
文件权限还原,
pkexec chmod 0440 /etc/sudoers
否则会报如下错误。
sudo: /etc/sudoers 可被任何人写
sudo: 没有找到有效的 sudoers 资源,退出
sudo: 无法初始化策略插件
OKK,大功告成,sudo 权限又回来啦!建议大家谨慎修改 /etc/sudoers
文件!改完检查一下,不然还要重装 ubuntu 系统。
第二种情况(知道 root 密码):
知道密码那就很好办了,参考第一种情况的第 4 步。
注意:
不要修改 /etc/sudoers
文件忘打冒号!
Polkit 简介:在 Linux 中导航授权框架
Polkit 是安装在每个现代 Linux 发行版上的授权框架:它提供 API,允许特权应用程序向非特权主体公开服务。与 Polkit 的通信通过 D-Bus 进行,D-Bus 是一个 IPC(进程间通信)系统;要了解前者是如何工作的,我们首先必须掌握后者是如何实现的。
在本教程中,我们将讨论 Polkit;我们了解它是如何工作的,以及如何在 Linux 上使用它附带的实用程序。
Polkit 和 D-Bus
在我们开始谈论 Polkit 并了解它在基于 Linux 的现代作系统中的作用之前,我们必须了解 D-Bus 的工作原理。D-Bus 是一种消息总线系统,用于允许进程之间的通信。一些服务在总线上注册,并将信息和功能公开为属性、信号和方法。每个用户会话都有一个会话总线;在其上注册的服务以用户权限运行。可能以 root 身份运行的系统范围服务,而是在系统总线上注册:它们提供需要管理权限的功能,例如文件系统挂载。d-feet (GTK) 或 QDBusViewer (QT) 等实用程序让我们可视化在现有总线上注册的服务。
这两个工具在左列显示总线上注册的服务(例如 org.freedesktop.Accounts),在右侧显示它们附带的对象的路径(例如 /org/freedesktop/Accounts)。每个对象都提供一个或多个接口,这些接口充当方法、信号和属性的命名空间。
在屏幕截图中,您可以看到 org.freedesktop.Accounts 服务已在系统总线上注册:它带有 /org/freedesktop/Accounts 对象,该对象提供 org.freedesktop.Accounts 接口。该接口包括 “CreateUser” 和 “DeleteUser” 等方法。创建和删除用户是需要 root 权限的操作,因此必须有一种方法让想要执行这些操作的非特权主体请求授权。这就是 Polkit 的用武之地。
Polkit 的工作原理
Polkit 在 D-Bus“系统”总线上使用 org.freedesktop.PolicyKit1 名称注册。该服务不以 root 身份运行,而是以 polkitd 用户和 polkitd 组的权限运行(请参阅 /usr/lib/systemd/system/polkit.service)。Polkit 不需要以 root 身份运行,因为它本身不执行特权操作:它只是检查主体是否被授权访问服务或机制,用 Polkit 术语来说。
有时,为了授权访问服务,Polkit 可能会请求主体以自身或管理员身份进行身份验证。使这成为可能的是 polkit 代理的使用。Polkit 附带了一个称为 pkttyagent 的基本代理;但是,所有主要的桌面环境都提供了自己的代理实现。例如,GNOME 附带了 “polkit-gnome” 包,而 KDE 则包含 “polkit-kde” 等。代理将使用用户会话自动启动,并使用用户权限运行。
下图摘自 freedesktop polkit 页面,总结了 polkit 的工作原理:
Polkit 如何确定主体是否有权访问特定服务,以及是否需要身份验证?如上图所示,它基本上咨询了两样东西:策略和规则。让我们来看看它们。
Polkit 作
Polkit “actions” 在 /usr/share/polkit-1/actions
目录下的扩展名为 “.policy” 的 XML 文件中定义。我们之前提到了 org.freedesktop.Accounts 服务;与其相关的作在 /usr/share/polkit-1/actions/org.freedesktop.accounts.policy
文件中定义。这里我们以 one 的定义为例:
<action id="org.freedesktop.accounts.change-own-user-data">
<description>Change your own user data</description>
<message>Authentication is required to change your own user data</message>
<defaults>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
作在 “action” 标签中定义,并通过 “id” 属性进行标识。该 ID 用于从代码或自定义 Polkit 规则中引用作(请参阅下文)。例如,当我们通过我们最喜欢的桌面环境的设置面板或通过 dbus-send
应用程序直接发出 dbus 调用来发出更改我们自己用户详细信息的请求时,org.freedesktop.Accounts 服务会引用 org.freedesktop.accounts.change-own-user-data作。
使用 “description” 标签,我们提供作的简要描述;相反,使用 “message” 标签,我们定义在提示主体进行身份验证时向主体显示的消息。
作的默认行为是在 “default” 标签内定义的,使用 “allow_any”、“allow_inactive” 和 “allow_active” 标签。它们是做什么用的?Polkit 能够区分活动和非活动客户端,并相应地调整其行为。“allow_active” 和 “allow_inactive” 标签用于本地控制台或图形显示上的活动和非活动客户端,而 “allow_any” 标签则与所有其他情况相关,例如 SSH 或 VNC 远程连接。这些标签中允许的内容包括:
- no:用户无权执行作
- yes:用户已获得作授权,无需身份验证
- auth_self:用户需要以自己的身份(使用自己的密码)进行身份验证才能获得授权
- auth_self_keep:与 auth_self 相同,但密码已重新加载
- auth_admin:用户需要以 root 身份进行身份验证才能获得作授权
- auth_admin_keep:与 auth_admin 相同,但密码已重置
在上面包含的作定义中,“yes” 在所有情况下都使用。正是出于这个原因,尽管修改用户是一项需要 root 权限的作,但我们可以从我们最喜欢的桌面环境的设置面板更改我们的密码,而无需进行身份验证以进行权限提升。
此示例中未出现的标签是 “annotate”:它用于为作提供额外的键值对。最著名的注释是:
- org.freedesktop.policykit.exec.path:这与 pkexec 工具的使用有关,见下文。
- org.freedesktop.policykit.imply:用于定义 “meta”作。采用一个字符串,其中包含以空格分隔的作 ID 列表。如果用户被授权执行此作,则它也将被授权执行这些作。
- org.freedesktop.policykit.owner:采用以空格分隔的 PolkitIdentity 条目列表(例如 “unix-user:1000”),该列表指定谁可以查询客户端是否有权执行该作:典型用途是未以 root 身份运行的守护进程。
Polkit 规则
除了隐式作之外,Polkit 还会查找可用于定义更精细策略的规则。供应商提供的规则安装在 /usr/share/polkit-1/rules.d
目录下:不得就地修改它们,因为它们可能会被系统更新覆盖。相反,用户提供的规则位于 /etc/polkit-1/rules.d
下。规则是使用 Javascript 在扩展名为 “.rules” 的文件中编写的。以下是 GNOME 桌面环境安装为 /usr/share/polkit-1/rules.d/gnome-control-center.rules
的规则示例:
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.locale1.set-locale" ||
action.id == "org.freedesktop.locale1.set-keyboard" ||
action.id == "org.freedesktop.ModemManager1.Device.Control" ||
action.id == "org.freedesktop.hostname1.set-static-hostname" ||
action.id == "org.freedesktop.hostname1.set-hostname" ||
action.id == "org.gnome.controlcenter.datetime.configure") &&
subject.local &&
subject.active &&
subject.isInGroup ("wheel")) {
return polkit.Result.YES;
}
});
polkit
对象的 addRule
方法用于添加在引用特定作时调用的函数。该方法接受一个函数作为参数。该函数接收两个参数:“action” 和 “subject”。它们是两个对象,分别表示所涉及的作和执行请求的主题。
规则规定,如果通过 action
对象的 id
属性访问的作 ID 是 “org.freedesktop.locale1.set-locale”、“org.freedesktop.locale1.set-keyboard”、“org.freedesktop.ModemManager1.Device.Control”、“org.freedesktop.hostname1.set-static-hostname”、“org.freedesktop.hostname1.set-hostname” 和 “org.gnome.controlcenter.datetime.configure”,则主体位于本地活动会话中,并且是 “wheel” Unix 组(相当于基于 Debian 的系统中的 sudo 组)的一部分,则无需身份验证即可获得授权。这是由于返回的值 polkit.Result.YES
中。返回值相当于我们之前在 actions 定义中看到的值,并且组织在一个字典中:
polkit.Result = {
NO : "no",
YES : "yes",
AUTH_SELF : "auth_self",
AUTH_SELF_KEEP : "auth_self_keep",
AUTH_ADMIN : "auth_admin",
AUTH_ADMIN_KEEP : "auth_admin_keep",
NOT_HANDLED : null
};
为了覆盖在 /usr/share/polkit-1/rules.d
下定义的规则,我们可以在 /etc/polkit-1/rules.d
下创建一个同名的文件。两个目录中的规则都按词法顺序处理,但如果两个目录中都存在两个同名的规则文件,则以 /etc/polkit-1/rules.d
下的规则文件为准。
除了 addRule
之外,“polkit” 对象还有其他可用的方法。另一个常用的 API 是 addAdminRule
。该方法具有与 addRule
相同的签名,但每当需要以管理员身份进行身份验证时,都会调用该方法。它用于指定哪些身份可以验证为管理员。在大多数情况下,该方法的使用方式如下例所示,以包括 “wheel” 组的成员:
polkit.addAdminRule(function(action, subject) {
return ["unix-group:wheel"];
});
Polkit 实用程序
任何 Polkit 安装中都包含三个命令行工具:“pkaction”、“pkcheck” 和 “pkexec”,让我们简要地看看它们可以做什么。
pkaction
pkaction 实用程序可用于检索有关已注册的 Polkit 作的详细信息。当调用不带任何参数或选项的实用程序时,它将显示所有已注册的作:
pkaction
以下是该命令在标准 Fedora Workstation 安装中返回的内容的摘录:
[...]
org.freedesktop.login1.attach-device
org.freedesktop.login1.chvt
org.freedesktop.login1.flush-devices
org.freedesktop.login1.halt
org.freedesktop.login1.halt-ignore-inhibit
org.freedesktop.login1.halt-multiple-sessions
org.freedesktop.login1.hibernate
org.freedesktop.login1.hibernate-ignore-inhibit
org.freedesktop.login1.hibernate-multiple-sessions
org.freedesktop.login1.inhibit-block-idle
org.freedesktop.login1.inhibit-block-shutdown
org.freedesktop.login1.inhibit-block-sleep
org.freedesktop.login1.inhibit-delay-shutdown
org.freedesktop.login1.inhibit-delay-sleep
org.freedesktop.login1.inhibit-handle-hibernate-key
org.freedesktop.login1.inhibit-handle-lid-switch
org.freedesktop.login1.inhibit-handle-power-key
org.freedesktop.login1.inhibit-handle-reboot-key
org.freedesktop.login1.inhibit-handle-suspend-key
[...]
要获取有关作的详细信息,而不仅仅是它们的名称,我们可以使用 --verbose
选项调用该实用程序。为了专注于特定作,我们将其名称作为参数传递给 --action-id
。下面是一个涉及 org.freedesktop.login1.halt 作的示例:
pkaction --verbose --action-id org.freedesktop.login1.halt
以下是我们将获得的输出:
org.freedesktop.login1.halt:
description: Halt the system
message: Authentication is required to halt the system.
vendor: The systemd Project
vendor_url: https://systemd.io
icon:
implicit any: auth_admin_keep
implicit inactive: auth_admin_keep
implicit active: auth_admin_keep
annotation: org.freedesktop.policykit.imply -> org.freedesktop.login1.set-wall-message
pkcheck
pkcheck 实用程序用于检查进程是否有权执行系统上的 dbus 上的服务公开的特定作。此实用程序基本上是一种命令行方式,用于调用 polkit D-Bus 接口公开的 CheckAuthorization
方法。可以通过进程的系统总线名称或通过传递 PID、启动时间和 uid 等详细信息来标识进程。要使用后一种策略,我们将参数等详细信息传递给 --process
选项。相反,我们要测试进程的作被指定为 --action-id
的参数。
下面是一个示例。假设我想检查我正在使用的交互式 shell 是否有权关闭系统(例如,通过运行 “systemctl halt” 命令),我将运行:
pkcheck -u --process $$ --action-id org.freedesktop.login1.halt
$$
变量扩展到当前 shell 的 PID 中,我们在命令中使用的 -u
选项允许通过 Polkit 代理进行用户身份验证。一旦我们执行命令,系统确实会提示我们进行身份验证,因为引用的作对所有类型的用户/会话都使用 “auth_admin_keep”:
<action id="org.freedesktop.login1.halt">
<description gettext-domain="systemd">Halt the system</description>
<message gettext-domain="systemd">Authentication is required to halt the system.</message>
<defaults>
<allow_any>auth_admin_keep</allow_any>
<allow_inactive>auth_admin_keep</allow_inactive>
<allow_active>auth_admin_keep</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.imply">org.freedesktop.login1.set-wall-message</annotate>
</action>
在我以管理员身份成功进行身份验证后(我的用户位于 wheel 组中),pkcheck 实用程序将返回以下输出:
polkit\56temporary_authorization_id=tmpauthz3
polkit\56retains_authorization_after_challenge=true
由于进程已获得授权,因此实用程序的退出代码为 0:
echo $?
0
当进程未获得授权时,实用程序将返回 3
作为 exist 状态。有关更具体的退出代码,请查看手册页。
在上面的例子中,我们只提供了我们想要测试的进程的 PID,但是,为了避免竞争条件(PID 可以回收),建议使用 “pid,start-time,uid” 格式。例如,要获取进程的启动时间,我们可以查看 /proc
伪文件系统下相关文件的第 22 列。要获取 PID 为 87325 的进程的启动时间值,我们将运行:
cat /proc/87325/stat | cut -d ' ' -f 22
或:
awk -F ' ' '{print $22}' /proc/87325/stat
pkexec
pkexec 实用程序可用于允许用户以其他用户(通常为 root 身份)执行程序。这基本上也是 sudo 所做的:两者之间的主要、最大的区别在于 pkexec 在 Polkit 基础设施的上下文中工作,具有其所有优点和复杂性。要使用 pkexec 以 root 身份执行命令,我们只需将程序作为参数传递给 pkexec。下面是一个示例,我们尝试使用 dnf update
命令更新 Fedora:
pkexec dnf update
如果我们在 GNOME 或其他提供自己版本的 polkit 代理的图形环境中运行,我们将在图形提示符中被提示进行身份验证;如果我们从 TTY 执行命令,则会出现文本提示,因为 Polkit 将回退到 pkttyagent
代理:
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ====
Authentication is needed to run `/usr/bin/dnf update' as the super user
Authenticating as: doc
Password:
一旦我们成功进行身份验证,命令应该可以毫无问题地执行。不幸的是,在最新版本的 Polkit 中,您很可能会收到错误通知,而是:
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ====
Error executing command as another user: Not authorized
This incident has been reported.
这是由于已知错误造成的。一种可能的解决方法包括显式启动文本代理:
pkttyagent -p $(echo $$) | pkexec dnf update
默认情况下,使用 pkaction 时,它会引用 /usr/share/polkit-1/actions/org.freedesktop.policykit.policy
文件中定义的 org.freedesktop.policykit.exec 作。如果我们希望 pkexec 引用自定义作,我们在所述作上使用 org.freedesktop.policykit.exec.path
注释,并将要执行的程序的路径设置为 “annotate” 标签的内容。至少在 Fedora 上,Gparted 在 /usr/share/polkit-1/actions/org.gnome.gparted.policy
文件中是这样做的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd ">
<policyconfig>
<vendor>The GParted Project</vendor>
<vendor_url>https://gparted.org </vendor_url>
<icon_name>gparted</icon_name>
<action id="org.gnome.gparted">
<description>Run GParted as root</description>
<message>Authentication is required to run the GParted Partition Editor as root</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gparted</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
请注意作中使用的另一个注释:org.freedesktop.policykit.exec.allow_gui
。这是必需的,因为在使用 pkexec 时,它会丢弃大量环境变量来维护最小已知环境,以确保安全。这使得 X11 应用程序无法运行,因为 DISPLAY 和 XAUTHORITY 变量被删除了。使用注释会禁用此行为。
结束语
在本教程中,我们讨论了 Polkit 和 D-Bus,并了解了这两种技术是如何关联的。Polkit 是一个授权框架,它提供 API 以允许非特权主体访问特权服务。在本教程中,我们了解了 Polkit 的工作原理、如何定义 Polkit 作和规则,以及如何使用 pkaction、pkcheck、pkexec 实用程序。
via:
- Linux 超级超级管理 pkexec 权限完美解决 /etc/sudoers、/etc/sudoers.d is world writable 和 kex_exchange_pkexec visudo-优快云 博客
https://blog.youkuaiyun.com/weixin_41194129/article/details/121893837 - sudo: /etc/sudoers.d 可被任何人写 - 优快云 博客
https://blog.youkuaiyun.com/weixin_43862765/article/details/102807085 - 关于 etc sudoers is world writable 问题的解决_etc is world writable!-优快云 博客
https://blog.youkuaiyun.com/king15633720337/article/details/54135453_ - linux 服务器中 /etc/sudoers 文件报错导致 sudo 权限无法使用_sudo 没有找到有效的 sudoers 资源 - 优快云 博客
https://blog.youkuaiyun.com/weixin_43917335/article/details/109648960_ - ssh: connect to host 192.168.4.254 port 22: Connection refused-------------SSH 远程连接错误_ssh: connect to host 192.168.145.224 port 22: conn-优快云 博客
https://blog.youkuaiyun.com/zhydream77/article/details/79808161_ - Linux - sudo:/etc/sudoers 可被任何人写_sudoers 可被任何人写入 - 优快云 博客
https://blog.youkuaiyun.com/ahmcwt/article/details/107294625_ - ubuntu server 修改 /etc/sudoers 文件权限_ubuntu 修改文件权限后怎么更新 - 优快云 博客
https://blog.youkuaiyun.com/qq_42055843/article/details/87929868_ - Ubuntu 16.04 LTS 中通过 grub 修改 root 用户密码 ubuntu 16.04lts 在 gun grub 界面如何修改密码 - 优快云 博客
https://blog.youkuaiyun.com/gsh_hello_world/article/details/80178953_ - 因修改 /etc/sudoers 权限导致 sudo 和 su 不能使用的解决方法_su 和 sudo 都用不了 - 优快云 博客
https://blog.youkuaiyun.com/davidsky11/article/details/23478131 - 一次 /etc/sudoers: syntax error near line 21 问题的解决记录 - 优快云 博客
https://blog.youkuaiyun.com/p243679396/article/details/104399381 - Polkit 简介:在 Linux 中导航授权框架
https://cn.linux-console.net/?p=31038 - polkit: polkit Reference Manual
https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html - Linux 命令 - 2:强大的 pkexec - 简书
https://www.jianshu.com/p/ce499e6e631e