Установка права выполнения на целый каталог - является этим хорошая или плохая идея?

Я нашел подобный вопрос на StackOverflow и OCR Asprise, SDK, один из связанных коммерческих продуктов, имеет версию Linux.

3
11.11.2011, 11:51
3 ответа

Нет никакой прямой угрозы безопасности с созданием исполняемого файла файла, если это не 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
2
27.01.2020, 21:09
  • 1
    я нашел другие ответы отлично хорошо также, но этот - наиболее разработанный :) –  L.R. 16.11.2011, 11:19

Это не симпатично или изящно, но добавление исполняемого бита в файл, который не является никаким видом исполняемого файла, который знает ОС, что сделать с, не вредно - если Вы попробуете, то Вы, вероятно, просто доберетесь cannot execute binary file

Один потенциальный риск был бы текстовыми файлами, если так или иначе первые несколько слов оказываются допустимыми командами в оболочке, но это трудно предсказать (если вряд ли).

Я лично допустил бы ошибку на стороне осторожности и сохранил бы все неисполняемым файлом, затем записать быстрый сценарий для сортировки всех файлов с file управляйте и зеркально отразите исполняемый бит, если он распознан как сценарий или двоичный файл ELF - точный код, оставленный как осуществление читателю.

6
27.01.2020, 21:09
  • 1
    Это - хороший прием с file команда. Я попробую это и сообщу, как это заканчивалось. –  L.R. 11.11.2011, 14:35
  • 2
    , можно также играть его умный и сказать find исключить что-либо с 'очевидным' расширением от поиска - .jpg, .png, .txt на и так далее не должны даже смотреть. В зависимости от того, как большой дерево Вы перерываете, который мог бы значительно оптимизировать поиск... –  Shadur 11.11.2011, 16:12

Простой ответ - да, это может изложить угрозы безопасности - но они совершенно зависят от определенных требований управления доступом для файлов и включенных каталогов.

Ваш лучший выбор состоит в том, чтобы спросить владельца приложений/developer/etc, существуют ли какие-либо файлы или каталоги, которые требуют, чтобы полномочия были осуществлены, а также существует ли любой, который должен быть установлен исполняемый файл. Это должен быть их вызов, не Ваш, таким образом, я постарался бы не брать на себя ответственность, если Вы не знаете требования к приложению!

Может случиться так, что числа являются небольшими, таким образом, это становится простым процессом. YMMV

3
27.01.2020, 21:09
  • 1
    Ваш лучший выбор состоит в том, чтобы спросить владельца приложений, я сделал это, и мне сказали, что я должен установить исполняемый бит для всех файлов. Я не знаю, знают ли они достаточно об этом :) Вот почему я спрашиваю более опытных людей здесь. –  L.R. 11.11.2011, 14:34
  • 2
    Проблема состоит в том, что мы можем только сделать предположения, поскольку мы не знаем приложение. Одна опция состоит в том, чтобы сохранить все недолжностным лицом и видеть, какие повреждения - я знаю, не практичный, но я использовал подобный, чтобы помочь убедить владельцев приложений понять то, что делает их приложение (например, брандмауэринг Tivoli, пока их парни не могли выяснить, какие порты им был нужен :-) –  Rory Alsop 11.11.2011, 14:38

Теги

Похожие вопросы