スーパーユーザと root ユーザ
Linux のユーザの中には管理者権限を持つ特別なユーザが存在する。このユーザを「スーパーユーザ」と呼ぶ。
スーパーユーザのユーザ名が root であることから「root ユーザ」とも呼ばれる。
スーパーユーザの特徴
スーパーユーザの特徴は以下の通り。
- システムの設定ファイルを変更可能
- 新しいアプリケーションのインストールが可能
- ファイルパーミションの影響を受けない(つまり、全てのファイルの読み込み、書き込み、削除、実行が可能)
スーパーユーザの利用上の注意
ただし、権限が強すぎるため危険な操作もできてしまう。(例えば、重要なファイルも削除できてしまうなど)
そのため、スーパーユーザの利用は必要最小限に留めることが重要。
スーパーユーザを利用するためのコマンド
スーパーユーザを利用するためのコマンドは以下の 2 つ。
su
sudo
su
コマンド
su
コマンドはユーザを切り替えるために利用する。
特に、引数なしで実行するとスーパーユーザに切り替わる仕様で、主にこのために利用される。
特に重要なオプションは -
。これは --login
というロングオプションのショートオプション版。
これを付けると、環境変数などが root のものに切り替わる。
su
コマンドの実験
実際に実験してみる。
まずは、su
を引数、オプションなしで実行してみる。
上を見ると、以下のようになることが分かる。
次に、su
を引数なし、-
オプションありで実行してみる。
上を見ると、以下のようになることが分かる。
- ユーザが root に切り替わる
- プロンプト記号が
$
から#
に変わる - 環境変数
PATH
は root ユーザ向けのパスに切り替わる - カレントディレクトは root ユーザのホームディレクトリに切り替わる
最後に、exit
で元のユーザに戻れることを確認する。環境変数 PATH
も元に戻っている。
sudo
コマンド
sudo
コマンドは別のユーザとしてコマンドを実行するために利用する。
特に、ユーザを指定しないとスーパーユーザとして実行する仕様で、主にこのために利用される。
Debian 12.7 では sudo
コマンドはデフォルトでインストールされていないので、別途インストールする必要がある。
sudo
コマンドの注意点
su
コマンドも sudo
コマンドもどちらもパスワードの入力が求められる点は同じ。
しかし、入力するパスワードが違う。
su
:スーパーユーザのパスワードを入力するsudo
:現在ログインしているユーザのパスワードを入力する
sudo
コマンドはスーパーユーザのパスワードを知らなくても実行できる点に注意。
/etc/sudoers
とは?
全てのユーザが sudo
コマンドを使えてしまうと、一般ユーザとスーパーユーザを分けている意味がほとんどなくなってしまう。
そのため、sudo
コマンドは「誰に」「どのコマンドを」実行する権限を与えるのか設定できるようになっている。
そのための設定ファイルが /etc/sudoers
ファイル。以下のような形式で記述する。
{ユーザ} {マシン名}=({権限}) {コマンド}
sudoers覚え書き #sudo - Qiita をざっと読むと、かなりきめ細かい設定ができそう。
/etc/sudoers
を設定する際の注意点
/etc/sudoers
ファイルを設定する際は、vim
などのエディタで直接編集してはいけない。
これは、誤った書き方をしてしまうと誰も sudo
コマンドが利用できなくなり、/etc/sudoers
ファイルを元に戻せなくなる恐れがあるため。
そこで、/etc/sudoers
ファイルを設定する際は、visudo
コマンドを利用する。
visudo
コマンドを利用すれば、誤った書き方をしてしまっても、終了時にシンタックスエラー(syntax error)のメッセージを表示してくれる。
シンタックスエラーが発生した時は、変更を破棄してやり直すのが安全そう。
su
コマンドと sudo
コマンドのどちらを使うべきか?
結論から言うと、sudo
コマンドを利用する方が良い。
それぞれの特徴を改めて纏めると、以下のようになる。
コマンド | パスワード | いつまで権限が継続するか | きめ細かい設定 |
---|---|---|---|
su |
スーパーユーザのパスワードが必要 | exit するまで |
不可 |
sudo |
スーパーユーザのパスワードは不要 | コマンド実行時のみ | 可能 |
su
と比較すると sudo
の方が安全なため、sudo
コマンドが使われることが多い。