Linux
 Computer >> コンピューター >  >> システム >> Linux

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

Linuxは誕生当初からマルチユーザー環境を想定して設計されています。そのため、実際に運用されているシステムでは、同じグループに所属するユーザー同士でディレクトリを共有するケースがよく見られます。しかし、複数人でファイルを共有する際には、意図しない削除や上書きといったトラブルが発生しがちです。本記事では、スティッキービット(sticky bit)を活用して、共有ディレクトリ上のファイルアクセス権限をきめ細かく制御する方法を解説します。

説明のため、ここでは3人のユーザー「john1」「john2」「john3」が存在し、いずれも共通グループ「johns」に所属しているシステムを例にします。

まず、「john1」がグループ「johns」の全ユーザーで共有するためのディレクトリ「shared-dir」を新規作成したとします。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

lsコマンドを使うと、「shared-dir」のパーミッションを確認できます。この表示内容は次の表のように解釈できます。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

現時点では「john1」だけがディレクトリの内容を読み取り、書き込むことができます。今回は共有ディレクトリとして運用したいので、グループに属する全ユーザーが「shared-dir」へ書き込める状態にする必要があります。

そこで、chmodコマンドを使ってパーミッションを変更し、以下のように「johns」グループの全ユーザーに「書き込み(w)」権限を付与します。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

更新後のパーミッションは以下の通りです。黄色の下線部分を見ると、「johns」グループに書き込み権限が付与されていることが分かります。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

共有ディレクトリへのファイル追加

続いて、「john1」が「shared-dir」に2つのファイル(j1_file1.txt と j1_file2.txt)を追加します。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

分かりやすくするため、ファイル名の先頭2文字はユーザー名に対応させています。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

同様に、「john2」も「shared-dir」へファイルを書き込むことができます。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法 Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

これで「shared-dir」内には合計4つのファイルが存在することになります。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

現在の設定には問題がある?

ファイル「j1_file1.txt」は「john1」が作成したため、「john1」がこのファイルの所有者です。ところが、ここで「john2」がログインしてこのファイルを削除しようとすると、なんと削除できてしまいます。

「john1」が所有者であるにもかかわらず「john2」に削除されてしまったのは、「johns」グループの全メンバーに書き込み権限が与えられているためです。

この状態は理想的とは言えません。本来望ましいのは、全ユーザーにディレクトリへの書き込みを許可しつつ、ファイルの削除はその所有者本人だけに限定することです。これを実現するにはどうすればよいのでしょうか?

スティッキービットとは

スティッキービットは、アクセス可能なグループに書き込み権限が設定されたディレクトリに対して適用できる特殊なパーミッションです。このビットを設定すると、グループの全メンバーは引き続きディレクトリへ書き込めますが、ファイルを作成した本人、すなわちファイル所有者以外はそのファイルを削除できなくなります。

スティッキービットを設定するには、chmodコマンドに+tフラグを付けて実行します。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

更新後のパーミッションは以下のようになります。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

この状態で「john2」が「john1」の作成したファイル「j1_file2.txt」を削除しようとしても、その操作は許可されません。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

なお、以下のように「others(その他)」から実行権限を外すと:

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

パーミッション文字列の「others」部分に大文字の「T」が表示され、ディレクトリにスティッキービットが設定されていることを示します。スティッキービット自体の動作は変わりません。

Linuxのスティッキービットで共有ディレクトリ上のファイルを管理する方法

「chmod」コマンドの別の記述方法

数値形式のchmodコマンドを使っても、スティッキービットを設定できます。

chmod nxyz <file_name>

各項目の意味は以下の通りです。

  • n = 1:スティッキービットを表す。それ以外の値は他の特殊パーミッションを意味する
  • x:ファイル所有者に与える権限
  • y:ファイルにアクセスできるグループに与える権限
  • z:others(その他)に与える権限

例えば、「shared-dir」にスティッキービットを設定するには、次のコマンドを実行します。

chmod 1755 shared-dir

これは、既存のデフォルトパーミッションに対して+tを指定した場合とまったく同じ結果になります。

なお、スティッキービットはあくまでディレクトリに対して使用するものです。通常のファイルに設定しても意味がない点に注意してください。

  1. LinuxでZipファイルを解凍する方法|GUIとコマンドラインの使い方を徹底解説

    Zipファイルは、ダウンロード速度が遅く1バイトでも節約が重要だった時代ほど頻繁には使われなくなりました。それでも今なお広く普及しているファイル形式の一つであり、いずれ開く必要に迫られることもあるでしょう。使用しているディストリビューションにもよりますが、Zipアーカイブの展開自体は比較的簡単です。とはいえ、より高度な操作方法や応用的なテクニックを知っておけば、いざというときにきっと役立ちます。GUIを使ってZipファイルを解凍する多くのLinuxデスクトップ環境では、Zipファイルの解凍は非常に簡単です。ファイルを右クリックすると複数のオプションが表示され、通常は「ここで展開」や「ここに解凍

  2. LinuxでZsyncを使ってファイルの差分だけをダウンロード・更新する方法

    ISOイメージのような大容量ファイルのダウンロードは、本当にストレスがたまる作業です。インターネット回線の速度によってはダウンロードに長時間かかり、ハードディスクの容量も大量に消費します。さらに厄介なのは、更新版が必要になったときに、同じダウンロード作業を最初からやり直さなければならない点です。 しかし、そんな悩みを解決してくれるツールがあります。それがZsyncです。ZsyncはLinux向けのファイル同期ツールで、ファイル全体を再ダウンロードすることなく、変更された部分だけを更新できるのが最大の特徴です。 Zsyncは、ファイルやディレクトリの同期でおなじみの人気ツールrsyncをベース