Debian

sudo 在哪裡隱藏我的根的 .Xauthority 數據?

  • November 16, 2021

我剛剛注意到有關如何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不知道其他實例使用哪個顯示器並且它獲得了它需要的唯一密碼(並創建新文件來儲存它)。

引用自:https://unix.stackexchange.com/questions/676759