ここにあるすべての提案を見た後、私の立場にある他の人に役立つと思われるいくつかのことを発見しました:
<オール>
/etc/init.d/functions
に戻るように指示するホップは正しい :daemon
機能ではすでに代替ユーザーを設定できます:
daemon --user=my_user my_cmd &>/dev/null &
これは、プロセス呼び出しを runuser
でラップすることによって実装されます -これについては後で詳しく説明します。
Jonathan Leffler は正しい:Python には setuid があります:
import os
os.setuid(501) # UID of my_user is 501
ただし、JVM 内から setuid できるとはまだ思えません。
su
でもありません runuser
でもありません すでに使用しているユーザーとしてコマンドを実行するように要求する場合を適切に処理します。例:
[[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)
su
の動作を回避するには と runuser
、init スクリプトを次のように変更しました:
if [[ "$USER" == "my_user" ]]
then
daemon my_cmd &>/dev/null &
else
daemon --user=my_user my_cmd &>/dev/null &
fi
助けてくれてありがとう!
Debian では start-stop-daemon
を使用します pid ファイルの処理、ユーザーの変更、デーモンのバックグラウンド化などを行うユーティリティです。
RedHat には詳しくありませんが、daemon
すでに使用しているユーティリティ (/etc/init.d/functions
で定義されています) 、ところで) start-stop-daemon
と同等のものとしてどこでも言及されています であるため、プログラムの uid も変更される可能性があるか、またはその方法がすでに正しいものになっている可能性があります。
ネットを見回すと、使用できる既製のラッパーがいくつかあります。すでに RedHat にパッケージ化されているものもあります。 daemonize
を見てください 、たとえば。