【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コマンドのアクセス権

一般ユーザーが自分のパスワードを変更できる理由

 一般ユーザーが自分のパスワードを変更できるのは、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=s4000ファイルが所有者の権限で実行される
SGIDビットg=s2000ファイルがグループの権限で実行される。ディレクトリの場合、新規ファイルが親ディレクトリのグループを継承する
スティッキービットo=t1000ディレクトリ内のファイルを所有者または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
SUIDのまとめ