ユーザーに切り替えることはできますが、スクリプトを実行できないのはなぜですか?

ユーザーに切り替えることはできますが、スクリプトを実行できないのはなぜですか?

コマンドを使用してユーザーに切り替えようとした場合sudo su - kshitiz。うまく機能し、パスワードを入力せずに切り替えることができます。

ただし、そのユーザーでスクリプトを実行しようとすると、パスワードの入力を求められます。

sudo -u kshitiz bash << EOF
> cat /home/ri/secret.txt
> EOF

なぜですか?

修正する:

User ksh may run the following commands on this host:
    (root) NOPASSWD: /bin/su - kshitiz

答え1

識別されたsudoとおりにのみ許可されるように設定されているため、sudo su - kshitiz2番目のコマンドは失敗する可能性があります。

それにもかかわらず、同じユーザー切り替えは発生しません。

sudo su - kshitiz

su - kshitiz次に実行します。パスワードなしで実行rootできる場合、ユーザーを変更するときにパスワードを要求されないため、パスワードはまったく尋ねられません。sudorootsu -root

sudo -u kshitiz

パスワードを要求しないようにするには、直接sudoトグルを要求するために独自の設定が必要です。kshitiz

ユーザーが何でも実行できるように許可されている場合

sudo su - kshitiz -c bash ...

動作します。sudo許可するように設定することもできます。

sudo -u kshitiz ...

パスワードなし。

答え2

問題は、ログインシェルの実行を許可しますが、任意のプログラムを直接実行しないsudo設定があることです。

ユーザーが制限されたアカウントを持っている場合、つまりユーザーのログインシェルがいくつかの特定のコマンドのみを実行するプログラムの場合、これはbashを実行できるようにするセキュリティ制限です。

ユーザーのログインシェルが通常のコマンドシェル(bashなど)の場合は、任意のコマンドを実行できるため、この設定は愚かです。を実行して目的のコマンドを実行し、シェルを実行するsudoので、そのシェルに実行したいコマンドを渡します。

sudo /bin/su - kshitiz <<'EOF'
cat /home/ri/secret.txt
EOF

答え3

/etc/sudoersがsecure_pathまたはenv_resetを使用していないことを確認してください。以下を試すこともできます。

sudo -E -u user   # -E overrides env_reset.

「sudo su..」が広く使われていることがわかりません。重複しています。

  • sudo -i:対話型ログインシェルを実行します(/root/.bashrcと
  • /root/.profile) sudo -s : 非ログインインタラクティブシェルの実行 (/root/.bashrc 読み取り)

関連情報