Как правильно запускать команды с более высокими привилегиями через HTTP? - PullRequest
0 голосов
/ 03 июня 2009

У меня есть веб-проект, для которого мне нужно выполнить команду при запросе определенного URL, но эта команда требует привилегий root.

Проект обслуживается процессом Python (Django), и запуск его с привилегиями root не возможен.

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

.

Ответы [ 3 ]

5 голосов
/ 03 июня 2009

Вызовите команду через sudo с опцией NOPASSWD:, которая позволяет вам детально контролировать доступ и дает вам возможность аудита в системном журнале бесплатно. Избегайте использования оболочки и используйте вариант exec, который принимает параметры непосредственно как массив.

4 голосов
/ 03 июня 2009

Использовать setuid: http://en.wikipedia.org/wiki/Setuid

"setuid и setgid (сокращение от установленного идентификатора пользователя при выполнении и установленного идентификатора группы при выполнении соответственно) - это флаги прав доступа Unix, которые позволяют пользователям запускать исполняемый файл с разрешениями владельца или группы исполняемого файла."

... И будь очень, очень осторожен!

1 голос
/ 03 июня 2009

Во что бы то ни стало, избегайте использования setuid и setgid, вы хотите, чтобы у HTTP-сервера было как можно меньше разрешений. Для процесса, который требует привилегий root, используйте сервер http, чтобы создать совершенно новый отдельный процесс и вызвать sudo. Однако вы не должны включать uid или gid HTTP-сервера в sudoers, но какой-то другой пользователь, который является единственным, который может получить доступ к программе, и эта программа является единственным, который может запускаться как root. Затем HTTP-сервер запускает новый процесс, изменяя UID для тупого пользователя, а затем выполняет процесс с sudo в качестве пользователя root.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...