Mam aplikację webserver, która uruchamia się przy starcie przy użyciu upstart. To jest skrypt wstępny:
# 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
Działa to bezbłędnie na serwerze Ubuntu 10.04 LTS i jestem z tego bardzo zadowolony.
Mam jednak skrypt powłoki wdrażania, który loguje się przy użyciu SSH as mainuser
(nie jest to sudoer), a następnie zaktualizuje katalog roboczy do najnowszej wersji wdrożenia.
Problem polega na tym, że usługa musi zostać zrestartowana, aby aplikacje ładowały nowe pliki źródłowe. Jednak mainuser
dostaje ...
mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found
... kiedy próbujesz to zatrzymać. Muszę biec sudo stop webapp
, ale ten użytkownik nie może tego zrobić, ponieważ nie jest sudoerem. Ze względów bezpieczeństwa nie chcę, aby był sudoer, a ponadto nie chcę wstawiać hasła sudo.
Jak mogę pozwolić i mainuser
uruchomić ?stop webapp
start webapp
źródło
/sbin/stop webapp
, dostajęstop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
. Jak pozwoliłbymmainuser
wykonać tylko to polecenie?Odpowiedzi:
sudo jest bardzo konfigurowalny, możesz zezwolić temu użytkownikowi na wykonywanie ograniczonego zestawu poleceń bez pytania o hasło. Poniższy wiersz
/etc/sudoers
powinien zrobić, co chcesz:źródło
man sudoers
? Trudno mi było przeanalizować.Unable to connect to system bus
. Więcej: Zezwól grupie spoza sudo na kontrolowanie zadania Upstart