GNU/Linux >> Linux の 問題 >  >> Linux

複数の sudo および su コマンドを使用して元のユーザーを見つけるにはどうすればよいですか?

完璧はありません 答え。ユーザー ID を変更すると、元のユーザー ID は通常保持されないため、情報は失われます。 logname などの一部のプログラム と who -m どの端末が stdin に接続されているかをチェックするハックを実装します をクリックし、その端末にログインしているユーザーを確認します。

このソリューションはよく 動作しますが、絶対確実というわけではなく、確かに安全と見なすべきではありません。たとえば、who の場合を想像してください。 以下を出力します:

tom     pts/0        2011-07-03 19:18 (1.2.3.4)
joe     pts/1        2011-07-03 19:10 (5.6.7.8)

tom su を使用 ルートになり、プログラムを実行します。 STDIN の場合 リダイレクトされない場合、 logname のようなプログラム tom を出力します .リダイレクトされた場合 (ファイルからなど):

logname < /some/file

結果は「no login name」 "、入力は端末ではないためです。さらに興味深いのは、ユーザーが別のログイン ユーザーになりすますことができるという事実です。Joe は pts/1 にログインしているため、Tom は次のコマンドを実行して彼のふりをすることができます。

logname < /dev/pts1

今、それは joe と言っています コマンドを実行したのはトムですが。言い換えれば、このメカニズムを何らかのセキュリティ ロールで使用する場合、あなたは狂っています。


結果:

who am i | awk '{print $1}' を使用 または logname 他の方法は保証されていないため.

自分としてログイン:

evan> echo $USER
evan
evan> echo $SUDO_USER

evan> echo $LOGNAME
evan
evan> whoami
evan
evan> who am i | awk '{print $1}'
evan
evan> logname
evan
evan>

通常のsudo:

evan> sudo -s
root> echo $USER
root
root> echo $SUDO_USER
evan
root> echo $LOGNAME
root
root> whoami
root
root> who am i | awk '{print $1}'
evan
root> logname
evan
root>

すどす - :

evan> sudo su -
[root ]# echo $USER
root
[root ]# echo $SUDO_USER

[root ]# echo $LOGNAME
root
[root ]# whoami
root
[root ]# who am i | awk '{print $1}'
evan
[root ]# logname
evan
[root ]#

須藤す -;ストム :

evan> sudo su -
[root ]# su tom
tom$ echo $USER
tom
tom$ echo $SUDO_USER

tom$ echo $LOGNAME
tom
tom$ whoami
tom
tom$ who am i | awk '{print $1}'
evan
tom$ logname
evan
tom$

これは ksh です HP-UX で書いた関数。 Bash でどのように動作するかわかりません Linuxで。アイデアは、 sudo プロセスは元のユーザーとして実行され、子プロセスはターゲット ユーザーです。親プロセスに戻ることで、元のプロセスのユーザーを見つけることができます。

#
# The options of ps require UNIX_STD=2003.  I am setting it
# in a subshell to avoid having it pollute the parent's namespace.
#
function findUser
{
    thisPID=$$
    origUser=$(whoami)
    thisUser=$origUser
    while [ "$thisUser" = "$origUser" ]
    do
        ( export UNIX_STD=2003; ps -p$thisPID -ouser,ppid,pid,comm ) | grep $thisPID | read thisUser myPPid myPid myComm
        thisPID=$myPPid
    done
    if [ "$thisUser" = "root" ]
    then
        thisUser=$origUser
    fi
    if [ "$#" -gt "0" ]
    then
        echo $origUser--$thisUser--$myComm
    else
        echo $thisUser
    fi
    return 0
}

元の質問がずっと前のものであることは知っていますが、人々 (私のような人) は今でも質問をしており、ここは解決策を置くのに適した場所のように見えました.


Linux
  1. LinuxでユーザーのSudo権限を設定する方法

  2. ルートユーザーがSudo権限を必要とするのはなぜですか?

  3. Sudoユーザーとrootユーザーの違いは?

  1. sudoの内部はどのように機能しますか?

  2. 検索を使用するときに複数のコマンドを実行するにはどうすればよいですか?

  3. root と sudo の違いは何ですか?

  1. Imgファイルのタイプを見つけてマウントする方法は?

  2. su に現在のユーザー環境変数を与える方法

  3. ファイルを gunzip して .gz ファイルを保持するにはどうすればよいですか?