Я нашел подобный вопрос на StackOverflow и OCR Asprise, SDK, один из связанных коммерческих продуктов, имеет версию Linux.
Нет никакой прямой угрозы безопасности с созданием исполняемого файла файла, если это не setuid или setgid. Конечно, существует косвенный риск, что что-то, Вы ожидаете быть инертными — некоторый файл данных, который Вы обычно открывали бы в приложении — может также быть выполнено непосредственно в Вашей системе с низкими последствиями. Например, если у Вас есть файл под названием README, который на самом деле содержит программу руткита, открытие его в текстовом редакторе безопасно, но Вы лучше не выполнили бы его.
Разумная эвристика для распознавания файлов, которые предназначены, чтобы быть исполняемым файлом, должна посмотреть на их первые несколько байтов и распознать исполняемые подписи. Это - вопрос удобства, а не безопасности, но если Вы готовы сделать весь исполняемый файл файлов так или иначе, это означает, что у Вас нет проблемы безопасности, но беспокойства удобства использования так или иначе. Вот возможная эвристика:
for x in *; do
case $(file - <"$x") in
*executable*) chmod +x -- "$x";;
esac
done
Вот другая эвристика, которая должна отличаться только по угловым случаям ($'\177'
ksh/bash/zsh синтаксис, замените его буквенным символом 0177 = 127 = 0x7f в других оболочках).
for x in *; do
case $(head -c 4 <"$x") in
'#!'*|$'\177'ELF) chmod +x -- "$x";;
esac
done
В обоих случаях просто потому что файл распознан, поскольку исполняемый файл не означает, что можно выполнить его в системе; например, двоичный файл для неправильной архитектуры процессора будет счастливо сделан исполняемым файлом. Вот другой подход, который делает весь исполняемый файл сценариев, но динамично связанные двоичные файлы, только если они для правильной архитектуры и у Вас есть необходимые библиотеки, и промахи статически связали двоичные файлы в целом.
for x in *; do
case $(head -c 2 <"$x") in
'#!') chmod +x -- "$x";;
*) if ldd -- "$x" >/dev/null 2>/dev/null; then chmod +x "$x"; fi;;
esac
done
Это не симпатично или изящно, но добавление исполняемого бита в файл, который не является никаким видом исполняемого файла, который знает ОС, что сделать с, не вредно - если Вы попробуете, то Вы, вероятно, просто доберетесь cannot execute binary file
Один потенциальный риск был бы текстовыми файлами, если так или иначе первые несколько слов оказываются допустимыми командами в оболочке, но это трудно предсказать (если вряд ли).
Я лично допустил бы ошибку на стороне осторожности и сохранил бы все неисполняемым файлом, затем записать быстрый сценарий для сортировки всех файлов с file
управляйте и зеркально отразите исполняемый бит, если он распознан как сценарий или двоичный файл ELF - точный код, оставленный как осуществление читателю.
file
команда. Я попробую это и сообщу, как это заканчивалось.
– L.R.
11.11.2011, 14:35
find
исключить что-либо с 'очевидным' расширением от поиска - .jpg
, .png
, .txt
на и так далее не должны даже смотреть. В зависимости от того, как большой дерево Вы перерываете, который мог бы значительно оптимизировать поиск...
– Shadur
11.11.2011, 16:12
Простой ответ - да, это может изложить угрозы безопасности - но они совершенно зависят от определенных требований управления доступом для файлов и включенных каталогов.
Ваш лучший выбор состоит в том, чтобы спросить владельца приложений/developer/etc, существуют ли какие-либо файлы или каталоги, которые требуют, чтобы полномочия были осуществлены, а также существует ли любой, который должен быть установлен исполняемый файл. Это должен быть их вызов, не Ваш, таким образом, я постарался бы не брать на себя ответственность, если Вы не знаете требования к приложению!
Может случиться так, что числа являются небольшими, таким образом, это становится простым процессом. YMMV