Bir init.d betiğini düzenliyorum. İnit.d komut dosyası, daha sonra bir işlemi çalıştıran bir yardımcı program komut dosyası çalıştırır. Her iki bash komut dosyasından, ana işlemi belirli bir kullanıcı ve grup olarak başlatmasını nasıl sağlarım?
Bir init.d betiğini düzenliyorum. İnit.d komut dosyası, daha sonra bir işlemi çalıştıran bir yardımcı program komut dosyası çalıştırır. Her iki bash komut dosyasından, ana işlemi belirli bir kullanıcı ve grup olarak başlatmasını nasıl sağlarım?
Yanıtlar:
En basit yol su (1) komutunu kullanmaktır, kullanıcının kabuğu üzerinden bir komut çalıştırmanıza izin veren bir seçeneğe sahiptir, örneğin:
su foo -c ls
Bu kullanıcı foo'ya geçer ve ls komutunu çalıştırır. Kullanmak istediğiniz kullanıcının geçerli bir kabuğu yoksa (yani / bin / false veya / sbin / nologin gibi / etc / shell'lerde değil) komut satırında da bir kabuk belirtmeniz gerekir. Çıktı ile örnek:
# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &ben eğer su www-datatüm vars ve çalıştırmak set ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &o cezayı çalışır. Bunu nasıl çözerim?
subir kabuk komutu olan tek bir argüman alır. Yazmanız su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'ve bunun MONOSERVERve WEBAPPSana kabuk tarafından dışa aktarıldığından emin olmanız gerekir . (Not: su … -c "$MONOSERVER …"değişkenlerden herhangi biri kabuk özel karakterleri içeriyorsa bu başarısız olur.) Ve böylestart-stop-daemon özel bir arka plan başlatıcısı varsa bunu kullanın.
Eğer start-stop-daemonsisteminizde geçerli muhtemelen kullanmak ve seçenekleri (özellikle de bakabilirsiniz olmalıdır -uve -gbu durumda).
(Aksi takdirde, suve öğelerinin birleşimini kullanabilirsiniz sg.)
Güncelleme: İşte bazı /etc/init.d/mpdkomut dosyalarından alınan bir örnek (kullanan start-stop-daemon):
Başlat komutu:
echo "Starting Music Player Daemon"
start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \
--pidfile /var/run/mpd.pid --make-pidfile \
-- --no-daemon /etc/mpd.conf 2>/dev/null
Takip eden her şey programın kendisi --için bir argüman /usr/bin/mpd. (Daemonization prosedürü start-stop-daemon betiği tarafından halledilir, bu yüzden mpdonunla ilgilenmemesi istenir --nodaemon.)
Durdurma komutu:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
Eğer mpdtek başına ayrıcalıkları bırakarak değildi, bir (örneğin) eklemek gerekir -u mpd, -g mpdseçenekler start-stop-daemonkomuta.
start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid
Usage: su [options] [LOGIN]vesu: unrecognized option '--debug'