このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:コマンドを別のユーザーとして実行する:sudoコマンド

コマンドを別のユーザーとして実行する:sudoコマンド

 Linuxシステムでは、一般ユーザーとしてログインして作業を行うのが基本です。しかし、システムの設定変更やソフトウェアのインストールなど、管理者権限(スーパーユーザー権限)が必要な操作を行う場合があります。sudoコマンドは、そのような場合に一時的に別のユーザー(デフォルトではスーパーユーザー)としてコマンドを実行するための強力なツールです。

 ここでは、sudoコマンドを使用してコマンドを別のユーザーとして実行する方法と、その設定方法について詳しく解説します。

sudoコマンドとは

 sudoSuper User DO)コマンドは、現在のユーザーから一時的に別のユーザーの権限でコマンドを実行するためのコマンドです。ユーザーを特に指定しない場合は、スーパーユーザー(rootユーザー)としてコマンドを実行します。これにより、一般ユーザーでログインしている状態でも、管理者権限が必要な操作を安全かつ効率的に行うことができます。

基本的な使用方法

【書式】
sudo <実行したいコマンド>

使用例

 現在、user01 という一般ユーザーでログインしています。この状態で、パスワード情報が保存されている /etc/shadow ファイルの内容を確認しようとしても、読み取り権限がないためエラーが発生します。

user01@ubuntu:~$ cat /etc/shadow
cat: /etc/shadow: 許可がありません

ここで、sudo コマンドを使用してみます。

user01@ubuntu:~$ sudo cat /etc/shadow
[sudo] user01 のパスワード:
root:$y$j9T$WVqk5THdrvTH1TJ5Bqr/A.$MxFVvNcelnSdcPmZG46I7z
C1OUVGm5GockVqj/3EQy0:20016:0:99999:7:::
...(以下省略)...

ポイント

  • sudo コマンドを実行すると、まず現在のユーザー(user01)のパスワードを尋ねられます。
  • 正しくパスワードを入力すると、指定したコマンドがスーパーユーザー権限で実行されます。

suコマンドとの違い

sudo コマンドと似た機能を持つコマンドに、su コマンドがあります。それぞれの違いを以下の表にまとめます。

コマンド説明
su現在のシェルを別のユーザー(デフォルトはスーパーユーザー)に切り替える。明示的に exit するまでユーザー状態が継続する。
sudo指定したコマンドを一時的に別のユーザー(デフォルトはスーパーユーザー)として実行する。コマンド終了後、自動的に元のユーザーに戻る。
suコマンドとの違い

パスワードの入力

  • su: スーパーユーザーのパスワードを入力。
  • sudo: 現在ログインしているユーザーのパスワードを入力。

sudoコマンドの設定

 sudo コマンドを使用して、一般ユーザーがスーパーユーザーの権限でコマンドを実行できるようにするには、適切な設定が必要です。この設定は、/etc/sudoers ファイルで管理されています。

 現在、user01という一般ユーザーでログインしています。この状態で/etc/sudoersというパスワードファイルの内容を閲覧しようとしても、読み取り権限がないためエラーになります。

読み取り権限がないためエラー

user01@ubuntu:~$ cat /etc/sudoers
cat: /etc/sudoers: 許可がありません

sudoersファイルの確認

 /etc/sudoers ファイルは、一般ユーザーには読み取り権限がありません。そのため、内容を確認するにはスーパーユーザー(root)権限が必要です。

user01@ubuntu:~$ su -
パスワード: 
root@ubuntu:~# cat /etc/sudoers

sudoersファイルの書式

sudors ファイルは、以下の形式で記述されます。

<ユーザーまたはグループ> <ホスト名>= (<権限>) <コマンド>

ユーザーまたはグループ

  • ユーザー名を直接指定。
  • %<グループ名> の形式でグループを指定。

例: グループにsudo権限を付与

%sudo	ALL=(ALL:ALL) ALL
  • %sudo: sudo グループに所属するユーザー全員を対象とする。
  • ALL=(ALL:ALL) ALL: すべてのホストで、すべてのユーザーとして、すべてのコマンドを実行できる。

ユーザーにsudo権限を付与する

 特定のユーザーに sudo 権限を与える場合、/etc/sudoers ファイルに以下のような行を追加します。

user01	ALL=(ALL) ALL
  • user01: sudo権限を与えるユーザー名。
  • ALL=(ALL) ALL: すべてのホストで、すべてのユーザーとして、すべてのコマンドを実行できる。

注意: 業務環境などセキュリティが重要な場面では、必要なコマンドに限定して権限を付与することが推奨されます。

グループを利用したsudo権限の管理(例:CentOS)

 特定のグループにsudo権限を与え、そのグループにユーザーを追加することで、権限管理を簡素化できます。

例: wheel グループにsudo権限を付与

 wheel グループは、システム管理者用の特権グループとして伝統的に使用されています。なぜ車輪(wheel)が特権グループなのかという疑問が生まれてきますが。 それは、大きな車輪の馬車に乗る人が、大きな権力を持つ者・組織の重要人物のことを指しているところから由来しているそうです。

%wheel	ALL=(ALL) ALL

ユーザーをグループに追加

usermod -aG <グループ名> <ユーザー名>: ユーザーを指定したグループに追加します。

root@ubuntu:~# usermod -aG wheel user01

ユーザーをグループに追加

root@ubuntu:~# gpasswd -d user01 wheel

セキュリティ上の注意点

sudo コマンドを適切に設定しないと、システムのセキュリティを損なう可能性があります。

  • 権限の最小化: 必要最小限の権限のみを付与する。
  • ALL設定のリスクALL を指定すると、事実上スーパーユーザー(root)と同等の権限を与えるため、慎重に検討する。
  • ログの確認sudo の使用履歴はログに記録されるため、定期的に監査する。

まとめ

  • sudoコマンドは、現在のユーザーが一時的に別のユーザー(デフォルトはスーパーユーザー)としてコマンドを実行するためのコマンドです。
  • suコマンドとの違い
    su はシェル全体を別のユーザーに切り替える。
    sudo は指定したコマンドのみを別のユーザーとして実行する。
  • sudoの設定
    /etc/sudoers ファイルで、どのユーザーやグループにどの権限を与えるかを設定する。
    グループを利用して権限管理を行うと便利。
  • セキュリティへの配慮
    不必要な権限を与えないように注意する。
    権限を与えるユーザーやコマンドを限定する。

 sudo コマンドを適切に使用することで、セキュリティを維持しながら効率的にシステム管理を行うことができます。特に、複数のユーザーがシステムを利用する環境では、権限管理が重要となりますので、sudo の設定には十分注意しましょう。