コマンドls -ld /tmp
を実行すると、出力は次のようになります。
drwxrwxrwt 30 root root 20480 Mar 11 14:17 /tmp
そこで、主に2つの質問があります。
t
は何ですか?/tmp
はシステム内のさまざまなユーザーに関連する一時ファイルを作成するために使用されますが、許可がrwxrwxrwx
(777)になるのはなぜですか?これは私にとって間違っているようです。ここで何が起こっているのか理解するためにあなたの助けが必要です。
スティッキービットは、ディレクトリに設定される許可ビットで、そのディレクトリ内のファイルの所有者、ディレクトリの所有者、またはルートユーザーのみがファイルを削除または名前変更できるようにします。他のユーザーが作成したファイルを削除するために必要な特権を持つユーザーは他にいません。
これは、重要なフォルダーとそのコンテンツ(サブディレクトリとファイル)の削除を回避するためのセキュリティ対策ですが、他のユーザーには完全な権限があります。
/tmp
にt
スティッキービットがあるのはなぜですか?/tmp
ディレクトリは、さまざまなLinuxユーザーが一時ファイルを作成するために使用できます。ここで、ユーザーがこのディレクトリ内の他のユーザーによって作成されたファイルを削除/名前変更した場合はどうなりますか?
この種の問題を回避するために、スティッキービットの概念が使用されます。そのため777
が指定されていますが、スティッキービットを保持することは悪い考えではありません。
デスクトップのtest
というディレクトリにスティッキービットを設定します。
シンボリックな方法(t
はスティッキービットを表します):
chmod o+t ~/Desktop/test
または
chmod +t ~/Desktop/test
数値/ 8進法(1、最初の位置の値1としてスティッキービットビット)
chmod 1757 ~/Desktop/test
次に、結果をテストしましょう。
ls -li ~/Desktop/test
1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test
スティッキービットを削除/削除するには
chmod o-t ~/Desktop/test
次に、結果をテストしましょう。
ls -li ~/Desktop/test
1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test
スティッキービットは、ファイル/ディレクトリの所有者またはルートユーザーのみがファイルを削除または名前変更できるようにするファイルまたはディレクトリに設定される許可ビットです。他のユーザーが作成したファイルを削除する特権は、他のユーザーには与えられません。
Linuxシステムのすべてのユーザーがファイルを作成するために使用できるLinuxディレクトリが必要になる場合があります。ユーザーは、このディレクトリでの都合に応じてファイルを作成、削除、または名前変更できます。
さて、ユーザーがこのディレクトリ内の他のユーザーによって作成されたファイルを誤ってまたは意図的に削除(または名前変更)した場合はどうなりますか?
この種の問題を回避するために、スティッキービットの概念が使用されます。 / tmpがこの目的に使用されるためです。したがって、上記のシナリオを回避するには、/ tmpスティッキービットを使用します。
例えば:
mkdir demo
chmod 777 demo
また、このフォルダー内に、許可777を持つ異なるユーザーを持つ2つのファイルを作成しました。
ls -ld demo
drwxrwxrwx 2 guru guru 4096 Mar 11 18:17 demo
ls -l demo
-rwxrwxrwx 1 abhi abhi 0 Mar 11 17:11 file1
-rwxrwxrwx 1 anshu anshu 0 Mar 11 18:15 file2
これでスティッキービットをオンにします
chmod +t demo/
ls -ld demo
drwxrwxrwt 2 guru guru 4096 Mar 11 18:17 demo
1人のユーザー(abhi)が2番目のユーザー(anshu)の名前を変更する場合はどうなりますか
mv /home/guru/demo/file2 /home/guru/demo/file3
mv: cannot move '/home/guru/demo/file2' to '/home/guru/demo/file3': Operation not permitted
スティッキービットの起源
Linuxでは、スティッキービットの使用目的は、ディレクトリ上でのみです。歴史的には、通常のファイルではまったく異なるものに使用されていました。これが名前の由来です。
プログラムが実行されると、ユーザーが実際に使用を開始する前にプログラムをメモリにロードするのに時間がかかります。エディターなどのプログラムがユーザーによって頻繁に使用される場合、起動時間の遅延は当時のオーバーヘッドでした。
この時間遅延を改善するために、スティッキービットが導入されました。 OSは、実行可能ファイルのスティッキービットがオンの場合、実行可能ファイルのテキストセグメントがスワップ領域に保持されていることを確認しました。これにより、プログラムの再実行時に実行可能ファイルをRAMに簡単にロードバックできるため、時間遅延が最小限に抑えられました。
Linuxなどの最新のシステムは、実行可能ファイルやその他のファイルのキャッシュを自動的に管理するため、スティッキービットは必要ありません。
出典: The Geek Stuffの「Linux Sticky Bit Concept Explained with Examples」
Stickybitは、共有ディレクトリを誤って削除しないための回避策です。ディレクトリにstickybitがある場合、すべてのユーザーが他のすべての許可を取得できる場合でも、所有者またはルートのみがそのディレクトリを削除できます。
/tmp
はプロセスとユーザーの間で最も共有されているディレクトリであり、そのためにアクセス許可が777
であっても、ユーザーがディレクトリを削除できないようにするstickybitが含まれています。ユーザーとプロセスが権限を競合することなくディレクトリを使用する能力。