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

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

ファイルには、どのユーザーがコマンド/etc/sudoersで何を実行できるかがリストされています。sudo

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

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

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

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

私に説明してください。

答え1

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


長い答え:

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

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

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

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

「sudo」コマンドを使用すると、ユーザー ID が sudoers ファイル内に存在し、必要な権限が与えられている限り、スーパーユーザー権限でコマンドを実行できます。

つまり、たとえば、sudo vi /etc/hostsroot として実行しているかのように hosts ファイルを編集できるようになります。root パスワードは必要なく、自分のログイン パスワードのみが必要です。

もちろん、sudo su単に root になることもできます。結果は、root としてログインした場合やコマンドを実行した場合と同じですがsu、root パスワードを知る必要はありませんが、sudoers ファイルに登録されている必要があります。

sudoers ファイルは、sudo コマンドを使用できるユーザーと、そのユーザーが sudo コマンドで実行できる操作を決定します。

sudoers ファイルにより、複数の管理者を設定できます⁴。実質的には、管理者は root と、sudoers ファイルにリストされているすべてのユーザーです。sudoers ファイルがない場合、管理者は root のみになります。

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

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


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

カーネル(Security Enhanced Linux) では、どのプログラムが何を実行できるかを決定するアクセス制御リストが事実上存在し、ルートであってもその制限を通過できません。

Appleのシステム整合性保護(SIP) (別名「ルートレス」) システムでは、特定のファイルとディレクトリがロックダウンされ、適切なホワイトリストに登録されたアプリケーションのみがアクセスできるようになります。

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

² 「login:」プロンプトは、ウィンドウ システムではなくシリアル ラインで ASCII 端末を使用していた時代にまで遡る、Unix の歴史におけるもう 1 つの古い一片です。login端末ウィンドウに入力するか、別の場所からコンピュータへの ssh (または telnet または rsh) 接続を開くだけで、「login:」プロンプトを表示できます。必要に応じて、そこから別のユーザーとしてログインできます。(コンピュータにシリアル ポートがある場合は、そのポートでログインできるように設定できます。)

³ 個々のプログラムにルートアクセスを与えることも可能です。これらのプログラムは、一般ユーザーが実行した場合でも、ルートアクセスを持つユーザーが実行できるすべての操作を実行できます。これらは通常、特定のタスクに制限されています。たとえば、クローンタブプログラムにはルート権限があるため、cron テーブルを編集できます。当然、「sudo」にはルート権限があるため、実行できます。

⁴ 先ほど触れたもう 1 つの点について説明します。私は「管理者」と「ルート」を同じ意味で使用してきましたが、管理者には他にも種類があります。これらは「ロール アカウント」と呼ばれることが多く、つまり、これらのアカウントは実際の人間に属するものではなく、システム上で特定のロールを実行するために存在します。/etc/passwdシステム上のファイルを確認すると、このようなアカウントが何十個も見つかります。

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

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

関連情報