その前にまずパーミッションというものについて簡単に説明いたします。
Linux上でファイルやディレクトリには「アクセス権限」が付与されており、「読み込み権限」、「書き込み権限」、「実行権限」という3つの権限設定があります。
また権限を付与するユーザとして対象ファイルやディレクトリの「所有ユーザ」、「所有グループ」、「その他のユーザ」という3つの分類があります。これら権限のことをパーミッションといい、各3つの分類のユーザに対して「読み込み」や「書き込み」の許可する・しないを設定することでファイルへのアクセス制御・管理を行っています。
そのパーミッションの中でもSUID、SGID、スティッキービットという特殊な権限設定が有ります。各項目の基本的な説明を下記に示します。こちらはファイルに設定されるのですが、実行権限を持っていれば「SUIDを設定されたファイルの所有者の権限で実行できる」というものになります。
例えば「passwd」というコマンドには基本的にSUIDが設定されています。コマンドの所有者はrootですが、別の実行権を持つ一般ユーザーが「passwd」コマンドを実行した時、rootユーザーの権限で実行できるということになります。
・SGID
SUIDと似ていますが、こちらは「グループの権限」についての設定となります。
SGIDはファイル、ディレクトリどちらにも付与されます。
ファイルにSGIDが付与されていた場合、実行権限を持っていれば「SGIDを設定されたファイルのグループの権限で実行できる」というものになります。
こちらは上記SUIDで説明したことと同様にファイルの実行権限さえ持っていれば、別のグループユーザーだったとしても「所有グループ」の権限でファイルを実行できます。
ディレクトリにSGIDが付与されている場合は動作が異なりまして、SGIDが付与されたディレクトリ配下で作成されたファイルやディレクトリはSGIDのフォルダと同じ所有グループになります。・スティッキービット
こちらはディレクトリに設定されるのですが、スティッキービットを設定されたディレクトリ配下のファイルやディレクトリは権限設定に関係無く、所有者にしか変更や削除ができなくなります。
このパーミッションは全ユーザーにファイルやフォルダ作成を許可したいが、削除だけは制限したい場合等に使用されます。
ちなみにそれぞれの権限は「chmod」というコマンドを実行することによって付与できます。
コマンド例を下記に示します。
chmod u+s ファイル名・・・SUIDを付与
chmod g+s ファイル名・・・SGIDを付与
chmod o+t フォルダ名・・・スティッキービットを付与
逆に権限を削除したい場合は下記になります。
chmod u-s ファイル名・・・SUIDを削除
chmod g-s ファイル名・・・SGIDを削除
chmod o-t フォルダ名・・・スティッキービットを削除
以前、基本的な「読み込み権限」や「書き込み権限」についての説明をさせていただいたのですが、今回はその説明の補足事項となります。
アクセス制御はサーバーやコンピュータの管理において非常に重要な項目となるため、コマンドを実際に自分で実行してみてさらに理解を深めたいと考えております。
参考資料
・Linux - SUID SGID スティッキービット (infraeye.com)
・特殊なパーミッションについて | TECH PROjin (pjin.jp)