Как искать все файлы 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?

somelooser28533
источник
Хм, так почему именно это "не правда"? Вы сделали R EAD T он F riendly M Anual, верно? Биты прав доступа к файлу точно в режиме (восьмеричное или символическое).
0xC0000022L
** тест ** это файл. Найти поиски по каталогам. Поэтому вы должны использовать find в каталоге, где находится test.
Нильс
1
@Nils: не соответствует действительности. find(GNU определит, чтобы быть точным) будет принимать каталоги и файлы одинаково. Он / она просто пропускает точку -permпереключения. Чтение руководства поможет.
0xC0000022L
@ 0xC0000022L Интересно. Моя man-страница linux на CentOS 5 говорит мне, что она будет принимать только каталоги. Есть ли смысл запускать его на файл?
Нильс
@Nils: Нет, в этом нет особого смысла. Но это не помешает тебе от этой глупости. Несмотря на это, на первый взгляд, я тоже думал, что это проблема. Увы, это не для этого вопроса. Вы можете попробовать проверить какие-либо биты в файле, подобном этому, find $FILE -perm /7777чтобы увидеть, findделает это ваш или нет.
0xC0000022L

Ответы:

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).

0xC0000022L
источник
8

С помощью следующей команды вы можете перечислить все двоичные файлы, имеющие разрешение SUID. -perm -u=sФлаг findинструмент делает трюк:

find / -perm -u=s -type f 2>/dev/null
Boschko
источник