Все инструкции, которые я нахожу в Интернете, гласят:
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?
find
(GNU определит, чтобы быть точным) будет принимать каталоги и файлы одинаково. Он / она просто пропускает точку-perm
переключения. Чтение руководства поможет.find $FILE -perm /7777
чтобы увидеть,find
делает это ваш или нет.Ответы:
Если вы хотите проверить любой из битов, используйте
/
. Т.е. для вашего случая использования:и:
или в сочетании:
Вы можете использовать как папки, так и файлы в качестве аргумента для GNU
find
.Другой, более удобный для чтения, подход IMO - использование мнемонических ярлыков. То есть:
Пусть покупатель будет бдителен
Имейте в виду, что варианты
find
бывают разные. Они также могут вести себя по-разному. Всегда читайте дружественное руководство (RTFM).источник
С помощью следующей команды вы можете перечислить все двоичные файлы, имеющие разрешение SUID.
-perm -u=s
Флагfind
инструмент делает трюк:источник