Setelah melihat semua saran di sini, saya menemukan beberapa hal yang saya harap akan bermanfaat bagi orang lain di posisi saya:
-
hop benar untuk mengarahkan saya kembali ke
/etc/init.d/functions
:daemon
fungsi sudah memungkinkan Anda menyetel pengguna alternatif:daemon --user=my_user my_cmd &>/dev/null &
Ini diimplementasikan dengan membungkus pemanggilan proses dengan
runuser
-lebih lanjut tentang ini nanti. -
Jonathan Leffler benar:ada setuid di Python:
import os os.setuid(501) # UID of my_user is 501
Namun, saya masih berpikir Anda tidak dapat menyetel dari dalam JVM.
-
Baik
su
maupunrunuser
tangani dengan baik kasus di mana Anda meminta untuk menjalankan perintah sebagai pengguna yang sudah Anda miliki. Misalnya:[[email protected]_host]$ id uid=500(my_user) gid=500(my_user) groups=500(my_user) [[email protected]_host]$ su my_user -c "id" Password: # don't want to be prompted! uid=500(my_user) gid=500(my_user) groups=500(my_user)
Untuk mengatasi perilaku su
itu dan runuser
, saya telah mengubah skrip init saya menjadi sesuatu seperti:
if [[ "$USER" == "my_user" ]]
then
daemon my_cmd &>/dev/null &
else
daemon --user=my_user my_cmd &>/dev/null &
fi
Terima kasih semua atas bantuan Anda!
Di Debian kami menggunakan start-stop-daemon
utilitas, yang menangani file pid, mengubah pengguna, menempatkan daemon ke latar belakang, dan banyak lagi.
Saya tidak familiar dengan RedHat, tapi daemon
utilitas yang sudah Anda gunakan (yang didefinisikan dalam /etc/init.d/functions
, btw.) disebutkan di mana-mana sama dengan start-stop-daemon
, jadi bisa juga mengubah uid program Anda, atau cara Anda melakukannya sudah benar.
Jika Anda melihat-lihat jaring, ada beberapa pembungkus siap pakai yang bisa Anda gunakan. Beberapa bahkan mungkin sudah dikemas dalam RedHat. Lihat daemonize
, misalnya.