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

スティッキービット

はじめに

スティッキービット (Sticky Bit) は、LinuxやUNIXシステムにおいて、特定のディレクトリ内のファイルやサブディレクトリに対する削除や名前変更の権限を制限するために使用される特殊なパーミッションです。スティッキービットが設定されると、ディレクトリ内のファイルやディレクトリを削除できるのは、ファイルの所有者かスーパーユーザー (root) のみとなります。

本記事では、スティッキービットの概要、仕組み、設定方法、そして実行例について詳しく説明します。また、セキュリティリスクや考慮すべき点についても取り上げます。

スティッキービットとは?

スティッキービット は、LinuxやUNIX系OSで特定のディレクトリに設定することで、そのディレクトリ内のファイルやサブディレクトリの削除や名前変更を制限するための仕組みです。スティッキービットが設定されているディレクトリでは、所有者自身のみがそのファイルやサブディレクトリを削除したり名前を変更したりできます。他のユーザーが同じディレクトリにアクセスできる場合でも、他のユーザーのファイルを削除することはできません。

スティッキービットの最も代表的な使用例は、/tmp ディレクトリです。/tmp は、多くのユーザーが一時ファイルを作成・共有する場所ですが、スティッキービットにより、ユーザーは自分が作成したファイルのみを削除できるようになっています。

スティッキービットの仕組み

スティッキービットは、通常のパーミッション(読み取り、書き込み、実行権限)の設定に加えられる「特殊なビット」です。ディレクトリにスティッキービットを設定すると、ディレクトリ内のファイルやディレクトリを削除できるのは、そのファイルの所有者か、スーパーユーザー (root) だけになります。

スティッキービットが設定されたディレクトリは、ls -l コマンドで確認することができます。パーミッションの最終桁に「t」という文字が表示されている場合、スティッキービットが設定されていることを示します。

drwxrwxrwt 2 root root 4096 Jun 24 12:34 /tmp

この例では、/tmp ディレクトリにスティッキービットが設定されています。t がパーミッションの最後に表示されていることが確認できます。

スティッキービットの設定方法

スティッキービットは、chmod コマンドを使用して設定できます。数字形式やシンボリック形式のどちらかを使用して設定可能です。

数字による設定

スティッキービットを数字で設定するには、パーミッションの先頭に「1」を追加します。たとえば、/tmp ディレクトリに「1777」のパーミッションを設定すると、全てのユーザーに書き込み権限がありつつ、スティッキービットも設定されることになります。

# chmod 1777 /tmp

シンボリックによる設定

シンボリック形式でスティッキービットを設定するには、+t オプションを使用します。

# chmod +t ディレクトリ名

スティッキービットを削除する場合は、次のコマンドを使用します。

# chmod -t ディレクトリ名

スティッキービットの確認方法

スティッキービットが設定されているディレクトリは、ls -ld コマンドで確認できます。スティッキービットが設定されている場合、パーミッションの表示部分に「t」が表示されます。

# ls -ld /tmp

出力例:

drwxrwxrwt 2 root root 4096 Jun 24 12:34 /tmp

スティッキービットの実行例

1. スティッキービットが設定されていない場合

まず、スティッキービットが設定されていないディレクトリを作成し、一般ユーザーが他のユーザーのファイルを削除できるか確認します。

ディレクトリ作成とパーミッション設定

# mkdir /shared
# chmod 777 /shared

ファイル作成

ユーザーAがファイルを作成します。

$ touch /shared/file_a

ユーザーBがファイルを削除

別のユーザーBがファイルを削除できてしまいます。

$ rm /shared/file_a

2. スティッキービットを設定した場合

次に、スティッキービットを設定したディレクトリで同じ操作を行います。

スティッキービットを設定

# chmod +t /shared

確認

# ls -ld /shared

出力例:

drwxrwxrwt 2 root root 4096 Jun 24 12:34 /shared

ユーザーAがファイルを作成

$ touch /shared/file_a

ユーザーBがファイルを削除しようとすると失敗

ユーザーBがファイルを削除しようとすると、次のようなエラーが表示されます。

rm: cannot remove 'file_a': Operation not permitted

このように、スティッキービットが設定されているディレクトリでは、他のユーザーが作成したファイルを削除することはできません。

スティッキービットのセキュリティリスクと対策

スティッキービットは、特定のディレクトリに対するアクセス制御を強化する手段として有効ですが、設定ミスや誤用によるセキュリティリスクも伴います。以下の点に注意してスティッキービットを運用する必要があります。

1. 不必要なディレクトリへのスティッキービット設定を避ける

スティッキービットを使用するのは、多くのユーザーがファイルを作成・削除する可能性があるディレクトリに限定すべきです。/tmp などが代表的な例です。

2. パーミッションの確認を怠らない

スティッキービットを設定する際には、他のパーミッションが適切に設定されているか確認することが重要です。誤ったパーミッション設定は、意図しないセキュリティホールを生み出す可能性があります。

3. 定期的な監査

スティッキービットが設定されたディレクトリやファイルを定期的に監査し、不要なスティッキービット設定がないか確認します。

まとめ

スティッキービット (Sticky Bit) は、LinuxやUNIXシステムでのディレクトリ管理において非常に便利な機能であり、特定のユーザーが自分のファイルのみ削除できるようにするためのパーミッション制御です。特に、多くのユーザーがファイルを操作するディレクトリにおいて、スティッキービットを設定することで、不必要な削除や変更を防ぐことができます。

ただし、スティッキービットは誤用や設定ミスがセキュリティリスクを招く可能性があるため、正しく理解し、慎重に運用することが重要です。定期的な監査を行い、システム全体のセキュリティを維持しましょう。