Проблемы безопасности с PAM-модулем Python?

Мне интересно писать модуль PAM, который будет использовать популярный механизм аутентификации для входа в систему Unix. Большая часть моего прошлого опыта программирования была в Python, и система, с которой я взаимодействую, уже имеет API Python. Я googled вокруг и нашел pam_python, который позволяет модулям PAM вызывать intrepreter python, поэтому позволяет писать PAM-модули в основном на Python.

Однако я читал, что есть угрозы безопасности, когда пользователь может вызывать код Python, который работает с более высоким уровнем доступа, чем сам пользователь, например скрипты SUID Python. Являются ли эти проблемы применимыми к PAM-модулю Python?

Ответы

Ответ 1

Проблемы безопасности, о которых вы говорите, не являются, по сути, "разрешающими пользователю вызывать код Python", который работает с высокими уровнями доступа, но позволяет пользователю осуществлять любую форму контроля над запуском такого кода - - наиболее очевидно, вводя или изменяя сам код, но, более тонко, также контролируя эту среду процесса (и, следовательно, путь, из которого этот код импортирует модули, например). (Аналогичные проблемы могут быть связаны с C-написанным кодом, если пользователь смог контролировать путь, из которого последний загружает .so, например, хотя ОС может помочь более непосредственно с такой проблемой).

Мне кажется, что pam_python хорошо защищен от таких рисков, поэтому его следует безопасно использовать для ваших целей. Однако обратите внимание, что документы указывают...:

Написание PAM-модулей из Python большой штраф за исполнение и требует установки Python, поэтому он это не лучший вариант для написания модули, которые будут широко использоваться.

Итак, если вы правы, что механизм, который вы поставляете, будет популярным, вы, вероятно, захотите закодировать свой модуль на C, чтобы избежать этих проблем. Однако прототипирование его в Python как доказательство концепции с ограниченным распределением, прежде чем упрочить его в C, является жизнеспособной стратегией.