web-dev-qa-db-ja.com

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

SUID

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

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

153
lotusirous

これはおそらく、人々がいつもめちゃくちゃにする最も厄介なことの1つです。 SUID/GUIDビットとスティッキービットは2つのまったく異なるものです。

man chmodを実行すると、SUIDとスティッキービットについて読むことができます。 manページはこちらから入手できます も同様です。

バックグラウンド

抜粋

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

SUID/GUID

上記のmanページが言っていることは、ユーザー8進数(rwxの最初のグループ)とグループ8進数(rwxの2番目のグループ)のxビットがrwxrwxrwxで占める位置は、xがs。これが発生すると、実行時にこのファイル(シェルスクリプトだけではなくプログラムの場合)は、ファイルの所有者またはグループの権限で実行されます。

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

抜粋

SETUIDおよびSETGIDビット

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

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

SUID/GUIDの例

no 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-x-r-xが設定されます。

$ 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

スティッキービット

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

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

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

抜粋

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

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

200
slm

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

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

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

8
leonbloy

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

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

これは、重要なフォルダとそのコンテンツ(サブディレクトリとファイル)の削除を回避するためのセキュリティ対策ですが、他のユーザーは完全な権限を持っています。

3
chandrakumar.M

これは、効果的な例と説明を含む優れたチュートリアルです。これを理解する鍵は、関連する8進法です。 Linuxスティッキービットのチュートリアルと実際の例

0
CMP