X11認証は「sudo sux / sudo su」では機能しませんが、「sux / su」では機能します。なぜ?

X11認証は「sudo sux / sudo su」では機能しませんが、「sux / su」では機能します。なぜ?

su - usersuxを必要とせずに他のユーザーのために実行してX11にアクセスできるvncセッションがあります。

sudo sux - userまた、ユーザーを使用または切り替えようとすると、sudo su - userX11にアクセスできなくなり、次のエラーが発生します。

認証エラーのため X11 接続が拒否されました。

suxしかし、他の人も努力していますsu

もちろん、私はまだsuxが表示するメッセージを見て混乱しています。

Value of TERM has been set to "xauth -q remove localhost:100.0 2>/dev/null; xauth -q remove localhost/unix:100.0;"

  1. 古いキーを削除するのはなぜですか?必要性は何ですか?

  2. suとsuxはほぼ同じように動作します。どちらも古いキーを削除し、両方が機能します。どうやってなぜ?

  3. sudo suそしてその理由は何ですか/sudo sux動作しませんか?

ベストアンサー1

答え(sux)はスクリプトのコメントにあります。 Xディスプレイクッキーを元のユーザー権限からrootユーザー権限に転送し、送信された権限を使用してXディスプレイを開くことができます。

読む価値がある部分は次のとおりです。

  # We highjack the TERM environment variable to transfer the cookies to the
  # other user. We do this so that they never appear on any command line, and
  # because TERM appears to be the only environment variable that is not
  # reset by su. Then, as long as 'echo' is a shell builtin, these cookies
  # will never appear as command line arguments which means noone will be
  # able to intercept them (assuming they were safe in the first place).
  sux_term="TERM='$TERM'"             
  # now we can store the script that will restore the cookies on the other
  # side of the su, in TERM!

  # Remove the old cookies. They may cause trouble if we transfer only one
  # cookie, e.g. an MIT cookie, and there's still a stale XDM cookie hanging
  # around.
  export TERM="xauth -q remove $DISPLAY 2>/dev/null;"
  if [ -n "$sux_unix_display" ]
  then     
    TERM="$TERM xauth -q remove $sux_unix_display;"
  fi

おすすめ記事