LinuxのSUIDとSGIDとは?
Linuxではファイルやディレクトリの権限設定により、システムの安全性や動作を制御します。
その中で特に重要なSUID (Set User ID) と SGID (Set Group ID) は、
実行ファイルやディレクトリに特殊な動作を付加するための権限です。
以下では具体例を交えて、SUIDとSGIDの概念から設定方法、使用例、業務での活用方法まで詳細に解説します。
SUIDとは?
SUIDの概要
- 動作: ファイルにSUIDビットを設定すると、そのファイルが実行される際に、実行ユーザーではなく、ファイルの所有者の権限で実行されます。
- 用途: 一般ユーザーが一時的にroot権限などの高い権限で動作するプログラムを実行する必要がある場合に使用されます。
例:passwd
コマンド(パスワードを変更するコマンド)はSUIDが設定されています。
これにより、一般ユーザーであっても/etc/shadow
ファイルを編集することが可能になります。
(通常はroot権限が必要)
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54232 Jan 1 12:34 /usr/bin/passwd
s
の意味:実行時にファイルの所有者(この場合はroot)の権限で動作する。
SUIDの設定方法
SUIDを付ける:chmod
コマンドを使用してSUIDを設定します。
sudo chmod u+s ファイル名
例:
sudo chmod u+s /home/user/test.sh
SUIDを確認する:ls -l
コマンドで、実行権限部分にs
が表示されていればSUIDが設定されています。
ls -l /home/user/test.sh -rwsr-xr-x 1 user user 1234 Nov 20 14:00 /home/user/test.sh
SUIDを解除する:
sudo chmod u-s ファイル名
実際にSUIDを使ってみよう
例1: 権限を持つスクリプトの作成
権限確認用スクリプトを作成:
echo -e "#!/bin/bash\nwhoami" > /home/user/suid_test.sh
chmod +x /home/user/suid_test.sh
上記の記述は、1行目は、/home/user/suid_test.shファイルにwhoamiコマンドを記述しています。
そして、2行目でchmodコマンドを使い、suid_test.shに実行権限を付与しています。
SUIDを設定:
sudo chown root:root /home/user/suid_test.sh sudo chmod u+s /home/user/suid_test.sh
実行結果確認:
./suid_test.sh
出力: root
(SUIDがない場合は、実行ユーザー名が出力される)
SGIDとは?
SGIDの概要
- 動作(ファイルの場合): SGIDが設定されたファイルを実行すると、ファイルのグループ所有者の権限で実行されます。
- 動作(ディレクトリの場合): SGIDが設定されたディレクトリ内に作成されるファイルやサブディレクトリは、自動的にディレクトリのグループ所有者を引き継ぎます。
- 用途: グループでのファイル共有や共同作業を効率化します。
SGIDの設定方法
SGIDを付ける:
sudo chmod g+s ファイル名またはディレクトリ名
SGIDを確認する:
ls -l
コマンドで、グループ権限部分にs
が表示されていればSGIDが設定されています。
ls -ld /home/shared drwxr-sr-x 2 user group 4096 Nov 20 14:00 /home/shared
SGIDを解除する:
sudo chmod g-s ファイル名またはディレクトリ名
実際にSGIDを使ってみよう
例1: 共有ディレクトリの作成
ディレクトリを作成:
sudo mkdir /home/shared sudo chown root:groupname /home/shared
SGIDを設定:
sudo chmod g+s /home/shared
ファイルを作成:
touch /home/shared/file1
確認:
出力: 作成されたファイルのグループ所有者がgroupname
になっている。
SUIDとSGIDのリスク
SUIDとSGIDを不適切に使用すると、セキュリティリスクが発生します。以下の点に注意が必要です:
- 特権の濫用: SUIDを設定したプログラムに脆弱性がある場合、悪意のあるユーザーにシステム全体が乗っ取られる可能性があります。
- 意図しないファイルアクセス: SGIDでグループ権限が広がると、不必要なファイルアクセスが許可される場合があります。
対策:
以下のように、定期的にfind
コマンドを使い、SUID/SGIDを持つファイルを監査するなど
必要最小限のファイルにSUID/SGIDを設定することが重要です。
sudo find / -perm -4000 -type f 2>/dev/null # SUID sudo find / -perm -2000 -type f 2>/dev/null # SGID
まとめ
- SUID: 一般ユーザーが一時的に所有者の権限でプログラムを実行可能にします。
- SGID: ファイルやディレクトリのグループ権限を制御し、共同作業を効率化します。
- 設定と解除:
chmod
コマンドで簡単に設定・解除可能。 - 注意点: 使用する際はセキュリティリスクを十分考慮し、必要な場面でのみ利用する。