スティッキービットとは
スティッキービット(Sticky bit)は、
UNIX/
Linuxシステムにおいてファイルや
ディレクトリに設定される特別なフラグです。このフラグは、ファイルや
ディレクトリのアクセス権限を制御するために使用されます。特に
ディレクトリに設定された場合、その
ディレクトリ内のファイルの削除や名前変更を制限する機能を提供します。
歴史
スティッキービットは、1974年のUnix V5で導入されました。当初は、実行ファイルの高速化のために使用されていました。スティッキービットが設定された実行ファイルは、
プロセスが終了した後もテキストセグメント(命令が書かれた部分)がメモリに保持され、再実行時の起動時間を短縮することができました。
しかし、メモリ技術の進化と大容量化に伴い、この利用方法は廃止され、現在では
HP-UX、
NetBSD、
UnixWare、macOSなどの一部のシステムで過去の動作が残るのみです。
現在の主な使用法
スティッキービットの最も一般的な用途は、
ディレクトリの保護です。特に、`/tmp`
ディレクトリのように、複数のユーザーがファイルを共有する
ディレクトリで利用されます。
スティッキービットが設定された
ディレクトリでは、以下の制限が適用されます。
ファイルの所有者
ディレクトリの所有者
スーパーユーザー
上記のいずれかのユーザーのみが、
ディレクトリ内のファイルの削除や名前変更を行うことができます。これにより、他のユーザーが誤って重要なファイルを削除するのを防ぐことができます。
その他の使用例
Solaris 2.5以降では、実行ファイル以外のファイルにスティッキービットが設定された場合、
カーネルはその内容をキャッシュしないという動作が定義されています。これは、スワップファイルのように、システムキャッシュから重要なデータを追い出さないために使用されます。
また、スティッキービットは、automounterがファイルがマウントされていないことを示すためにも使われます。これにより、`ls`などのプログラムがマウントされていないリモートファイルを無視することができます。
設定方法
スティッキービットは、`chmod`コマンドを使って設定できます。
八進数表記: `1000` を使用
シンボル表記: `t` を使用
例えば、`/usr/local/tmp`
ディレクトリにスティッキービットを設定する場合、以下のコマンドを実行します。
bash
chmod +t /usr/local/tmp
あるいは、パーミッションを確実に設定する場合は以下のように指定します。
bash
chmod 1777 /usr/local/tmp
パーミッション表示
ファイルパーミッションの表示では、スティッキービットは`t`または`T`の文字で表されます。
小文字の `t`: スティッキービットが設定され、かつ、その他のユーザーに実行権がある場合
大文字の `T`: スティッキービットが設定され、その他のユーザーに実行権がない場合
例えば、`/tmp`
ディレクトリでは以下のように表示されます。
bash
$ ls -ld /tmp
drwxrwxrwt 4 root sys 485 Nov 10 06:01 /tmp
その他のユーザーに実行権がないファイルにスティッキービットが設定されている場合は、以下のように表示されます。
bash
ls -l test
- -rw-rr 1 root other 0 Nov 10 12:57 test
chmod +t test; ls -l test
- -rw-r--r-T 1 root other 0 Nov 10 12:57 test
まとめ
スティッキービットは、
UNIX/
Linuxシステムのセキュリティを強化するための重要な機能です。特に、`/tmp`
ディレクトリのような共有
ディレクトリにおいて、ファイルの不正な削除や改ざんを防ぐために不可欠です。この仕組みを理解し、適切に活用することで、システムの安定性と安全性を向上させることができます。
関連項目
chmod
* setuid