私がそうするとき、私はパスワードを要求せずsudo su - john
にユーザーになります。
しかし、そうすると、パスワードを求められます。についても同様john
sudo su - john /usr/share/script_to_run.pl
sudo -u john /usr/share/script_to_run.pl
なんで?ここで何が間違っていますか?
さて、まず第一に-
、ログイン シェルが必要であることを意味します。最初のステートメントは、root (したがってsudo
) として、 としてログインしたように表示させたいことを意味しますjohn
。現在ログインしているユーザーには、パスワードを使用せずに sudo を実行する権限があるように構成されています。
最初のインスタンスで何が起こるかというと、1 つのコマンドを実行しsu - john
(「としてログインする」という意味john
です)、それを root として実行します (sudo
最初に入力したため)。現在のユーザーには sudo-without-password-rights があり、root には任意のユーザーになる権利。
2回目の試みは間違っています。を使用してその方法でコマンドを実行することはできませんsu
。また、su に単一のコマンドを実行させたい場合、それをログイン シェルにする理由がわかりません。
john
3 番目のオプションでは、(現在ログインしているユーザーとして) 1 つのコマンドに対して"なり" たいと考えています。john
そのためには、パスワードが必要です。(root
ただし、 としてこれを行う場合、パスワードは必要ありません。)
それを機能させるには、おそらく試すことができます
sudo su --command="/usr/share/script_to_run.pl" john
または多分もっとエキゾチックに見える
sudo sudo -u john /usr/share/script_to_run.pl
「sudo」は、「su」のすべての機能を提供するように設計されていますが、他のユーザーのパスワードを使用する必要はありません。必要な回答は /etc/sudoers ファイル内にあり、「sudo visudo」コマンドで編集できます。ここで、ユーザーにパスワードを要求しないようにできることがわかります。
cratylus ALL=(ALL) NOPASSWD: ALL
それからクエリを送信します
sudo -u cratylus the statement
注: ステートメントを引用しないでください。これは、「su -c」コマンドに対してのみ行います。