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-data
tüm vars ve çalıştırmak set ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
o cezayı çalışır. Bunu nasıl çözerim?
su
bir 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 MONOSERVER
ve WEBAPPS
ana 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-daemon
sisteminizde geçerli muhtemelen kullanmak ve seçenekleri (özellikle de bakabilirsiniz olmalıdır -u
ve -g
bu durumda).
(Aksi takdirde, su
ve öğelerinin birleşimini kullanabilirsiniz sg
.)
Güncelleme: İşte bazı /etc/init.d/mpd
komut 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 mpd
onunla 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 mpd
tek başına ayrıcalıkları bırakarak değildi, bir (örneğin) eklemek gerekir -u mpd
, -g mpd
seçenekler start-stop-daemon
komuta.
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'