#37 | su コマンドと sudo コマンド

スーパーユーザと root ユーザ

Linux のユーザの中には管理者権限を持つ特別なユーザが存在する。このユーザを「スーパーユーザ」と呼ぶ。

スーパーユーザのユーザ名が root であることから「root ユーザ」とも呼ばれる。

スーパーユーザの特徴

スーパーユーザの特徴は以下の通り。

  • システムの設定ファイルを変更可能
  • 新しいアプリケーションのインストールが可能
  • ファイルパーミションの影響を受けない(つまり、全てのファイルの読み込み、書き込み、削除、実行が可能)

スーパーユーザの利用上の注意

ただし、権限が強すぎるため危険な操作もできてしまう。(例えば、重要なファイルも削除できてしまうなど)

そのため、スーパーユーザの利用は必要最小限に留めることが重要。

スーパーユーザを利用するためのコマンド

スーパーユーザを利用するためのコマンドは以下の 2 つ。

  • su
  • sudo

su コマンド

su コマンドはユーザを切り替えるために利用する。

特に、引数なしで実行するとスーパーユーザに切り替わる仕様で、主にこのために利用される。

特に重要なオプションは -。これは --login というロングオプションのショートオプション版。

これを付けると、環境変数などが root のものに切り替わる。

su コマンドの実験

実際に実験してみる。

まずは、su を引数、オプションなしで実行してみる。

上を見ると、以下のようになることが分かる。

  • ユーザが root に切り替わる
  • プロンプト記号が $ から # に変わる
  • 環境変数 PATH は一般ユーザ向けのパスのまま
  • カレントディレクトは変わらない

次に、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 コマンドが使われることが多い。

参考

新しいLinuxの教科書 第2版 | SBクリエイティブ