Ich habe meine Webserver-Anwendung beim Booten mit upstart gestartet. Dies ist das Upstart-Skript:
# 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
Dies funktioniert einwandfrei auf Ubuntu Server 10.04 LTS und ich bin sehr glücklich darüber.
Ich habe jedoch ein Deployment-Shell-Skript, das sich mit SSH als anmeldet mainuser
(dies ist kein Sudoer) und dann das Arbeitsverzeichnis auf die neueste Deployment-Version aktualisiert.
Das Problem hierbei ist, dass der Dienst neu gestartet werden muss, damit die Anwendungen die neuen Quelldateien laden. Allerdings mainuser
bekommt ein ...
mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found
... beim Versuch, es zu stoppen. Ich muss ausführen sudo stop webapp
, aber dieser Benutzer kann dies nicht, da er kein Sudoer ist. Aus Sicherheitsgründen möchte ich, dass er auch kein Sudoer ist, und ich möchte das Sudo-Passwort nicht einfügen.
Also, wie erlaube ich mainuser
zu rennen stop webapp
und start webapp
?
/sbin/stop webapp
bekomme ichstop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
. Wie würde ich erlaubenmainuser
, nur diesen Befehl auszuführen?Antworten:
sudo ist sehr konfigurierbar. Sie können diesem Benutzer erlauben, einen begrenzten Satz von Befehlen auszuführen, ohne nach einem Passwort zu fragen. Die folgende Zeile in
/etc/sudoers
sollte tun, was Sie wollen:quelle
man sudoers
? Ich fand es ziemlich schwierig zu analysieren.Unable to connect to system bus
. Mehr: Zulassen, dass Nicht-Sudo-Gruppen den Upstart-Job kontrollieren