Linux Red Hatマシンでは、ルートから次のことを行います
# su - starus
$ <-- now I am in starus user
$ su - moon <-- now I want to access moon user from starus user
Password:
しかし、パスワードの入力を求められます。
次のvisudo
にすでに追加されている場合、パスワードを取得する理由を教えてください
moon ALL=(starus) NOPASSWD: ALL
なにが問題ですか?
また、ユーザーmoonとして次のスクリプトを実行しようとしましたが、パスワードが必要です
starus@Host Sudo -u moon /home/USER261/test.bash
[Sudo] password for starus:
まず、root
は、パスワードを必要とせずに任意のユーザーになることができます。これは、スーパーユーザーになることの特権の1つです。したがって、_su - starus
_を使用すると、プロンプトを表示せずにstarus
に切り替えることができます。ただし、その時点で、あなたはstarus
になり、root
ではなくなったため、moon
に切り替えるにはパスワードが必要です。
簡単な解決策は、最初にroot
に切り替えて(exit
を実行するだけ)、次にmoon
に切り替えることです。
さて、ここではvisudo
は関係ありません。 Sudo
を使用していないため、そこで行った変更(_/etc/sudoers
_で、visudo
が編集するファイル)はsu
の動作に影響しません。同じプログラムではないSudo
のそれだけ。
いずれにせよ、表示する行(moon ALL=(starus) NOPASSWD: ALL
)は、ユーザーmoon
がユーザーstarus
として任意のコマンドをSudo
で実行できることを意味しますパスワードを入力します。 moon
のパスワードを知らなくても誰でもmoon
になることができるという意味ではありません。これは、このようなコマンドにパスワードが必要ないことを意味します。
_moon@Host $ Sudo -u starus command
_
moon
としてログインしている場合は、Sudo
を使用して、パスワードなしでstarus
としてコマンドを実行できます。
簡単な答えは、/etc/sudoers
ファイルはSudo
プログラムによってのみ使用され、su
では使用されないということです。
指定されたユーザーとして新しいシェルを開始するsu
プログラムでは使用されません。 su - moon
を実行すると、moonユーザーとして新しいログインシェルを開始し、そのユーザーのパスワードの入力を求められます。このコマンドをrootとして実行すると、rootがスーパーユーザーであり、必要に応じてパスワードを変更できるため、ユーザーのパスワードの入力を求められません。ただし、コマンドをstarusユーザーとして実行する場合は、スーパーユーザーではないため、通常どおり認証する必要があります。
一方、/etc/sudoers
に対して行った編集により、starusユーザーはSudo
コマンドと-u
オプションを使用してコマンドを実行できます。 moonユーザーとして(パスワードの入力を求められることなく)。たとえば、starusとしてログインしているときに、次のコマンドを実行できます。
Sudo -u moon touch /home/moon/test.file
Sudo -u moon ls -l /home/moon/test.file
を実行すると、新しく作成されたtest.file
がmoonユーザーによって所有されていることが示されます(コマンドを実行したのはmoonであり、-ではないかのように) starus)。