Upstart: normal bir kullanıcının özel hizmetimi durdurup başlatmasına izin verme


16

Web sunucusu uygulamamı upstart kullanarak önyüklemeye başladım. Bu uptart betiğidir:

# 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

Bu, Ubuntu sunucusu 10.04 LTS'de kusursuz bir şekilde çalışıyor ve bu konuda çok mutluyum.

Ancak, SSH mainuser(bu bir sudoer değil) kullanarak oturum açan ve daha sonra çalışma dizini en son dağıtım sürümüne güncelleştirir bir dağıtım kabuk komut dosyası var .

Buradaki sorun, uygulamaların yeni kaynak dosyalarını yükleyebilmesi için hizmetin yeniden başlatılması gerektiğidir. Ancak, mainuseralır ...

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

... durdurmaya çalışırken. Ben koşmak zorundayım sudo stop webapp, ama bu kullanıcı bir sudoer olmadığı için bunu yapamaz. Güvenlik nedeniyle ben de onun sudoer olmasını istemiyorum, artı sudo şifresini girmek istemiyorum.

Peki mainuserkoşmaya nasıl izin veririm stop webappve start webapp?


1
Kullanıcıyı sudo kullanıcılarına ekleyerek hangi güvenlik sorunlarından endişe ediyorsunuz? Kullanıcının yalnızca belirli bir komutu ve daha fazlasını yapmasına izin vermeyen bir kural yazabilirsiniz, ayrıca parola istemini uzak tutmak için bir nopasswd seçeneği de ekleyebilirsiniz. Aldığınız belirli hataya gelince, bunun nedeni start / stop öğesinin / sbin'de olması ve genellikle normal kullanıcıların yolunun bir parçası değildir. Böylece "/ sbin / stop" yapabilir veya yola sbin ekleyebilirsiniz. Bu, başlatma / durdurma komut dosyasında root gerektiren başka bir öğe olmadığı sürece işe yarayabilir.
Derek Pressnall

@DerekPressnall, teşekkürler, ama koştuğumda /sbin/stop webappalıyorum stop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory. mainuserYalnızca bu komutu yürütmeye nasıl izin verebilirim ?
Tom

Hata, bu kullanıcının yönetici haklarına sahip olmamasından kaynaklanmaktadır.
Tom

Yanıtlar:


31

sudo çok yapılandırılabilir, bu kullanıcının parola sormadan sınırlı sayıda komut yürütmesine izin verebilirsiniz. Aşağıdaki satır /etc/sudoersistediğinizi yapmalıdır:

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

1
Mükemmel, çok teşekkürler. Bunların hepsini gerçekten öğrendiniz man sudoersmi? Ayrıştırmayı oldukça zor buldum.
Tom

1
Hayır, bunu daha önce yaptım. Bu deşifre etmek en kolay
adam

İle başarısız olur Unable to connect to system bus. Daha fazla:
Sudo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.