web-dev-qa-db-ja.com

Sudoユーザーとrootユーザーの違い

/etc/sudoersファイルには、Sudoコマンドを使用してユーザーが実行できる操作がリストされています

Rootユーザーが/etc/sudoersファイルを作成および変更します。

この概念は私には理解しにくいです。

Sudo権限を持つすべてのユーザーがsudoersグループに属している場合、Sudo suコマンドを実行すると、すべてのユーザーがrootになることができます。

では、実際のrootユーザーは誰で、sudoersグループのユーザーの権限をどのように制御するのでしょうか。

説明してください。

24
rancho

要旨:「root」は、管理者アカウントの実際の名前です。 「sudo」は、一般ユーザーが管理タスクを実行できるようにするコマンドです。 「sudo」はユーザーではありません。


長い答え:

「root」(別名「スーパーユーザー」)は、システム管理者アカウントの名前です。名前の由来は少し古風ですが、それは問題ではありません。

RootユーザーはユーザーID 0を持ち、名目上は無制限の特権を持っています。ルートは、任意のファイルにアクセスし、任意のプログラムを実行し、任意のシステムコールを実行し、任意の設定を変更できます。 (ただし、以下を参照してください¹)。

「Sudo」コマンドが発明される前は、管理タスクを実行したい場合は、何らかの方法でログインプロンプト²を取得するか、suコマンド(「su」は短い)を使用して、rootとしてログインする必要がありました。代理ユーザーの場合。)³

これは少し面倒で、ユーザーに部分的な管理権限を与えることもできません。そのため、「sudo」コマンド(「substitute user do」の略)が発明されました。

「sudo」コマンドを使用すると、ユーザーIDがsudoersファイルにある限り、スーパーユーザー権限でコマンドを実行でき、必要な権限が付与されます。

したがって、たとえばSudo vi /etc/hostsを使用すると、rootとして実行しているかのようにホストファイルを編集できます。 rootパスワードは必要なく、自分のログインパスワードだけが必要です。

そしてもちろん、Sudo suを使用すると、単にrootになることができます。 rootのパスワードを知っている必要はないがsudoersファイルに存在している必要があることを除いて、結果はrootとしてログインした場合、またはsuコマンドを実行した場合と同じです。

Sudoersファイルは、Sudoコマンドを使用できるユーザーと、Sudoコマンドを使用して何ができるかを決定します。

Sudoersファイルは、複数の管理者に与えるものです⁴。事実上、管理者はrootであり、加えてsudoersファイルにリストされている全員です。 sudoersファイルがない場合、唯一の管理者はrootです。

実際、誰かがあなたのコンピュータを管理している組織では、自分のコンピュータのrootパスワードを知らないことがよくあります。sudoersファイル内にいる限り、それは問題ではありません。

私が働いていたある会社で、巨大なサーバーファームを使用して、ルートパスワードを知っているのはごく少数の人だけでした。代わりに、誰がどのサーバーで作業することを許可されたデータベースがありました。自動化されたプロセスにより、アクセスを許可されたサーバーのsudoersファイルにユーザーが追加され、許可の有効期限が切れると削除されます。


¹もう1つ:最新のUnixバージョンでは、rootユーザーが実行できることさえ制限できるようになりました。

SELinux (セキュリティが強化されたLinux)の下には、どのプログラムが何を実行できるかを決定するアクセス制御リストがあり、rootでさえこれらの制限を乗り越えることはできません。

Appleの System Integrity Protection (SIP)(別名「ルートレス」)システムでは、特定のファイルとディレクトリがロックダウンされ、適切なホワイトリストのアプリケーションのみがそれらにアクセスできます。

これらのシステムは、悪意のあるユーザーがルートアクセスを取得した場合からシステムを保護するために存在します。 (または、場合によっては、ユーザーが組み込みデバイスを脱獄するのを防ぐため。)明らかな理由により、rootアクセスであっても、これらの制限を回避することは非常に困難です。

²「ログイン:」プロンプトは、ウィンドウズシステムの代わりにシリアル回線でASCII端末を使用したときにさかのぼる、Unixの歴史のもう1つの古くからある部分です。ターミナルウィンドウでloginと入力するか、他の場所からコンピューターへのssh(またはtelnetまたはrsh)接続を開くだけで、「ログイン:」プロンプトを表示できます。必要に応じて、そこから別のユーザーとしてログインできます。 (そして、もしあなたのコンピュータがたまたまシリアルポートを持っているなら、それらへのログインを許可するようにそれを設定することができます。)

individual個々のプログラムにrootアクセスを与えることも可能です。これらのプログラムは、一般ユーザーが実行している場合でも、rootアクセスを持つユーザーが実行できるすべてのことを実行できます。これらは通常、特定のタスクに限定されます。たとえば、 crontab プログラムにはroot権限があり、cronテーブルを編集できます。明らかに、 "Sudo"はroot権限を持っているので、自分の役割を実行できます。

previously私が以前に見落としていたもう一つのポイントをカバーするつもりです。 「管理者」と「ルート」を交互に使用してきましたが、他の種類の管理者もいます。これらは「ロールアカウント」と呼ばれることがよくあります。つまり、これらのアカウントは実際の人間のものではなく、システム上で特定の役割を実行するために存在します。システムの/etc/passwdファイルを見ると、数十、数十のそのようなアカウントが見つかります。

たとえば、mysqlがシステムにインストールされている場合、「mysql」ユーザーが存在し、すべてのデータベースファイル、構成ファイルなどはすべてそのユーザーが所有します。そのユーザーだけが、ファイルにアクセスしてmysqlサーバーを実行するために必要な権限を持ちます。ある意味では、そのユーザーは管理者アカウントになりますが、mysqlのみです。

データベース管理タスクを実行する必要がある場合は、su mysqlコマンドで「mysql」になるか、Sudoを使用して、sudoersファイルで特定のコマンドに対するmysql権限を付与します。

33
Edward Falk