コマンドを使用してユーザーに切り替えようとした場合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 - kshitiz
2番目のコマンドは失敗する可能性があります。
それにもかかわらず、同じユーザー切り替えは発生しません。
sudo su - kshitiz
su - kshitiz
次に実行します。パスワードなしで実行root
できる場合、ユーザーを変更するときにパスワードを要求されないため、パスワードはまったく尋ねられません。sudo
root
su -
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 読み取り)