このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:コマンドを別のユーザーとして実行する:sudoコマンド
コマンドを別のユーザーとして実行する:sudoコマンド
Linuxシステムでは、一般ユーザーとしてログインして作業を行うのが基本です。しかし、システムの設定変更やソフトウェアのインストールなど、管理者権限(スーパーユーザー権限)が必要な操作を行う場合があります。sudoコマンドは、そのような場合に一時的に別のユーザー(デフォルトではスーパーユーザー)としてコマンドを実行するための強力なツールです。
ここでは、sudoコマンドを使用してコマンドを別のユーザーとして実行する方法と、その設定方法について詳しく解説します。
sudoコマンドとは
sudo(Super 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
: スーパーユーザーのパスワードを入力。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
の設定には十分注意しましょう。