
У меня есть программа Java, которую я использую для автоматизации процесса создания настроек VPN для клиентов. Программа вызывает несколько скриптов bash, создает и копирует файлы. Мне нужно запустить ее под пользователем root, потому что вся конфигурация VPN находится в /etc/openvpn. Для этого каталога мне нужны права root. На той же машине у меня есть сервер приложений Glassfish, и он будет вызывать указанную программу Java. Glassfish запускается под пользователем без прав root.
Какой самый лучший и безопасный способ запустить программу от имени пользователя root, конечно, без ввода пароля, если я запускаю ее через sudo?
решение1
Самым безопасным вариантом было бы выяснить, какой группе принадлежит OpenVPN, и добавить непривилегированного пользователя с доступом к ней -рекомендуемый способ — создать пользователя openvpnи предоставьте ему привилегии на использование openvpn с помощью sudo.
Добавление пользователя, под которым вы запускаете эту программу, в группу (вероятно, только с правами на чтение), чтобы предоставить ему доступ к OpenVPN, и предоставление ему необходимых привилегий sudo (для запуска OpenVPN — настройки идентичны настройкам пользователя OpenVPN) должно безопасно решить проблему.
Использование root — ленивый способ ;)
решение2
Я обнаружил, что для запуска команды как sudo без ввода пароля есть два варианта:
- echo ПАРОЛЬ | sudo -S КОМАНДА
добавление следующей строки в /etc/sudoers
имя пользователя ALL=(ALL) NOPASSWD: КОМАНДА
Обратите внимание, что эта строка должна быть после всех определений групп. Вы можете проверить, какие у вас привилегии sudo, используя sudo -l
. Для этого случая это дает:
(ALL) ALL
(ALL) NOPASSWD: COMMAND
Это означает, что для всех команд, кроме COMMAND, потребуется пароль. Если бы мы поставили username ALL=(ALL) NOPASSWD: COMMAND
перед определениями групп, то sudo -l
получили бы:
(ALL) NOPASSWD: COMMAND
(ALL) ALL
Для этого все равно потребуется пароль для КОМАНДЫ, поскольку (ALL) ALL
он указан после строки NOPASSWD.