На початку: дозволити звичайному користувачеві зупинятись і запускати мою власну службу


16

У мене запуск програми для веб-сервера починається з завантаження за допомогою запуску. Це початковий сценарій:

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

Це працює бездоганно на сервері Ubuntu 10.04 LTS, і я дуже радий цьому.

Однак у мене є сценарій оболонки розгортання, який реєструється у використанні SSH як mainuser(це не sudoer), а потім оновить робочий каталог до останньої версії розгортання.

Проблема тут полягає в тому, що службу потрібно перезапустити, щоб додатки завантажували нові вихідні файли. Однак mainuserотримує ...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

... при спробі зупинити це. Я повинен бігти sudo stop webapp, але цей користувач не може цього зробити, оскільки він не судоер. З міркувань безпеки я також не хочу, щоб він був судором, плюс я не хочу вставляти пароль судо.

Отже, як я можу дозволити mainuserбігати stop webappі start webapp?


1
Які проблеми безпеки вас турбують, додавши користувача в судори? Ви можете написати правило, яке дозволяє користувачеві лише певну команду, і не більше того, також ви можете включити опцію nopasswd, щоб уникнути запиту пароля. Що стосується конкретної помилки, яку ви отримуєте, це тому, що старт / зупинка знаходяться в / sbin, що зазвичай не є частиною звичайного шляху користувачів. Таким чином, ви можете зробити "/ sbin / stop" або додати sbin до шляху. Це може працювати до тих пір, поки в сценарії запуску / зупинки немає інших елементів, для яких потрібен root.
Дерек Прессналл

@DerekPressnall, дякую, але коли я бігаю, /sbin/stop webappотримую stop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory. Як я дозволив mainuserби виконати лише цю команду?
Том

Помилка внаслідок цього користувача не має прав адміністратора.
Том

Відповіді:


31

sudo дуже настроюється, ви можете дозволити цьому користувачеві виконувати обмежений набір команд, не вимагаючи введення пароля. Наступний рядок /etc/sudoersмає робити те, що ви хочете:

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp

1
Відмінно, велике спасибі Ти справді все це навчився man sudoers? Мені здалося, що це досить важко розібратися.
Том

1
Ні, я робив це раніше. Розшифрувати це не найпростіший
аркуш

Не вдається з Unable to connect to system bus. Докладніше: Дозволити групі, яка не перебуває в
судо,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.