【Linux】SUID
LinuxやUNIX系システムにおいて、ファイルやディレクトリのアクセス制御は、セキュリティとシステムの運用において極めて重要な役割を果たします。その中でも特に重要な概念の一つが「SUID」(Set User ID)です。SUIDは、特定の条件下でプログラムが実行される際に、そのファイルの所有者の権限で動作するように設定する特殊なアクセス権です。
通常、プログラムはその実行者の権限で動作しますが、SUIDビットが設定されたプログラムは、その所有者の権限で動作します。これにより、一般ユーザーでもシステム管理者の権限が必要な操作を一時的に実行できるようになります。例えば、パスワードの変更を行うpasswd
コマンドは、SUIDが設定されているため、一般ユーザーがシステム管理者権限を持たずに自分のパスワードを変更することが可能です。
SUIDは強力な機能である反面、適切に管理されないとセキュリティリスクとなる可能性があります。そのため、システム管理者はSUIDが設定されたファイルを慎重に管理し、必要な場合にのみ使用することが推奨されます。
SUID(Set User ID)とは
SUID (Set User ID) とは、ファイルが実行されるときに、そのファイルの所有者の権限で実行されるようにする特殊なファイルアクセス権です。これにより、通常のユーザーが一時的にファイル所有者の権限を得ることができます。これは、特定のシステムタスクを実行するために必要な場合に便利です。
passwdコマンドのアクセス権
passwd コマンドは、ユーザーが自分のパスワードを変更するためのコマンドです。しかし、パスワードは非常に重要な情報であり、セキュリティ上の理由から、パスワードが格納されている /etc/shadow ファイルには、通常のユーザーに対する読み取りや書き込みのアクセス権が設定されていません。
ファイル/コマンド | アクセス権 |
---|---|
/etc/shadow | ---------- |
/usr/bin/passwd | -rwsr-xr-x |
一般ユーザーが自分のパスワードを変更できる理由
一般ユーザーが自分のパスワードを変更できるのは、passwd コマンドがSUIDビットを持っているためです。SUIDビットが設定されていることで、passwd コマンドが実行されると、そのコマンドはファイル所有者(通常はroot)の権限で実行されます。これにより、/etc/shadow ファイルへのアクセスが許可され、ユーザーは自分のパスワードを更新することができます。
SUIDの設定方法
SUIDを設定するには、以下のコマンドを使用します。
chmod u+s filename
SUIDが設定されているファイルを数値モードで検索する
数値モードでSUIDが設定されているファイルを検索するには、以下のコマンドを使用します。
「find / -perm -4000
」 コマンドは、システム全体(ルートディレクトリ /
)でSUIDビットが設定されているファイルを検索するためのコマンドです。
find / -perm -4000
find / -perm -4000
コマンドの意味
コマンドの構成
部分 | 意味 |
---|---|
find | ファイルおよびディレクトリを検索するためのコマンド |
/ | 検索を開始するディレクトリ。この場合、ルートディレクトリを意味する |
-perm | 特定のパーミッション(アクセス権)を持つファイルを検索するためのオプション |
-4000 | 検索するパーミッションの指定。4はSUIDビットを表す |
パーミッションビットの意味
パーミッション | 記号表記 | 8進数表記 | 説明 |
---|---|---|---|
SUIDビット | u=s | 4000 | ファイルが所有者の権限で実行される |
SGIDビット | g=s | 2000 | ファイルがグループの権限で実行される。ディレクトリの場合、新規ファイルが親ディレクトリのグループを継承する |
スティッキービット | o=t | 1000 | ディレクトリ内のファイルを所有者またはrootのみが削除可能 |
出力されるファイル
以下に「find / -perm -4000
」 コマンドで出力されるファイルの一部を抜粋します。
ファイルパス | 説明 |
---|---|
/usr/bin/passwd | ユーザーがパスワードを変更するためのコマンド |
/usr/bin/su | ユーザーが他のユーザーに切り替えるためのコマンド |
/usr/bin/sudo | 一時的にスーパーユーザー権限を取得するためのコマンド |
これらのファイルは、SUIDビットが設定されているため、通常のユーザーが実行する際に、そのファイルの所有者(通常はroot)の権限で実行されます。
SUIDが設定されているファイルを記号モードで検索する
記号モードでSUIDが設定されているファイルを検索するには、以下のコマンドを使用します。
「find / -perm /u=s
」 は、システム全体(ルートディレクトリ /
)で、SUIDビットがユーザーの実行ビットに対して設定されているファイルを検索するためのコマンドです。
find / -perm /u=s
「find / -perm -4000
」 コマンドと同じ検索結果が出力されます。
find / -perm /u=s
コマンドの意味
コマンドの構成
部分 | 意味 |
---|---|
find | ファイルおよびディレクトリを検索するためのコマンド |
/ | 検索を開始するディレクトリ。この場合、ルートディレクトリを意味する |
-perm | 特定のパーミッション(アクセス権)を持つファイルを検索するためのオプション |
/u=s | ユーザーの実行ビットに対するSUIDビットが設定されているファイルを検索する |
まとめ
SUID (Set User ID) は、ファイルが所有者の権限で実行されるようにする特殊なファイルアクセス権です。これにより、通常のユーザーが一時的にファイル所有者の権限を得ることができます。passwd コマンドはこの機能を利用して、一般ユーザーが自分のパスワードを安全に変更できるようにしています。
SUIDの設定方法や、SUIDが設定されているファイルを検索する方法を理解することで、システムのセキュリティと運用効率を向上させることができます。
最後に、ここまでの解説を表にまとめます。
項目 | 内容 |
---|---|
SUIDとは | ファイルが所有者の権限で実行されるようにする特殊なファイルアクセス権 |
passwdコマンドのアクセス権 | /etc/shadow: ----------, /usr/bin/passwd: -rwsr-xr-x |
SUIDの設定方法 | chmod u+s filename |
数値モードでの検索 | find / -perm -4000 |
記号モードでの検索 | find / -perm /u=s |