Как найти любой файл, который является исполняемым файлом или библиотекой
Допустим, кто-то предоставляет вам tarball, говоря, что это исходный код и ничего больше. Вы хотите убедиться, что это правда, и что никакие загруженные вирусом исполняемые файлы или библиотеки не спрятаны в каталоге. Как использовать команду find для этого?
Благодарю.
2 ответа
Вы можете распаковать файл в безопасное место (например, смонтированную файловую систему).noexec
) и проверьте получившиеся каталоги на наличие двоичных файлов. file
Команда может сказать вам, является ли файл текстовым, исходным кодом, двоичным и т. д.
[root@xt ~]# file ./packages/Digest-MD5-2.33/t/badfile.t
./packages/Digest-MD5-2.33/t/badfile.t: ASCII text
[root@xt ~]# file ./packages/Digest-MD5-2.33/MD5.pm
./packages/Digest-MD5-2.33/MD5.pm: Perl5 module source text
[root@xt ~]# file ./packages/rrdtool-1.0.50/src/gdpng.o
./packages/rrdtool-1.0.50/src/gdpng.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
Что-то вроде следующего, где вы будете фильтровать исполняемые файлы ELF:
find . -type f -exec file {} + | grep ELF
И вывод будет:
[root@xt ~]# find . -type f -exec file {} + | grep ELF
./packages/rrdtool-1.0.50/gd1.3/gdfontl.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
./packages/rrdtool-1.0.50/gd1.3/gdfontmb.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
./packages/rrdtool-1.0.50/gd1.3/gdlucidan10l2.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
./packages/rrdtool-1.0.50/gd1.3/gdlucidab14.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
./packages/rrdtool-1.0.50/gd1.3/gdlucidan10.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
Файл, помеченный как исполняемый, не обязательно должен быть исполняемым или загружаемым файлом или объектом.
Вот что я использую:
find ./ -type f -name "*" -not -name "*.o" -exec sh -c '
case "$(head -n 1 "$1")" in
?ELF*) exit 0;;
MZ*) exit 0;;
#!*/ocamlrun*)exit0;;
esac
exit 1
' sh {} \; -print