Возможности для скрипта в Linux

8

Если я хочу установить функцию ( capabilities(7)), например CAP_NET_BIND_SERVICE, для исполняемого файла, и этот файл является сценарием , нужно ли мне устанавливать функцию ( setcap(8)) в интерпретаторе, запускающем этот сценарий, или достаточно установить его в файле сценария? сам?

Примечание: вопрос касается, в частности, Scientific Linux 6.1, но я думаю, что на него можно дать общий ответ.

0xC0000022L
источник

Ответы:

8

Настройка возможностей сценария не будет эффективной. Это похоже на ситуацию, когда не работает setuidбит на скрипте. Как и в последнем случае, это реализация того, как execveобрабатывает shebang, и обоснование безопасности, стоящее за ним (подробности см .: Разрешить setuid для сценариев оболочки ).

Я думаю, у вас есть эти варианты

  1. установить возможности самого интерпретатора (на самом деле это скорее копия)

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

    • убедитесь, что никто не может ни изменить, ни удалить / заменить скрипт
    • chrootТем не менее, делая это, можно было бы не использовать такую ​​обертку

В обоих случаях вы должны убедиться, что установленные возможности выживут execve, установив inheritableфлаг. Вы также можете использовать pam_capраспределенный с libcapобычно, чтобы фактически активировать желаемые возможности по конфигурации только для выбранных пользователей.

И вообще вы хотите убедиться, что никто не сможет изменить поведение вашего переводчика, например, изменив среду. PYTHON_PATHили что-то подобное.

Мирослав Кошкар
источник