この/etc/sudoers
ファイルには、どのユーザーがsudo
コマンドを使用してどのような操作を実行できるかが一覧表示されます。
rootユーザーはこの/etc/sudoers
ファイルを作成して変更します。
この概念は私としては理解するのが難しいです。
sudo権限を持つすべてのユーザーがsudoers
このグループに属している場合は、このコマンドを実行してすべてのユーザーがrootになることができますsudo su
。
では、実際のrootユーザーは誰であり、sudoersグループのユーザーの権限をどのように制御しますか?
私に説明してください。
答え1
要約:「root」は管理者アカウントの実際の名前です。 「sudo」は、一般ユーザーが管理タスクを実行できるようにするコマンドです。 「sudo」はユーザーではありません。
長い答え:
「root」(別名「スーパーユーザー」)は、システム管理者アカウントの名前です。名前の由来はやや古いですが、それは重要ではありません。
rootユーザーは、ユーザーIDが0で、名目上無制限の権限を持ちます。ルートはすべてのファイルにアクセスし、すべてのプログラムを実行し、システムコールを実行し、すべての設定を変更できます。 (ただし、下記1を参照)。
「sudo」コマンドが開発される前に、管理タスクを実行するにはログインプロンプトを受け取るか、コマンドsu
(「su」は代替ユーザーの略語です)を使用してrootとしてログインする必要がありました。
これは少し面倒で、ユーザーに部分的な管理権限を付与することもできません。そのため、「sudo」コマンド(「代替ユーザーdo」の略)が発明されました。
ユーザーIDがsudoersファイルにある限り、「sudo」コマンドを使用すると、スーパーユーザー権限でコマンドを実行して必要な権限を付与できます。
したがって、たとえば、sudo vi /etc/hosts
ルートとして実行されているかのようにホストファイルを編集できます。ルートパスワードも必要なく、自分のログインパスワードだけで済みます。
もちろん、こうすればsudo su
簡単にルートになることができます。結果は、ルートパスワードを知る必要がないことを除いて、rootとしてログインするかコマンドを実行するのと同じですが、rootsu
パスワードはsudoersファイルに存在する必要があります。
sudoersファイルは、sudoコマンドを使用できる人とそのコマンドで何ができるかを決定します。
sudoersファイルには複数の管理者⁴が用意されています。事実上、管理者はルートとsudoersファイルにリストされているすべての人です。 sudoersファイルがない場合、唯一の管理者はrootです。
実際、他の人があなたのコンピュータを管理している組織では、あなたがsudoersファイルにある限り、自分のコンピュータのルートパスワードを知らないのは非常に一般的です。これは重要ではありません。
私が働いていた会社は巨大なサーバーファームを持っていて、少数の人々だけがルートパスワードを知っていました。代わりに、誰がどのサーバーで作業できるかを記録するデータベースがあります。自動化されたプロセスは、あなたがアクセスできるサーバーのsudoersファイルにあなたを追加し、承認が期限切れになるとあなたを削除します。
1もう1つ:最新のUnixバージョンでは、rootユーザーができることを制限することができます。
下にSELinux(Security Enhanced Linux)には、実際にどのプログラムが何ができるかを決定するアクセス制御リストがあり、ルートでさえこれらの制限を無視することはできません。
りんごの下システムの整合性保護(SIP)(別名「ルートレス」)システムでは、特定のファイルとディレクトリがロックされているため、対応するホワイトリスト内のアプリケーションのみにアクセスできます。
これらのシステムは、悪意のあるユーザーがrootアクセス権を取得する状況からシステムを保護するために存在します。 (または場合によっては、ユーザーが組み込みデバイスを脱獄するのを防ぐために。)明らかな理由から、これらの制限はルートアクセスでも迂回するのが困難です。
² "login:"プロンプトはUnixの歴史のもう一つの古代の部分で、Windowsシステムの代わりにシリアルラインでASCII端末を使用していた頃にさかのぼります。login
ターミナルウィンドウに簡単に入力するか、他の場所からコンピュータへのssh(またはtelnetまたはrsh)接続を開くと、「ログイン:」プロンプトが表示されることがあります。必要に応じて、ここから他のユーザーとしてログインできます。 (コンピュータにシリアルポートがある場合でもログインを許可するように設定できます。)
³個々のプログラムにrootアクセス権を付与することも可能です。これらのプログラムは、通常のユーザーが実行していても、rootアクセス権を持つユーザーが実行できるすべての操作を実行できます。これは通常、特定のタスクに制限されます。例えば、予約されたことプログラムにはroot権限があるため、cronテーブルを編集できます。明らかに「sudo」にはroot権限があるので、できることを実行できます。
⁴以前に見落としたことに言及します。私は「admin」と「root」を同じ意味で使用しましたが、他の種類の管理者もいます。このようなアカウントはしばしば「役割アカウント」と呼ばれ、これは実際の人物に属さず、システムで特定の役割を果たすためにこれらのアカウントが存在することを意味します。/etc/passwd
システムのファイルを見ると、そのようなアカウントが何十もの見つかるはずです。
たとえば、mysqlがシステムにインストールされている場合は、「mysql」ユーザーが存在し、すべてのデータベースファイル、構成ファイルなどはそのユーザーが所有します。このユーザー(もちろん、ルートを含む)だけがファイルにアクセスしてmysqlサーバーを実行するために必要な権限を持っています。ある意味、このユーザーは管理者アカウントですが、mysql専用です。
データベース管理タスクを実行する必要がある場合は、このsu mysql
コマンドを使用して「mysql」にするか、sudo
sudoersファイルを使用してその特定のコマンドに対するmysql権限を付与できます。