X11

Xephyr -ac 危險嗎?

  • March 6, 2020

執行 Xephyr 的經典命令:

Xephyr -br -ac -noreset -screen 800x600 :1

據我了解,-ac鍵是 xhost + 的類似物,這是一個漏洞,因為幾乎每個人都可以訪問顯示器、滑鼠、鍵盤。

如何在 Xephyr 範例中解決此問題?

UPD: mosvy非常感謝您提供非常詳細的答案!事實上,即使沒有“ ac ”,也可以向所有人開放。從安全的角度來看,您的回答讓我對 xorg 和 ssh 大開眼界。我的 LiveCD/USB 上的正常 Xorg 伺服器真正通過 -auth:

$ pgrep -ai Xorg
551 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch

如果您不使用該-auth auth-file選項,則Xephyr :1已經允許來自同一主機的任何人連接到它,即使沒有該-ac選項。試試這個:

hinz$ Xephyr :1 &

然後,作為另一個使用者

kunz$ xclock -display :1

這也適用於任何X 伺服器,而不僅僅是Xephyr; 如果您查看您的正常Xorg伺服器,您會看到該-auth選項是顯式傳遞的:

$ pgrep -ai Xorg第

2347**章**

根據Xserver(1)手冊頁(強調我的):

X 伺服器還使用基於主機的訪問控制列表來決定是否接受來自特定機器上的客戶端的連接。 如果沒有使用其他授權機制,則此列表最初包含執行伺服器的主機以及文件中列出的任何機器。/etc/Xn.hosts

正如在另一個答案中已經提到的那樣,一些 Xorg 伺服器(例如 Xwayland)不支持任何身份驗證機制,除了檢查誰通過以下方式打開了 unix 套接字getsockopt(SO_PEERCRED)——“本地使用者和本地組伺服器解釋的訪問類型” Xsecurity(7);此外,像 Debian 這樣的發行版通過xsessionxhost +si:localuser:$(id -un)腳本斷開了正常的 Xorg 伺服器。由於可以傳遞套接字 fd 並且客戶端可以由諸如 之類的程序代理xscope,因此這是非常愚蠢的事情。

該怎麼辦

如果您想阻止其他使用者連接到您的 X 伺服器,您必須使用某種形式的身份驗證。

創建一個授權文件,通過-auth選項將其傳遞給X伺服器,然後讓客戶端在​​連接伺服器時使用它。

  # create a MIT-COOKIE authfile
$ xauth -f ~/.xauth-junk add :1 . "$(hexdump -n 16 -e '4/4 "%08x"' /dev/urandom)"
xauth:  file /home2/ahq/.xauth-junk does not exist # it will be created

$ Xephyr :1 -auth ~/.xauth-junk &

然後將其合併到您常用的$XAUTHORITY文件中(~/.Xauthority如果未在環境中覆蓋)

$ xauth merge - < ~/.xauth-junk
$ xclock -display :1

或者在XAUTHORITY環境變數中顯式傳遞:

$ XAUTHORITY=~/.xauth-junk xclock -display :1

-auth您可以通過嘗試連接偽造的身份驗證文件來檢查該選項是否真的有任何效果:

$ XAUTHORITY=/dev/null xdpyinfo -display :1 >/dev/null 2>&1 && echo OOPS, anybody can connect!
$

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