スティッキービット(スティッキービット)とは | 意味や読み方など丁寧でわかりやすい用語解説

スティッキービット(スティッキービット)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

スティッキービット (スティッキービット)

英語表記

sticky bit (スティッキービット)

用語解説

スティッキービットとは、UnixやLinuxなどのファイルシステムにおいて、ファイルやディレクトリに設定される特殊なパーミッションビットの一つである。システムエンジニアを目指す初心者にとっては、共有環境におけるファイル管理とセキュリティの基礎を理解する上で重要な概念となる。

概要として、スティッキービットは主にディレクトリに対して設定され、そのディレクトリ内のファイルの削除や名前変更を制限する役割を持つ。具体的には、スティッキービットが設定されたディレクトリ内では、ファイルの所有者、そのディレクトリの所有者、またはシステム管理者(rootユーザー)のみが、他のユーザーが作成したファイルを削除したり、名前を変更したりできる。これにより、複数のユーザーがファイルを共有するディレクトリにおいて、誤ってまたは悪意を持って他人のファイルを操作されることを防ぎ、データの一貫性とセキュリティを保つ。ファイルに対して設定された場合、かつてはプログラムの起動を高速化する目的で使用されたが、現代のシステムではその機能はほとんど利用されていない。

詳細について説明する。

まず、スティッキービットの歴史的な役割について触れる。元々、スティッキービットは実行可能なファイル(プログラム)に対して設定されるもので、「テキストセグメントスティッキービット」と呼ばれていた。このビットが設定されたプログラムが一度メモリにロードされると、そのプログラムの実行コード部分(テキストセグメント)は、実行が終了した後もスワップアウトされずにディスクではなくメモリ上に保持され続けた。これにより、そのプログラムが次に実行される際に、ディスクからの読み込みが不要となり、プログラムの起動時間を短縮する効果があった。しかし、現代のオペレーティングシステムのメモリ管理機能が高度化し、不要なプログラムを効率的にスワップアウトしたり、ディスクキャッシュを最適化したりするようになったため、ファイルに対するスティッキービットのこの機能はほとんど使われなくなり、通常は無視されるようになっている。

現在、スティッキービットの主な用途はディレクトリに対するものであり、「ディレクトリスティッキービット」と呼ばれる。この機能が特に重要視されるのは、世界中で書き込み可能な共有ディレクトリである。例えば、多くのUnix系システムに存在する/tmpディレクトリは、すべてのユーザーがファイルを一時的に保存できる場所だが、同時にスティッキービットが設定されている。仮にスティッキービットが設定されていない場合、あるユーザーが/tmpに作成したファイルを、別のユーザーが自由に削除したり、名前を変更したりできてしまう。これはセキュリティ上の問題や、予期せぬデータ損失につながる可能性がある。しかし、スティッキービットが設定されているため、/tmp内のあるファイルは、そのファイルを作成したユーザー自身か、/tmpディレクトリの所有者(通常はroot)、あるいはrootユーザーのみが削除や名前変更を行える。これにより、共有ディレクトリの整合性とセキュリティが確保されるのである。

スティッキービットの設定方法は、chmodコマンドを用いる。八進数表記では、通常のパーミッション(例: 777755)の先頭に1を追加することで設定できる。例えば、chmod 1777 /tmpとすると、/tmpディレクトリにスティッキービットと、すべてのユーザーに対する読み書き実行権限が付与される。シンボリックモードでは、chmod +t /tmpでスティッキービットを設定でき、chmod -t /tmpで解除できる。

スティッキービットが設定されているかどうかを確認するには、ls -lコマンドを使用する。出力されるパーミッション文字列の最後の文字に注目する。ディレクトリにスティッキービットが設定されており、かつ他のユーザーに対する実行権限(x)も設定されている場合、パーミッション文字列の最後の文字はtとなる(例: drwxrwxrwt)。もしスティッキービットが設定されているものの、他のユーザーに対する実行権限(x)が設定されていない場合、最後の文字はTと大文字で表示される(例: drwxrwxrwT)。ただし、共有ディレクトリでは通常、他のユーザーへの実行権限も付与されるため、tと表示されるケースがほとんどである。

このように、スティッキービットは多人数が利用するシステムにおいて、共有リソースの秩序とセキュリティを保つためのシンプルながらも非常に効果的なメカニズムであり、システムエンジニアがファイルシステムの権限を理解する上で不可欠な要素と言える。