この質問を改善したいですか? この投稿を編集して、詳細を追加し、問題を明確にしてください。
4年前に閉鎖されました。
この質問を改善する
/etc/sudoers
ファイルには、ユーザーがsudo
で何ができるかがリストされています コマンド
rootユーザーは、/etc/sudoers
を作成および変更します。 ファイル。
この概念は私には理解しにくいです。
sudo特権を持つすべてのユーザーがsudoers
に属している場合 グループの場合、sudo su
を指定することで、それらすべてをrootにすることができます。 コマンド。
では、実際のrootユーザーは誰であり、彼はsudoersグループのユーザーの権限をどのように制御していますか?
説明してください。
承認された回答:
エグゼクティブサマリー:「root」は管理者アカウントの実際の名前です。 「sudo」は、通常のユーザーが管理タスクを実行できるようにするコマンドです。 「sudo」はユーザーではありません。
長い答え:
「root」(別名「スーパーユーザー」)は、システム管理者アカウントの名前です。名前の由来は少し古風ですが、それは問題ではありません。
ルートユーザーのユーザーIDは0で、名目上無制限の権限があります。ルートは、任意のファイルにアクセスし、任意のプログラムを実行し、任意のシステムコールを実行し、任意の設定を変更できます。 (ただし、以下を参照¹)。
「sudo」コマンドが発明される前は、管理タスクを実行する場合は、何らかの方法でログインプロンプト²を取得するか、su
を使用して、rootとしてログインする必要がありました。 コマンド(「su」は代理ユーザーの略です。)³
これは少し面倒であり、ユーザーに部分的な管理権限を与えることもできません。そこで、「sudo」コマンド(「substituteuserdo」の略)が発明されました。
「sudo」コマンドを使用すると、ユーザーIDがsudoersファイルにある限り、スーパーユーザー権限でコマンドを実行でき、必要な認証が与えられます。
だから、例えばsudo vi /etc/hosts
rootとして実行しているかのようにhostsファイルを編集できます。ルートパスワードは必要ありません。自分のログインパスワードだけが必要です。
そしてもちろん、sudo su
単にルートになることができます。結果は、rootとしてログインしたか、su
を実行した場合と同じです。 コマンド。ただし、rootパスワードを知っている必要はありませんが、sudoersファイルに含まれている必要があります。
sudoersファイルは、sudoコマンドを使用できるユーザーとそのコマンドで何ができるかを決定します。
sudoersファイルは、複数の管理者を提供するものです⁴。事実上、管理者はrootであり、sudoersファイルにリストされているすべての人がいます。 sudoersファイルがない場合、管理者はrootだけです。
実際、他の誰かがあなたのコンピュータを管理している組織では、自分のコンピュータのルートパスワードを知らないことがよくあります。あなたがsudoersファイルにいる限り、それは問題ではありません。
私が働いていたある会社では、巨大なサーバーファームがあり、ルートパスワードを知っている人はごくわずかでした。代わりに、誰がどのサーバーでの作業を許可されたかのデータベースがありました。自動化されたプロセスにより、アクセスが許可されたサーバーのsudoersファイルに追加され、許可の期限が切れると削除されます。
関連:-execの文字列から不明な文字をエスケープしますか?¹もう1つ、最新のUnixバージョンでは、rootユーザーが実行できることも制限できるようになりました。
SELinux(Security Enhanced Linux)の下には、どのプログラムが何を実行できるかを決定するアクセス制御リストが事実上あり、rootでさえそれらの制限を乗り越えることはできません。
Appleのシステム整合性保護(SIP)(別名「ルートレス」)システムでは、特定のファイルとディレクトリがロックダウンされているため、適切なホワイトリストにあるアプリケーションのみがそれらにアクセスできます。
これらのシステムは、悪意のあるユーザーがルートアクセスを取得することに成功した場合からシステムを保護するために存在します。 (または、場合によっては、ユーザーが組み込みデバイスをジェイルブレイクするのを防ぐためです。)明らかな理由から、ルートアクセスを使用しても、これらの制限を回避することは非常に困難です。
²「login:」プロンプトは、Unixの歴史のもう一つの古風な部分であり、ウィンドウシステムではなくシリアル回線でASCII端末を使用していた時代にまでさかのぼります。 login
と入力するだけで、「login:」プロンプトを引き続き表示できます。 任意のターミナルウィンドウで、または他の場所からコンピュータへのssh(またはtelnetまたはrsh)接続を開くことによって。必要に応じて、そこから別のユーザーとしてログインできます。 (コンピュータにシリアルポートがある場合でも、それらにログインできるように設定できます。)
³個々のプログラムにルートアクセスを許可することも可能です。これらのプログラムは、通常のユーザーが実行している場合でも、rootアクセス権を持つユーザーが実行できるすべてのことを実行できます。これらは通常、特定のタスクに限定されます。たとえば、crontabプログラムにはroot権限があるため、cronテーブルを編集できます。明らかに、「sudo」にはroot権限があるため、「sudo」はそれが行うことを実行できます。
⁴以前に説明したもう1つのポイントについて説明します。私は「管理者」と「ルート」を同じ意味で使用していますが、他の種類の管理者もいます。これらは「役割アカウント」と呼ばれることがよくあります。つまり、これらのアカウントは実際の人間のものではなく、システム上で特定の役割を実行するために存在します。 /etc/passwd
を見てください システムにファイルを保存すると、そのようなアカウントが数十個見つかります。
たとえば、mysqlがシステムにインストールされている場合、「mysql」ユーザーが存在し、すべてのデータベースファイル、構成ファイルなどはすべてそのユーザーによって所有されます。そのユーザー(そしてもちろんroot)だけが、ファイルにアクセスしてmysqlサーバーを実行するために必要な権限を持っています。ある意味で、そのユーザーは管理者アカウントになりますが、mysql専用です。
データベース管理タスクを実行する必要がある場合は、su mysql
で「mysql」になります。 コマンドを実行するか、sudo
を使用します ここで、sudoersファイルはそれらの特定のコマンドに対するmysql特権を提供します。