Sudoを使用して、Ubuntuで実際のrootユーザーとしてコマンドを実行するにはどうすればよいですか?実行するまで、これがSudoのデフォルトの動作であると当初は思っていました。
myuser@localhost:~$ Sudo echo `whoami`
myuser
myuser@localhost:~$ Sudo -u root echo `whoami`
myuser
ただし、これは私が望むタイプの動作ですが、1行だけです。
myuser@localhost:~$ Sudo su -
root@localhost:~# echo `whoami`
root
実際、それはdoes rootとして実行します。しかし、あなたに起こっていることは、バックティックが評価されているということですbeforeSudo
は、コマンドを評価するために必要なので、実行されます。もっと直接的に、なぜこれだけではないのですか?
Sudo whoami
バックティックのwhoami
は、実際には現在のユーザーとしてサブシェルで評価されます。そのため、自分が何をしているかがわかります。
サブシェル(whoami
)が最初に実行され、結果(myuser
)がSudo
コマンドに配置されます。 Sudo
が見るのはecho myuser
。次のショートカットと考えてください。
tmpvar=`whoami`
Sudo echo "$tmpvar"
ここでいくつかの推測が起こっているようです…
バックティックは明らかに他の人が説明したことを実行しており、「Sudo」を呼び出す前にwhoami
を展開し、予想どおりバックティックを「root」に戻します。
しかし、Sudo(8)で実際に何が起こっているのかを理解することは役に立ちます。だから私は実際にmanページを見ました!
「実際の効果的なuidとgidは、ターゲットユーザーのものと一致するように設定されています…」
したがって、観察された動作は、有効なユーザーIDと実際のユーザーIDの違いとは何の関係もないようです。
また、「Sudo printenv」を実行して、「printenv」だけと比較することも説明になります。これは実際には少し驚きました。 [i]一部の[/ i]エクスポートされた変数が使用可能であり、他の変数は使用できないことを示しています。呼び出し元のユーザーのHOME、PATH、PS1、Shell、TERM、およびEDITORは報告されますが、MANPATH、CVSROOT、LD_LIBRARY_PATH、またはENV。これは、プログラムが元のユーザーまたはrootとして動作するのとは異なる動作をする可能性があるため、少し奇妙に思えます。
Sudoを使用すると、root権限で任意のコマンドを実行できますが、rootユーザーとしては実行できません。これが役立つ理由は、この設定では複数の人がルート権限を持つことができますが、すべてのログなどは誰が変更を行ったかを示しているためです。
この設定は、rootパスワードを共有するよりも優れています。そのため、Ubuntuを含む多くのディストリビューションでrootユーザーを持つことに取って代わりました。
一方、sudo suはrootユーザーになるため、実際には使用しないでください。
この違いは、観察された(正しい)行動も説明します。