スティッキービットはどのように機能しますか?


148

SUID

スティッキービットは、プログラムの実行終了後にメモリ内のプログラムの画像を維持するためにシステムにフラグを立てる実行可能プログラムに適用されます。

しかし、私はそれがメモリに保存されていることを知りません。そして、この場合、どのようにそれらを見ることができますか?


ここに、実例と説明を含む優れたチュートリアルがあります。これを理解する鍵は、関係する8進法です。Linuxのスティッキービットチュートリアルでは、例として働きました
CMP

回答:


193

これはおそらく、人々が常にめちゃくちゃにしてしまう私の最も厄介なことの1つです。SUID / GUIDビットとsticky-bitは2つのまったく異なるものです。

あなたがするなら、man chmodあなたはSUIDとスティッキービットについて読むことができます。manページはこちらにも。

バックグラウンド

抜粋

文字rwxXstは、影響を受けるユーザーのファイルモードビットを選択します。読み取り(r)、書き込み(w)、実行(またはディレクトリの検索)(x)、ファイルがディレクトリであるか、一部の実行権限を既に持っている場合のみ実行/検索ユーザ(X)、実行(S)に設定されたユーザまたはグループID、限定削除フラグまたは スティッキービット(T)

SUID / GUID

上記のmanページが言おうとしていることは、ユーザー8進数(rwxの最初のグループ)およびグループ8進数(rwxの2番目のグループ)のxビットがrwxrwxrwxを取る位置は、xがなる追加の状態を取ることができるということですs これが発生すると、このファイルは実行時に(シェルスクリプトだけでなくプログラムである場合)ファイルの所有者またはグループのアクセス許可で実行されます。

そのため、ファイルがルートによって所有され、SUIDビットがオンになっている場合、プログラムはルートとして実行されます。通常のユーザーとして実行しても。同じことがGUIDビットにも当てはまります。

抜粋

SETUIDおよびSETGIDビット

ユーザーが適切な特権を持っていない限り、ファイルのグループIDがユーザーの有効なグループIDまたはユーザーの補足グループIDのいずれかと一致しない場合、chmodは通常のファイルのset-group-IDビットをクリアします。追加の制限により、MODEまたはRFILEのset-user-IDおよびset-group-IDビットが無視される場合があります。この動作は、基になるchmodシステムコールのポリシーと機能に依存します。疑問がある場合は、基になるシステムの動作を確認してください。

chmodは、明示的に指定しない限り、ディレクトリのset-user-IDおよびset-group-IDビットを保持します。u + sやgsなどのシンボリックモードでビットを設定またはクリアできます。また、数値モードでビットを設定できます(クリアはできません)。

SUID / GUIDの例

suid / guidなし-rwxr-xr-xビットのみが設定されます。

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suidおよびユーザーの実行可能ビットが有効(小文字s) -ビットrwsr-xrxが設定されます。

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suidが有効で実行可能ビットが無効(大文字のS) -ビットrwSr-xr-xが設定されます。

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

guidおよびグループの実行可能ビットが有効(小文字s) -ビットrwxr-sr-xが設定されます。

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

GUIDが有効で実行可能ビットが無効(大文字のS) -ビットrwxr-Sr-xが設定されます。

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

スティッキービット

一方、スティッキービットはt、次のように/tmpディレクトリで示されます。

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

このビットは、「制限付き削除ビット」と常に呼ばれるべきでした。このモードビットを有効にすると、ユーザーが所有者であるファイルとディレクトリのみを削除できるようにディレクトリが作成されます。

抜粋

制限付き削除フラグまたはスティッキービット

制限付き削除フラグまたはスティッキービットは単一ビットであり、その解釈はファイルタイプによって異なります。ディレクトリの場合
、非特権ユーザーがファイルまたはディレクトリを所有していない限り、ディレクトリ内のファイルを削除または名前変更できないようにします。これは、ディレクトリの制限付き削除フラグと呼ばれ、一般的に/ tmpなどの書き込み可能なディレクトリにあります。一部の古いシステム上の通常のファイルの場合、このビットはプログラムのテキスト画像をスワップデバイスに保存するため、実行時により速くロードされます。これはスティッキービットと呼ばれます。


43
実際には、スティッキービットは以前に実行可能ファイルに適用できたため、実行可能ファイルが最初にロードされた後もスワップのままになりました。これにより、使用頻度の高いプログラムの不必要なディスク/ネットワーク(NFS)とCPU使用量を大幅に節約できます。ただし、Linuxもほとんどの(すべて?)Unixシステムも、これをサポートしなくなりました(カーネルから削除されました)。実行可能ファイルがスワップでスタックしているため、「スティッキー」です。さらに、説明したとおりにディレクトリに使用されました。
バードコッペルード

4
実際には、「非常に使用されているか、非常に大きい」の方が適切な説明です。私の大学では、1995年にHP-UXコンピューターでNetscape Webブラウザーが「スティッキー」として使用されていたことを思い出してください。 「スティッキー」にする主要な候補でした。どちらの場合も、ディスク/ NFSからそれらを常にリロードするのは無駄です。
バードコッペルード

8
スティッキービットプログラムは、スワップではなくRAMに常駐することを目的としていました(スワップファイルからのイメージのロードは、ファイルシステムディスクからのロードよりもそれほど高速ではありません)。これは、などの重要なOSレベルのコマンドを対象としていますls。明らかに、ファイルにスティッキービットを設定できるのはスーパーユーザーだけです。仮想メモリと共有ライブラリが導入された後、特にページャーがよりスマートになり、どのページを常駐させるかを動的に決定できるようになったため、重要性は低下しました。
アレクシス

4
また、スティッキープロパティはディレクトリに対して意味をなさないため、アクセス許可マスクの同じビットが後で解釈され、ディレクトリの従来のファイル作成セマンティクスが変更されました。
アレクシス

5
@alexis:元々、スティッキービットプログラムはスワップスペースに保持されていました。スワップファイルイメージの読み取りは連続したセクターであり、ほとんど非同期で読み取ることができるため、これはファイルシステムから読み取るよりもはるかに高速でした。初期のファイルシステムでは、セクターの「ランレングス」はなく、ほとんどの初期のファイルシステムドライバーは、たとえセクターが連続していたとしても、一度に1つのセクターを読み取りました。PDP-40での結果は、スティッキープログラムはすぐにロードされるように見えましたが、非スティッキープログラムは通常の1、2秒かかりました。ed粘着性しかなかったと思います。
ウォリック

8

「プログラムの実行が終了した後、プログラムのイメージをメモリに保持するようシステムにフラグを付ける実行可能プログラムに適用されるスティッキービット。」

これはかなり時代遅れの情報だと思いますが、今日のほとんどのUnixはそれを無視しています。Linuxでは、スティッキービットはディレクトリにのみ関係します。参照してくださいここで、非常に有益なWikipediaの記事

とにかく、その古い動作では、イメージ(データではなく「コード」のみ)は仮想メモリにのみ保持されました。通常は、実際のメモリではなくスワップされ、次回より速く実行されます。


3

スティッキービットとは何ですか?

スティッキービットは、ディレクトリに設定される許可ビットであり、そのディレクトリ内のファイルの所有者またはルートユーザーのみがファイルを削除または名前変更できるようにします。他のユーザーが作成したファイルを削除するために必要な特権を持つユーザーは他にいません。

これは、他のユーザーが完全なアクセス許可を持っているにもかかわらず、重要なフォルダーとそのコンテンツ(サブディレクトリとファイル)の削除を避けるためのセキュリティ対策です。


1
それは正しくありません:en.wikipedia.org/wiki/Sticky_bit
AB

7
@ABあなたが引用したWikpediaの記事の冒頭をほぼ言い換えるまで、私にはかなり正確に思えます。どうしたんだ?
ロアイマ

答えは不完全だと思います。「スティッキー」は、実行可能ファイルをより高速に実行するためにスワップスペースに保持することも示します。現在、これは古くからの歴史ですが、古いファイルシステムでは、たまたまセクターが連続していても、一度に1つのセクターを読み取るために使用されていました。これにより、非スティッキー実行可能ファイルが遅くなり、その時点でスティッキー性が非常に理にかなっています。
GhostCode
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.