Список допустимых исполняемых файлов suid/sgid?
Может кто-нибудь сказать мне, где найти список допустимых программ suid/guid на Ubuntu (14.04)?
Примечание. Я могу использовать find для получения списка программ suid/sgid на моем компьютере, но я хочу знать, действительно ли они являются действительными программами; Есть ли список, с которым я могу сравнить их или какие-либо другие средства, чтобы определить, являются ли они действительными?
2 ответа
Одна идея - но нужно будет немного поработать над сценариями --- будь моим гостем;-)
Найти файл suid/sgid; давай называть это
scommand
Проверьте, из какого пакета был установлен:
dpkg -S /full/path/to/scommand
Сравните его разрешение с исходным пакетом deb, сначала загрузив пакет:
apt-get download package
Проверьте, должна ли команда иметь suid, установленный в пакете с
dpkg -c package*deb | grep /full/path/to/scommand
очистить, промыть, повторить.
Пример:
[romano:~/tmp] % ls -l /bin/passwd
ls: cannot access /bin/passwd: No such file or directory
[romano:~/tmp] 2 % ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 47032 Feb 17 2014 /usr/bin/passwd
[romano:~/tmp] % dpkg -S /usr/bin/passwd
passwd: /usr/bin/passwd
[romano:~/tmp] % apt-get download passwd
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main passwd amd64 1:4.1.5.1-1ubuntu9 [755 kB]
Fetched 755 kB in 1s (487 kB/s)
[romano:~/tmp] % dpkg -c passwd*.deb| grep /usr/bin/passwd
-rwsr-xr-x root/root 47032 2014-02-17 03:42 ./usr/bin/passwd
предостережение: может случиться так, что файл не является suid/sgid в пакете.deb и что он изменяется так сценариями установки / постустановки. В этом случае вы должны найти другие способы проверки, возможно, по сравнению с новой установкой.
Кажется, это работает: сначала выполняется поиск apt-cache для каждого пакета, который система может загрузить, затем загружает их все (сжатые в их.deb), а затем перебирает каждый файл с помощью dpkg -c, чтобы получить путь и разрешения для файлы в файлах.deb, вырезая первые три символа и ища бит suid, который должен быть установлен в начале строки, а затем печатает все пути, которые имеют атрибуты suid.
PKG=$(apt-cache search . | cut -f 1 -d ' ');
echo $PKG | xargs apt-get download;
F=(`find *.deb`); for i in ${F[@]};
do dpkg -c $i | cut -c 4- | grep ^s | cut -c 4- | cut -f 2 -d '.' | tee > suid_root;
done
Примечание: для этого требуется много места на диске, и он не очень оптимизирован для скорости или чего-либо еще.