スティッキービット

スティッキービットとは



スティッキービット(Sticky bit)は、UNIX/Linuxシステムにおいてファイルやディレクトリに設定される特別なフラグです。このフラグは、ファイルやディレクトリのアクセス権限を制御するために使用されます。特にディレクトリに設定された場合、そのディレクトリ内のファイルの削除や名前変更を制限する機能を提供します。

歴史



スティッキービットは、1974年のUnix V5で導入されました。当初は、実行ファイルの高速化のために使用されていました。スティッキービットが設定された実行ファイルは、プロセスが終了した後もテキストセグメント(命令が書かれた部分)がメモリに保持され、再実行時の起動時間を短縮することができました。

しかし、メモリ技術の進化と大容量化に伴い、この利用方法は廃止され、現在ではHP-UXNetBSDUnixWare、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

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。