3

次の bash スクリプトに問題があります: - システムの起動時またはオンデマンドで「root」によって実行される - 「stefano」特権でスクリプトを実行する - 「root」または「/」によってトリガーされた場合、ログ ファイルの出力をリダイレクトするdev/stdout" ("stefano" によってトリガーされた場合):

 #!/bin/bash
 [ "$1" == "log" ] && log="$2" || log="/dev/stdout"

 if [ "`/usr/bin/whoami`" != "stefano" ]; then
      echo "You are not allowed"
      exit 9
 fi

 runuser -s /bin/bash stefano -c "echo I am Stefano >> $log"

この場合、私はbash: /dev/stdout: Permission denied

コマンドがルートによってトリガーされた場合、ユーザー「stefano」が /dev/stdout に書き込めないのはなぜですか?

明らかに as としてstefano> echo "I am Stefano" >> /dev/stdout動作してもエラーは発生しません。

よろしくお願いします。ステファノ、ミラノ、イタリア

4

2 に答える 2

4

コマンドがルートによってトリガーされた場合、ユーザー「stefano」が /dev/stdout に書き込めないのはなぜですか?

これはおそらく、端末デバイスが root によって所有されており、他のユーザーの書き込み権限がないためです。/dev/tty代わりに試してください。

于 2013-10-31T10:25:35.310 に答える
0

あなたのif文で

if [ "/usr/bin/whoami" != "stefano" ]; then

"/usr/bin/whoami"文字列と文字列を(文字通り)比較しますが"stefano"、もちろん決して等しくないため、if ステートメントの式は常に true です。

次のように、コマンド置換を使用してコマンドを実行できます"/usr/bin/whoami"(現在のユーザーのユーザー名を返します)。

if [ "$(/usr/bin/whoami)" != "stefano" ]; then

これは、ユーザー名に基づいて検証するため、root としてではなく、ユーザー「stefano」である場合にのみ機能することに注意してください。

于 2013-05-25T08:28:47.757 に答える