
私はしばらくLinuxを使用してきましたが、コマンドを入力するたびにsudo
コマンドを実行するためにrootユーザーに切り替えるようです。
明らかに、これは私のユーザーアカウントのパスワードのみを必要とするので、これは本当ではありません。私は複数のユーザーと作業していないので、現実の世界ではこれに実際に気づいていないようです。
Ubuntuで最初のアカウントを設定する方法がわかりません。 rootユーザーはいますか?私は根ですか?私はインストールしたときに新しいユーザーを作成しましたが、rootアクセス権が与えられたようです。ここで少し混乱しています...
それでは、私のユーザーパスワードを使用してrootコマンドを実行できるのはなぜですか?
答え1
詳しくは、次のように動作します。
/usr/bin/sudo
実行ファイルにsetuidビット他のユーザーが実行しても、ファイル所有者(この場合はroot)のユーザーIDとして実行するように設定します。sudo
/etc/sudoers
あなたが持っている権限と呼び出されるコマンドを実行できるかどうかをファイルで確認してください。簡単に言えば、メカニズムを使用して/etc/sudoers
どのユーザーがどのコマンドを実行できるかを定義するファイルです。sudo
私のUbuntuでは、ファイルは次のようになります。
# User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
3行目は面白いかもしれません。 「sudo」グループのすべてのユーザーがすべてのコマンドを実行できます。
Ubuntuは、インストール中に最初のアカウントを設定すると、そのアカウントを「sudo」グループに追加します。コマンドを使用して、ユーザーが属するグループを確認できます
group
。sudo
パスワードを入力するように求められます。 rootパスワードではなく、ユーザーパスワードが必要であるという事実については、以下から抜粋します。sudoers マニュアル:認証とロギング
sudoersセキュリティポリシーによると、ほとんどのユーザーはsudoを使用する前に認証する必要があります。呼び出し側のユーザーがroot、ターゲットユーザーが呼び出し側のユーザーと同じ、またはポリシーがユーザーまたはコマンドの認証を無効にした場合、パスワードは必要ありません。su(1)とは異なり、sudoerが認証を要求すると、ターゲットユーザー(またはrootユーザー)の資格情報ではなく、呼び出し側ユーザーの資格情報を確認します。これは、後で説明するrootpw、targetpw、およびrunaspwフラグを使用して変更できます。
ただし、実際には
sudo
ユーザーパスワードは必要ありません。潜在的に危険なコマンドを呼び出す前に、あなたが実際にあなたであることを確認し、いくつかの警告(または停止する機会)を提供する必要があります。パスワードの入力をオフにするには、sudoersエントリを次のように変更します。%sudo ALL=(ALL:ALL) NOPASSWD: ALL
認証後、
sudo
呼び出されたコマンドを実行する子プロセスが作成されます。子プロセスは、親プロセスであるprocessからrootユーザーIDを継承しますsudo
。
したがって、あなたの質問に正確に答えるには、次の手順を実行します。
コマンドを実行するためにrootユーザーに切り替えていると思いました。
あなたは正しいです。で始まるすべてのコマンドは、sudo
rootユーザーIDで実行されます。
rootユーザーはいますか?
はい、システムのインストール中に作成されたユーザーアカウントとは別に、rootユーザーアカウントがあります。ただし、デフォルトでは、Ubuntuは対話型端末にrootとしてログインすることはできません。
私は根ですか?
いいえ、あなたはルートではありません。あなたルートとして単一のコマンドを実行する権限のみがあります。、sudo
上記のメカニズムを使用します。
それでは、私のユーザーパスワードを使用してrootコマンドを実行できるのはなぜですか?
sudo
内部セキュリティメカニズムのため、ユーザーパスワードを入力するだけです。簡単にドラッグできます。/usr/bin/sudo
入力したパスワードではなく、setuidビットのためにroot権限を取得します。
答え2
の全体的な目的は、
sudo
他のアカウント(rootとは異なる)のパスワードを求めることなく、他の人(通常root)に権限を付与することですsu
。sudo
ここでパスワードを求めるのは、通行人がロック解除された端末を乱用しないようにするためのものです。Ubuntuやその他のLinuxおよびUnixオペレーティングシステムは、インストール時に作成された初期アカウントを付与します
root
。root
Linuxではアカウントを維持しますが、root
セキュリティとトレーサビリティを向上させるために直接ログインはデフォルトで無効になっています。
答え3
Piotrはそれがどのように機能するかを非常によく説明していますsudo
。しかし、その人はあまりインスピレーションを与えませんでした。なぜこれがうまくいくので、ここに追加しようとしています。
sudo
su
コマンドを作成する前に、すでにコマンドがあります。通常、このコマンドを使用すると、あるユーザーが別のユーザーとしてコマンドを実行できますroot
(同様に、sudo
これはデフォルトのターゲットユーザーです)。これは完全に無差別であり、どのコマンドでも実行できます。すべてのユーザーが利用でき、そのユーザーとして効果的にログインできるため、ターゲットユーザーのパスワードを知る必要があります。
ある時点でより多くのアクセス制御が追加されました。を使用するには、su
このグループのメンバーである必要がありますwheel
。しかし、まだすべてのコマンドを実行できるので、パスワードを知らせるように依頼することは依然として意味があります。
しかし、ユーザーにお互いのパスワードやスーパーユーザーのパスワードを教えてもらうよう求めるのはあまり安全ではありません。通常、特定のユーザーに他のアカウントへの制限されたアクセス権のみを付与したい(これは「セキュリティ概念」というセキュリティ概念の一部です)。最小権限の原則)。また、責任を問うのも難しい。複数の人がアカウントのパスワードを知っていて、そのアカウントが間違いや乱用に関与している場合、実際に誰がそうしたのかわかりません。
だからsudo
作られました。ユーザーがコマンドを実行できるようにする代わりに、Piotrの答えで簡単に扱う複雑な設定ファイルがあります。このファイルは、それを使用できる人、切り替え可能なユーザー、および実行できるコマンドを正確に指定します。誰が誰にできるのかを細かく制御することで、ユーザーにターゲットアカウントのパスワードを提供する必要はなくなります。これにより、ユーザーとしてログインしてプロファイルのすべての制御を簡単にバイパスできます。代わりに、私たちは通常パスワードを入力してログインする人が誰であるかを証明するように求めます。これは、端末を放置した場合に誰かがアカウントを悪用するのを防ぐためです。
スーパーユーザーの場合、この要件は免除されます。このアカウントは、使用しなくてもシステムでほぼすべての操作を実行できるため、重複しているとsudo
見なされます。ユーザーがパスワードをまったく入力する必要がないように構成ファイルに割り当てることもできます。一部の組織では、ワークステーション環境の物理的なセキュリティが悪用を防ぐのに十分であると考えるときにこの方法を使用します。
答え4
まず、アカウントの無効化は通常、暗号化されたパスワードを*に設定することによって行われます。これは任意の文字列の暗号化された値ではありません。今は確認できませんが、Ubuntuはルートでも同じことをしていると思います。したがって、技術的にUbuntuにはルートパスワードはありません。
しかし、sudoはUbuntuの前にルートパスワードを保証するシステム用に設計されています。それでは、なぜルートパスワードが必要ないのですか?デフォルトでは、sudoは特定のユーザーに特定のコマンドを実行する権限を付与するように設計されています。たとえば、開発者はルートアクセスでWebアプリケーションを再起動できますが、ランダムサーバーの起動は許可されません。一方、ルートパスワードを知ることで無制限のアクセスが可能です。 login または su を使用してルートシェルを開き、任意のコマンドを実行できます。 sudoはそのアクセスレベルを持たない人にも機能する必要があるため、実行するためにrootパスワードは必要ありません。