Saya sedang mengedit skrip init.d. Skrip init.d menjalankan skrip utilitas yang kemudian menjalankan proses. Dari kedua skrip bash, bagaimana saya membuatnya meluncurkan proses utama sebagai pengguna dan grup tertentu?
Saya sedang mengedit skrip init.d. Skrip init.d menjalankan skrip utilitas yang kemudian menjalankan proses. Dari kedua skrip bash, bagaimana saya membuatnya meluncurkan proses utama sebagai pengguna dan grup tertentu?
Jawaban:
Cara paling sederhana adalah dengan menggunakan perintah su (1), ia memiliki opsi yang memungkinkan Anda untuk menjalankan perintah melalui shell pengguna, contoh:
su foo -c ls
Ini akan beralih ke foo pengguna dan menjalankan perintah ls. Jika pengguna yang ingin Anda gunakan tidak memiliki shell yang valid (yaitu tidak ada di / etc / shells, seperti / bin / false atau / sbin / nologin) Anda juga harus menentukan shell di baris perintah. Contoh dengan output:
# 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 &jika saya su www-datamengatur semua vars dan menjalankannya ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &berfungsi dengan baik. Bagaimana saya mengatasi ini?
sumengambil argumen tunggal, yang merupakan perintah shell. Anda perlu menulis su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"', dan memastikan bahwa MONOSERVERdan WEBAPPSdiekspor oleh shell induk. (Catatan: jangan lakukan su … -c "$MONOSERVER …"karena ini akan gagal jika salah satu variabel berisi karakter khusus shell.) Dan jika Anda memiliki peluncur daemon khusus sepertistart-stop-daemon , gunakan.
Jika start-stop-daemontersedia di sistem Anda, Anda mungkin harus menggunakannya dan melihat pilihannya (terutama -udan -gdalam hal ini).
(Jika tidak, Anda dapat menggunakan kombinasi dari sudan sg.)
Pembaruan: Berikut adalah contoh yang diambil dari beberapa /etc/init.d/mpdskrip (yang menggunakan start-stop-daemon):
Mulai perintah:
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
Segala sesuatu yang mengikuti --adalah argumen untuk /usr/bin/mpdprogram itu sendiri. (Prosedur daemonisasi ditangani oleh skrip start-stop-daemon sehingga mpddiminta untuk tidak mempedulikannya --nodaemon.)
Hentikan perintah:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
Jika mpdtidak menjatuhkan hak istimewa dengan sendirinya, orang perlu menambahkan (misalnya) -u mpd, -g mpdopsi ke start-stop-daemonperintah.
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]dansu: unrecognized option '--debug'