クラシックXepyrコマンドを実行します。
Xephyr -br -ac -noreset -screen 800x600 :1
私が知る限り、-acキーは、ほとんどの人がモニター、マウス、キーボードにアクセスできるため、脆弱性xhost +に似ています。
Xepyrの例でこの問題を解決するには?
修正する: モスビー非常に詳細な回答ありがとうございます!実は「いなくても交流「アクセスは誰にでも開かれています。回答セキュリティの観点から、私は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
答え1
-auth auth-file
このオプションを使用しないと、Xephyr :1
同じホストのすべてのユーザーがそのオプションなしですでに接続できます-ac
。この試み:
hinz$ Xephyr :1 &
その後、他のユーザーとして
kunz$ xclock -display :1
これは以下にも当てはまります。どのXサーバーだけでなくXephyr
通常のサーバーを見ると、Xorg
そのオプションが明示的に渡されることがわかります-auth
。
$pgrep -ai Xorg 第2347章/usr/lib/xorg/Xorg vt2 -displayfd 3-auth /run/users/1000/gdm/Xauthority-背景なし -noreset -keeptty -verbose 3
マンページによるとXserver(1)
(強調):
Xサーバーはまた、ホストベースのアクセス制御リストを使用して、特定のコンピューター上のクライアントへの接続を許可するかどうかを決定します。 他の認証メカニズムを使用しない場合、リストに最初に含まれるサーバーを運営するホストそしてファイルにリストされているすべてのマシン
/etc/Xn.hosts
すでに他の記事で述べたように、回答getsockopt(SO_PEERCRED)
、Xwaylandなどの一部のXorgサーバーは、「ローカルユーザーとローカルグループサーバーの解釈アクセスタイプ」を介してUnixソケットを開いたことを確認する以外の認証メカニズムをサポートしていません。Xsecurity(7)
また、Debianなどのいくつかのディストリビューションもあります。隙間があるxhost +si:localuser:$(id -un)
xsessionスクリプトを介した汎用Xorgサーバー。ソケットfdは渡すことができ、クライアントはxscope
。
何をすべきか
他のユーザーがXサーバーに接続するのを防ぐには、ある種の認証を使用する必要があります。
認証ファイルを生成し、オプションでXサーバーに渡した後、-auth
クライアントがサーバーに接続するときにそれを使用するようにします。
# 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!
$