我刚刚注意到有关如何sudo
处理.Xauthority
文件的一些特殊情况:
sudo xauth add $(xauth list | tail -1)
user@server: sudo xauth info
Authority file: /root/.xauthYZ21Nt
File new: no
File locked: no
Number of entries: 1
Changes honored: yes
Changes made: no
Current input: (argv):1
user@server: sudo xauth info
Authority file: /root/.xauth3BFy5d
File new: no
File locked: no
Number of entries: 1
Changes honored: yes
Changes made: no
Current input: (argv):1
user@server: sudo xauth list
server/unix:10 MIT-MAGIC-COOKIE-1 c922ab48defdf43b1092dffb86c06eed
user@server: sudo ls -la /root | grep auth
-rw-r--r-- 1 root root 0 Nov 9 14:40 .Xauthority
-rw------- 1 root root 57 Nov 9 15:23 .xauthsrxzxl
user@server: pkexec xauth info
Authority file: /root/.Xauthority
File new: no
File locked: no
Number of entries: 0
Changes honored: yes
Changes made: no
Current input: (argv):1
因此,$XAUTHORITY
每个 new 的 value 都是不同的sudo
,它指向一个临时文件,该文件在sudo
退出时会消失。正因为如此,最后一个命令(它使用pkexec
而不是sudo
并期望它在 中/root/.Xauthority
)无法看到 cookie。例如,sudo gedit
运行良好,但pkexec env DISPLAY=$DISPLAY gedit
失败。
为什么要以如此复杂的方式完成,数据存储在哪里,更重要的是,我如何访问.Xauthority
数据pkexec
?
当 X 服务器以
-auth
选项启动时,它会创建一个带有MIT-MAGIC-COOKIE-1
(password) 的文件,并且只有知道此密码的用户才能在 X 窗口系统中显示他们的窗口。可以有多个
MIT-MAGIC-COOKIE-1
(网络登录,ssh -X
...),但我认为在您的情况下,如果您检查这些文件 - 它们将具有完全相同的内容(cmp /root/.xauth1 /root/.xauth2
)。但是,如果您启动不同的 X 服务器并使用
sudo
(或su
),新密码应该不同。所以不同文件的原因是因为
sudo
不知道其他实例使用哪个显示器并且它获得了它需要的唯一密码(并创建新文件来存储它)。xauth cookie 存储在该临时文件 (
~/.xauthXXXX
) 中,该文件在返回时会被删除sudo
(例如,当sudo xauth info
命令完成时)。我建议你看一下
pam_xauth
模块的源代码:至于
pkexec
,我认为您不应该使用pkexec
. 你可以用它们来运行它们已经够糟糕了sudo
;-)现在似乎一切都清楚了,谢谢@user499944。简而言之:
临时
.xauthXXXXXX
文件由pam_xauth
.它们仅在
$DISPLAY
设置时才创建,情况是这样,sudo
但不是pkexec
。运行pkexed env DISPLAY=$DISPLAY command
没有任何效果,因为$DISPLAY
仅在身份验证完成后设置。这在系统日志中显示:我发现了一个丑陋的解决方法,它允许
pkexec
通过复制 cookie 两次来正确运行:我仍在寻找原始问题的答案(
xauth
临时文件中的数据实际存储在哪里?),希望这将允许我对sudo
和pkexec
命令使用相同的 cookie。要回答关于为什么
pam_xauth
将每个 cookie 存储在单独文件中的部分,有两个原因:sudo
会话结束时删除该访问权限。总结:范围和生命周期。