私は、rootとは異なるユーザーとして単一のコマンドを実行することになっているinitスクリプトを書いています。これは私が現在それをやっている方法です:Sudo -u username command
これは通常、Ubuntu/Debianでは正常に機能しますが、RHELではcommand
として実行されるスクリプトがハングします。
別のユーザーとしてコマンドを実行する別の方法はありますか?
(RHEL/Centos 5.xでは使用できないため、lsb init関数を使用できないことに注意してください。)
RHELシステムでは、/etc/rc.d/init.d/functions
スクリプトは、必要なものに類似したものを提供することを目的としています。 initスクリプトの先頭でソースを取得すると、すべての機能が利用可能になります。
これを支援するために提供される特定の関数は、daemon
です。デーモンのようなプログラムを起動するために使用する場合、簡単な使用法は次のとおりです。
daemon --user=username command
それがあなたが必要とするものに対して重すぎる場合、runuser
があります(完全な情報についてはman runuser
を参照してください;一部のバージョンはユーザー名の前に-u
が必要かもしれません):
/sbin/runuser username -s /bin/bash -c "command(s) to run as user username"
Sudoの代わりに、試してください
su - username command
私の経験では、SudoはRHELシステムでは常に使用できるとは限りませんが、suは、suがcoreutilsパッケージの一部であるのに対し、SudoはSudoパッケージ内。
Start-stop-daemonがある場合
start-stop-daemon --start --quiet -u username -g usergroup --exec command ...
Systemdスタイルの初期化スクリプトの場合、それは本当に簡単です。 [サービス]セクションにUser =を追加するだけです。
CentOS 7でqbittorrent-noxに使用するinitスクリプトを次に示します。
[Unit]
Description=qbittorrent torrent server
[Service]
User=<username>
ExecStart=/usr/bin/qbittorrent-nox
Restart=on-abort
[Install]
WantedBy=multi-user.target
私は通常、あなたがそれをしているようにそれを行います(つまり、Sudo -u usernameコマンド)。しかし、別のユーザーの権限でデーモンを実行する「djb」方法もあります。参照: http://thedjbway.b0llix.net/daemontools/uidgid.html