すべてのSUID / SGIDファイルを検索するにはどうすればよいですか?


11

私がウェブで見つけたすべてのハウツーは次のように述べています:

Find all SUID files:
find / -perm -4000 -print
Find all SGID files:
find / -perm -2000 -print 

しかし、それは真実ではありません。見る:

$ ls -lah test
-r-sr-xr-x  1 user  user     0B Jan 24 22:47 test
$ 
$ 
$ stat -x test | grep Mode
  Mode: (4555/-r-sr-xr-x)         Uid: ( 1000/    user)  Gid: ( 1000/    user)
$ 
$ 
$ find test -perm 4000
$ find test -perm 2000
$

質問:では、真実とは何ですか?すべてのSUID / SGIDファイルを実際にリストするにはどうすればよいですか?


ええと、なぜこれが正確に「真実ではない」のですか?あなたはなかったRは、 EAD TF riendly Mの権利、ユーザ・マニュアルを?ファイルの許可ビットは正確にモード(8進数またはシンボリック)です。
0xC0000022L

** test **はファイルです。ディレクトリの検索を検索します。したがって、testが存在するディレクトリでfindを使用する必要があります。
Nils

1
@ニルス:真実ではない。find(GNUは正確であることがわかります)はディレクトリとファイルを同じように扱います。彼/彼女は単に-permスイッチのポイントを逃します。マニュアルを読むと役立つでしょう。
0xC0000022L

@ 0xC0000022L興味深い。CentOS 5のlinux-manpageは、ディレクトリのみを取得することを教えてくれます。ファイルでそれを実行することには意味がありますか?
Nils

@ニルス:いいえ、それを行うことに特別な意味はありません。しかし、それはあなたがその愚かさを防ぐことはできません。ともかく、一見するとこれも問題だと思いました。悲しいかな、それはこの質問のためではありません。このようなファイルのビットをチェックして、find $FILE -perm /7777あなたfindがそれを実行しているか、それを防止しているかを確認することができます。
0xC0000022L 2015年

回答:


14

ビットのいずれかをテストする場合は、を使用します/。すなわちあなたのユースケースのために:

find "$DIRECTORY" -perm /4000

そして:

find "$DIRECTORY" -perm /2000

または組み合わせ:

find "$DIRECTORY" -perm /6000

GNUの引数として、フォルダーとファイルの両方を使用できますfind

IMOより読みやすい別の方法は、ニーモニックショートカットを使用することです。すなわち:

find "$DIRECTORY" -perm /u=s,g=s

買い手責任負担

のバリアントはfindさまざまであることを覚えておいてください。また、動作が異なる場合があります。フレンドリーマニュアル(RTFM)を必ずお読みください。


7

次のコマンドを使用すると、SUIDアクセス許可を持つすべてのバイナリを列挙できます。ツールの-perm -u=sフラグはfindトリックを行います:

find / -perm -u=s -type f 2>/dev/null
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.