Проблемы безопасности с модулем Python PAM? - PullRequest
14 голосов
/ 20 сентября 2009

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

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

1 Ответ

17 голосов
/ 20 сентября 2009

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

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

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

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

...