概要
sudo
コマンドと sudoers
設定は、Linux システムでユーザーに特権コマンドの実行権限を安全に付与するためのツールと設定ファイルです。
sudoers
ファイルを適切に設定することで、特定のユーザーやグループに対して、特定のコマンドを制御された環境で実行させることができます。
su
: ユーザーの切り替え
su
(substitute user)は、指定したユーザーとして新しいシェルを起動するためのコマンドです。
デフォルトでは、root ユーザーに切り替えることが多いですが、任意のユーザーに切り替えることもできます。
root 権限を持つユーザーへの切り替えは慎重に行い、システム全体に影響を与える可能性があるため、必要な操作のみを行うようにしてください。
基本構文
su [オプション] [ユーザー名]
ユーザー名
を指定しない場合、デフォルトで root ユーザーに切り替わります。su
コマンドを実行すると、対象ユーザーのパスワードを求められます。
よく使われるオプション
オプション | 概要 |
---|---|
- |
ログインシェルを起動し、ユーザーの環境変数を読み込む |
-c <command> |
指定したコマンドを実行し、終了後に元のシェルに戻る |
-l または --login |
ログインシェルを起動し、ユーザーの環境変数を読み込む(- と同じ) |
-s <shell> |
使用するシェルを指定する |
使用例
su
コマンドの使用例
root ユーザーに切り替える
su
特定のユーザーに切り替える
su <username>
ログインシェルとして特定のユーザーに切り替える
su - <username>
特定のコマンドを別ユーザーとして実行する
su -c "ls /root" root
特定のシェルを使用してユーザーに切り替える
su -s /bin/bash <username>
sudo
: 指定したユーザーでコマンドの実行
sudo
コマンドは、Linux や Unix 系のオペレーティングシステムで、特定のコマンドを別のユーザー権限で実行するための非常に重要なツールです。
通常、スーパーユーザー (root) 権限でコマンドを実行するために使用されますが、特定のユーザーとしてコマンドを実行することも可能です。
基本的な使用法
通常、sudo
コマンドは以下のように使用されます:
sudo <コマンド>
例えば、スーパーユーザー権限でシステムのパッケージを更新するには、次のようにします:
sudo apt update
特定のユーザーとしてコマンドを実行
特定のユーザーとしてコマンドを実行するには、-u
オプションを使用します。
sudo -u <ユーザー名> <コマンド>
例えば、john
というユーザーとして ls
コマンドを実行するには、次のようにします:
sudo -u john ls /home/john
特定のグループとしてコマンドを実行
特定のグループとしてコマンドを実行するには、-g
オプションを使用します。
sudo -g <グループ名> <コマンド>
例えば、developers
というグループとして ls
コマンドを実行するには、次のようにします:
sudo -g developers ls /path/to/directory
sudoers
: sudo の設定
/etc/sudoers
ファイルは、sudo
コマンドの動作を制御するための設定ファイルです。このファイルを編集することで、特定のユーザーやグループに対して sudo
権限を付与したり、特定のコマンドだけを実行できるように制限したりすることができます。
このファイルは非常に重要であり、誤った設定を行うとシステムの管理が困難になる可能性があります。
直接編集することもできますが、構文エラーがあると sudo が使えなくなるため、visudo
コマンドを使って編集することが推奨されています。visudo
は編集時に構文エラーをチェックし、誤った設定によるシステムの問題を防ぎます。
sudo visudo
editor
に関連付けられたエディタが起動されます。以下のコマンドで使用するエディタを変更できます。
vim に変更する例:
sudo update-alternatives --set editor /usr/bin/vim.basic
書式
sudoers
ファイルの各行は、次のような形式で記述されます:
ユーザー名 ホスト名=(実行ユーザー名) [NOPASSWD:] コマンド
各フィールドの説明
ユーザー名:
sudo
権限を与えるユーザー名またはグループ名- ユーザー名:
username
- グループ名:
%groupname
- UID:
#1000
- GID:
%#1000
- ユーザー名:
ホスト名:
sudo
コマンドを実行できるホスト名- 複数の PC で同じ
sudoers
を使う場合に、ホストごとに適用を限定するための機能です。 - 全ホスト:
ALL
- 特定のホスト名:
myhost.example.com
- ネットワークアドレス:
192.168.1.0/24
- ホストの IP アドレス:
192.168.1.100
- 複数の PC で同じ
実行ユーザー名: コマンドを実行するユーザー
ユーザー名
: そのユーザー名でコマンドが実行できる:グループ名
: グループ名の権限でコマンドが実行できるユーザー名:グループ名
: そのユーザー名またはグループ名でコマンドが実行できるALL
: 任意のユーザーとしてコマンドが実行できる:ALL
: 任意のグループとしてコマンドが実行できるALL:ALL
: 任意のユーザーまたはグループとしてコマンドが実行できる
コマンド: 実行を許可するコマンド
ALL
: すべてのコマンドを許可- 実行できるコマンドをフルパスで指定
- 複数のコマンドを指定する場合はカンマ区切りで指定
- ディレクトリを指定した場合、そのディレクトリ内の全てのコマンドが実行できる
- ワイルドカードを使って複数のコマンドを指定することもできる
NOPASSWD:
オプション:NOPASSWD:
オプションを付けると、指定されたコマンドを実行する際にパスワードの入力を求められません。
重複する設定の優先順位
sudoers
ファイルでは、同じユーザーやグループに対する重複する設定がある場合、最後に記述された設定が優先されます。
例えば、以下のような sudoers
ファイルのエントリがあるとします:
# この設定では user1 はすべてのコマンドを実行可能
user1 ALL=(ALL) ALL
# この設定では user1 は /usr/bin/apt のみ実行可能
user1 ALL=(ALL) /usr/bin/apt
この場合、user1
に対して最後に記述された設定が適用されるため、user1
は /usr/bin/apt
コマンドのみ実行できることになります。
全てのコマンドを実行可能
ユーザー john
がどのホストでも全てのコマンドを実行できるようにする設定:
john ALL=(ALL) ALL
特定のコマンドだけを実行可能
ユーザー john
が /usr/bin/apt
コマンドだけを実行できるようにする設定:
john ALL=(ALL) /usr/bin/apt
グループに対する設定
グループ admin
内の全てのユーザーが全てのコマンドを実行できるようにする設定:
%admin ALL=(ALL) ALL
パスワードなしでコマンドを実行
ユーザー john
がパスワードなしで全てのコマンドを実行できるようにする設定:
john ALL=(ALL) NOPASSWD: ALL
特定のユーザーとして特定のコマンドを実行
ユーザー john
が postgres
ユーザーとして psql
コマンドを実行できるようにする設定:
john ALL=(postgres) /usr/bin/psql
エイリアスの使用
sudoers
ファイルではエイリアスを使用して設定を簡略化することができます。エイリアスには次の 4 種類があります:
User_Alias
: ユーザーのエイリアスRunas_Alias
: 実行対象ユーザーのエイリアスHost_Alias
: ホストのエイリアスCmnd_Alias
: コマンドのエイリアス
エイリアスの使用
ユーザー john
と jane
が APT_CMDS
として定義されたコマンドを実行できるようにする設定:
User_Alias ADMINS = john, jane
Cmnd_Alias APT_CMDS = /usr/bin/apt, /usr/bin/apt-get
ADMINS ALL=(ALL) APT_CMDS
設定ファイルのインクルード
#includedir
や #include
を使って設定ファイルをインクルードすることができます。
/etc/sudoers.d
ディレクトリ内の設定ファイルをインクルードする#includedir /etc/sudoers.d
/etc/sudoers.d/username
をインクルードする#include /etc/sudoers.d/username
例
例えば、デフォルトの sudoers
ファイルは以下のようになっています。
- root ユーザーは任意のユーザーまたはグループとして、すべてのコマンドを sudo で実行できる
- admin グループは任意のユーザーとして、すべてのコマンドを sudo で実行できる
- sudo グループは任意のユーザーまたはグループとして、すべてのコマンドを sudo で実行できる
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
このため、デフォルトでは、sudo を付ければ一般ユーザーが管理者権限のコマンドを実行したり、権限がない他のユーザーにアクセスしたりできるようになります。
コメント