SGID(Set Group ID)

SGID

はじめに

SGID (Set Group ID) は、LinuxやUNIXシステムで使用される特殊なファイルパーミッションの一つであり、実行ファイルやディレクトリに設定することで、そのファイルやディレクトリに関するグループ権限を制御する役割を持ちます。特に、ファイルのグループ所有者の権限でプログラムを実行できたり、ディレクトリ内に作成されたファイルが親ディレクトリのグループに属するように設定することが可能です。

本記事では、SGIDの概要、仕組み、設定方法、そしてセキュリティに関する考慮点について詳しく解説します。

SGIDとは?

SGID (Set Group ID) は、ファイルやディレクトリに設定される特殊な権限ビットで、ファイルを実行する際に、そのファイルのグループ所有者の権限で実行されるという動作を制御します。また、ディレクトリにSGIDが設定されていると、そのディレクトリ内で作成されたファイルやサブディレクトリは、親ディレクトリのグループ所有権を継承します。

SGIDの動作

  • 実行ファイルの場合: ファイルがSGIDで設定されていると、ファイルを実行するユーザーは、ファイルのグループの権限でプログラムを実行します。
  • ディレクトリの場合: ディレクトリにSGIDが設定されていると、そのディレクトリ内で新しく作成されたファイルやサブディレクトリは、ディレクトリのグループを引き継ぎます。

SGIDの仕組み

SGIDは、ファイルやディレクトリの権限設定において、グループの実行権限部分に「s」という文字で表示されます。SGIDは、SUIDと似た機能ですが、SUIDはファイルの所有者権限に関係し、SGIDはグループに焦点を当てています。

SGIDが設定されたファイルのパーミッション表示の例:

-rwxr-sr-x 1 root staff 12345 Jun 24 12:34 /usr/bin/example_program

上記の例では、example_program がグループ staff の権限で実行されるようにSGIDが設定されています。

SGIDの設定方法

SGIDは、chmod コマンドを使用して設定できます。SUIDと同様に、数字やシンボリック形式で設定可能です。

数字による設定

SGIDは、パーミッションの4桁目に「2」を追加することで設定します。例えば、755 のパーミッションにSGIDを追加する場合は「2755」と設定します。

# chmod 2755 ファイル名

シンボリックによる設定

シンボリック形式では、g+s を使ってSGIDを設定します。

# chmod g+s ファイル名

SGIDを削除する場合は、次のようにします。

# chmod g-s ファイル名

SGIDの確認方法

SGIDが設定されているファイルは、ls -l コマンドで確認できます。SGIDが設定されている場合、パーミッションの表示部分に s が表示されます。

# ls -l /usr/bin/example_program

出力例:

-rwxr-sr-x 1 root staff 12345 Jun 24 12:34 /usr/bin/example_program

この例では、example_program がSGIDで設定され、グループの権限で実行されます。

SGIDの実行例

1. 実行ファイルにSGIDを設定する例

まず、実行ファイルにSGIDを設定し、その動作を確認します。

ファイル作成とパーミッション設定

管理者権限でファイルを作成し、実行権限を付与します。

# touch /usr/local/bin/sgid_test.sh
# chmod 755 /usr/local/bin/sgid_test.sh
# chown root:staff /usr/local/bin/sgid_test.sh

SGIDを設定

SGIDを設定します。

# chmod g+s /usr/local/bin/sgid_test.sh

確認

SGIDが設定されていることを確認します。

# ls -l /usr/local/bin/sgid_test.sh

出力例:

-rwxr-sr-x 1 root staff 0 Jun 24 12:34 /usr/local/bin/sgid_test.sh

一般ユーザーで実行

一般ユーザーでスクリプトを実行します。グループ staff の権限で動作することが確認できます。

$ usr/local/bin/sgid_test.sh

2. ディレクトリにSGIDを設定する例

SGIDはディレクトリにも設定でき、ディレクトリ内に作成されるすべてのファイルやサブディレクトリが、そのディレクトリのグループ権限を引き継ぐようになります。

ディレクトリ作成

ディレクトリを作成します。

# mkdir /shared
# chown root:staff /shared

SGIDを設定

ディレクトリにSGIDを設定します。

# chmod g+s /shared

確認

SGIDが設定されていることを確認します。

# s -ld /shared

出力例:

drwxr-sr-x 2 root staff 4096 Jun 24 12:34 /shared
drwxr-sr-x 2 root staff 4096 Jun 24 12:34 /shared

ディレクトリ内に一般ユーザーがファイルを作成すると、そのファイルのグループが staff に設定されます。

# touch /shared/testfile
# ls -l /shared/testfile

出力例:

-rw-r--r-- 1 user staff 0 Jun 24 12:35 /shared/testfile

SGIDのセキュリティリスク

SGIDを使用することで、便利にグループ権限を制御できますが、セキュリティリスクも伴います。特に、SGIDを設定されたファイルに脆弱性があると、悪意あるユーザーがそのファイルを利用して不正な権限を取得する可能性があります。そのため、SGIDの使用は信頼できるプログラムに限定する必要があります。

セキュリティ対策

SGIDを使用する際には、次の点に注意しましょう。

1. 不要なSGIDの削除

SGIDが設定されている必要のないファイルやディレクトリには、必ずSGIDを削除します。

# chmod g-s ファイル名

2. SGIDファイルの定期監視

SGIDが設定されたファイルやディレクトリを定期的に監視し、不要なSGIDが設定されていないか確認します。

# find / -perm /2000

まとめ

SGID (Set Group ID) は、LinuxやUNIXシステムでファイルやディレクトリのグループ権限を制御するための便利な機能です。特に、ディレクトリにSGIDを設定することで、複数のユーザーが同じグループでファイルを共有・管理できるようになります。ただし、SGIDの設定ミスや不要な設定はセキュリティリスクを高める可能性があるため、慎重な運用が求められます。

システム管理者は、定期的にSGIDが設定されたファイルやディレクトリを監視し、セキュリティ対策を講じることが重要です。