web-dev-qa-db-ja.com

initスクリプトで特定のユーザーとしてコマンドを実行する方法は?

私は、rootとは異なるユーザーとして単一のコマンドを実行することになっているinitスクリプトを書いています。これは私が現在それをやっている方法です:
Sudo -u username command

これは通常、Ubuntu/Debianでは正常に機能しますが、RHELではcommandとして実行されるスクリプトがハングします。
別のユーザーとしてコマンドを実行する別の方法はありますか?
(RHEL/Centos 5.xでは使用できないため、lsb init関数を使用できないことに注意してください。)

33
ddario

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"
24
lagweezle

Sudoの代わりに、試してください

su - username command

私の経験では、SudoはRHELシステムでは常に使用できるとは限りませんが、suは、suがcoreutilsパッケージの一部であるのに対し、SudoはSudoパッケージ内。

12
Jeff N

Start-stop-daemonがある場合

start-stop-daemon --start --quiet -u username -g usergroup --exec command ...
12
crafter

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
12
LOAS

私は通常、あなたがそれをしているようにそれを行います(つまり、Sudo -u usernameコマンド)。しかし、別のユーザーの権限でデーモンを実行する「djb」方法もあります。参照: http://thedjbway.b0llix.net/daemontools/uidgid.html

2
mti2935