別のユーザー/グループでプロセスを開始する(init.dスクリプトから)

別のユーザー/グループでプロセスを開始する(init.dスクリプトから)

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 mpdstart-stop-daemon

関連情報