
init.d スクリプトを編集中です。 init.dスクリプトはユーティリティスクリプトを実行してからプロセスを実行します。 bashスクリプトで特定のユーザーとグループで基本プロセスを開始するにはどうすればよいですか?
答え1
最も簡単な方法は、ユーザーのシェルを介してコマンドを実行するオプションを持つ su(1) コマンドを使用することです。たとえば、次のようになります。
su foo -c ls
ユーザーに切り替えます。金持ちそしてlsコマンドを実行してください。使用するユーザーに有効なシェルがない場合(つまり、/bin/falseや/sbin/nologinなどの/etc/shellsにはない)、コマンドラインでもシェルを指定する必要があります。出力例:
# 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
答え2
start-stop-daemon
システムで利用可能な場合は、それを使用してオプションを確認する必要があります(特にこの-u
場合-g
)。
su
(そうでなければ、およびを組み合わせて使用できますsg
。)
修正する:以下はスクリプトから取得した例/etc/init.d/mpd
(使用済み)です。start-stop-daemon
スタートコマンド:
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
以下の内容はすべて
--
プログラム自体の主張です/usr/bin/mpd
。 (デーモンプロセスはstart-stop-daemonスクリプトの責任であるため、mpd
心配しないでください--nodaemon
。)停止コマンド:
echo "Stopping Music Player Daemon" start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
権限を直接削除しない場合は、コマンドにオプションを追加するmpd
必要があります。-u mpd
-g mpd
start-stop-daemon