Debian
sudo 在哪裡隱藏我的根的 .Xauthority 數據?
我剛剛注意到有關如何
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
?
xauth cookie 儲存在該臨時文件 (
~/.xauthXXXX
) 中,該文件在返回時會被刪除sudo
(例如,當sudo xauth info
命令完成時)。我建議你看一下
pam_xauth
模組的原始碼:#define XAUTHTMP ".xauthXXXXXX" ... int pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { ... /* Generate the environment variable * "XAUTHORITY=<homedir>/filename". */ if (asprintf(&xauthority, "%s=%s/%s", XAUTHENV, tpwd->pw_dir, XAUTHTMP) < 0) { ... fd = mkstemp(xauthority + sizeof(XAUTHENV)); ... cookiefile = strdup(xauthority + sizeof(XAUTHENV)); /* Save the filename. */ if (pam_set_data(pamh, DATANAME, cookiefile, cleanup) != PAM_SUCCESS) { ... int pam_sm_close_session (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { ... if (pam_get_data(pamh, DATANAME, &data) != PAM_SUCCESS) return PAM_SUCCESS; cookiefile = data; ... if (unlink(cookiefile) == -1 && errno != ENOENT) pam_syslog(pamh, LOG_WARNING, "Couldn't remove `%s': %m", cookiefile);
至於
pkexec
,我認為您不應該使用pkexec
. 你可以用它們來執行它們已經夠糟糕了sudo
;-)
當 X 伺服器以
-auth
選項啟動時,它會創建一個帶有MIT-MAGIC-COOKIE-1
(password) 的文件,並且只有知道此密碼的使用者才能在 X 視窗系統中顯示他們的視窗。可以有多個
MIT-MAGIC-COOKIE-1
(網路登錄,ssh -X
…),但我認為在您的情況下,如果您檢查這些文件 - 它們將具有完全相同的內容(cmp /root/.xauth1 /root/.xauth2
)。但是,如果您啟動不同的 X 伺服器並使用
sudo
(或su
),新密碼應該不同。所以不同文件的原因是因為
sudo
不知道其他實例使用哪個顯示器並且它獲得了它需要的唯一密碼(並創建新文件來儲存它)。