%20%D0%B2%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B5%20sudoer%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82.png)
Я установил lighttpd с fast-cgi на raspberry pi. При запуске скрипта python, требующего привилегий root, я получаю следующую ошибку:
RuntimeError: Нет доступа к /dev/mem. Попробуйте запустить как root! Traceback (последний вызов был последним): Файл "/var/www/index.py", строка 134, в GPIO.setup(17, GPIO.OUT);#enable A RuntimeError: Нет доступа к /dev/mem. Попробуйте запустить как root!
Я добавил www-data как sudoer с помощью visudo и "sudo usermod -a -G sudo www-data", но это не сработало. Как мне дать lighttpd root привилегии? Безопасность НЕ важна, так как это личный проект.
решение1
lighttpd не использует sudo. Поэтому добавление www-data в группу sudoers не помогает.
Вам необходимо изменить веб-пользователя в вашем конфигурационном файле с www-data на root:
server.username = "root"
При необходимости вы можете покинуть группу www-data, но при желании можете изменить ее на root.
Что вы могли бы сделать вместо этого, так это использовать sudo как www-data из вашего скрипта Python. Убедитесь, что вы установили NOPASSWD.
В любом случае, запуск веб-сервера в качестве root
(или с возможностью s
переключения на любой u
сервер для любой команды) является очень плохой практикой, поскольку любая уязвимость в веб-сервере или любом веб-приложении, которое он обслуживает, означает, что вся система может быть полностью скомпрометирована.
Здесь, скорее всего, вы захотите, чтобы любая операция, которую необходимо выполнить, /dev/mem
выполнялась специальной утилитой с правами setuid root (или запускаемой через sudo
), или отдельной службой, вызываемой вашим веб-сервером.