Привет У меня есть скрипт python, который изменяет файл конфигурации приложения. Чтобы применить это, мне нужно перезапустить приложение. Для этого я вызываю файл init.d. Но я должен быть root, когда я делаю это действие, иначе приложение не сможет привязать ее к порту. Также я не хочу выполнять все мои скрипты python с привилегиями root. Как выполнить перезапуск с правами root, а затем удалить их.привилегии изменения python для перезапуска внешнего приложения
Я установил разрешение пользователя в начале с:
if __name__ == "__main__":
uid = pwd.getpwnam('ubuntu')[2]
os.setuid(uid)
app.run(host='0.0.0.0', port=5001, debug=True)
и в конце моего сценария мне нужно выполнить:
commands.getoutput('/etc/init.d/webapplication restart')
WebApplication связывается на порту 80.
Если я выполнил свой сценарий с этой конфигурацией, веб-приложение не может начать и вернуть сообщение, «невозможно связать сокет на 80».
Любая идея? иметь чистое решение для выполнения только одной внешней команды с правами root на сервере Debian под сценарии python?
Thansk заблаговременно.
P.S: Я попытался использовать тот же метод, что и в моей основной функции, и я заменил пользователя «ubuntu» на «root», но он не работает.
Пользователь, который хочет выполнить ваш файл, находится в списке аудиторов? Если ваш пользователь находится в списке sudoers, вы можете изменить ситуацию. Но вам нужны привилегии root для изменения/изменения служб Init. Вы попробовали добавить своего пользователя в корневую группу? – ManuParra
related: [Есть ли способ для процессов без полномочий root привязываться к «привилегированным» портам (<1024) в Linux?] (Http://stackoverflow.com/q/413807/4279) – jfs