通常のユーザーが独自のサーバープロセスを設定できるように、フレームワーク/ライブラリ/環境を探しています。これらのプロセスは、他のユーザープロセスと同様に彼のuidで実行する必要があります。
ただし、どのプロセスを開始するか、それらが取得する引数などの定義は、追加の特権を持たない通常のユーザーが指定する必要があります。これは、ユーザーが実際にログインしなくても発生することが重要です。理想的には、SYSV initで機能するはずですが、systemdベースのものでも問題ありません。
例/ユースケース:
これらはすべて共通しており、同じバイナリの複数のインスタンスを(異なるパラメータで)開始したい場合や、これらのパラメータを定期的に変更する必要がある場合があります。ただし、ユーザーはroot権限を必要とせずにそれらすべてを微調整できるはずです。
Linuxでこれをどのように実装できるかについての提案/ポインタはありますか?
編集:最小要件はユーザープロセスを開始することだけですが、明らかにより高度な制御メカニズムが必要になります。たとえば、サービスが実行されているかどうかをクエリし、インスタンスを停止し、再起動し、リロードする簡単な方法があるはずです...
cron
はこれに@reboot
プレフィックスを付けます(Vixie、およびおそらく他のフレーバー、man 5 crontab
を確認してください)。ユーザーはcrontab
を使用して独自のcrontabファイルを作成/編集し、
@reboot /some/path/command -flags --moreflags
そのユーザーとして、起動時にそのコマンドを実行します。
これは約10行のシェルスクリプトになりますが、なぜフレームワーク/ライブラリ/環境が必要なのですか?
簡単な例として、sysV init ...を使用します。
#!/bin/bash
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
DAEMON_USERS=`cat /etc/daemon_users`
CMD="$1"
for DUSER in $DAEMON_USERS ; do
DSCRIPTS=`ls /home/${DUSER}/init/`
for DFILE in DSCRIPTS ; do
if [ -x "/home/${DUSER}/init/${DFILE}" -a ! -d "/home/${DUSER}/init/${DFILE}" ]
then
su -c $DUSER /home/${DUSER}/init/${DFILE} $CMD
fi
done
done
本当にルートとしての実行を許可したい場合は、「su -c $ DUSER」を削除してsudoerに追加し、再起動せずに再起動/追加できるようにします。
だから...ちょうどstartあなたがそれを実行したいユーザーとしてアプリケーションをおよびrootを必要とするものにアクセスしようとしないでください(特権ポート、rootのみが読み取ることができるファイルなど)?
これらのデーモンを自動的に起動し、SysV initプロセスを介して制御する場合は、パラメーターを指定する(または、非特権ユーザーが書き込みアクセス権を持つファイルからデーモンを読み取る)各デーモンのinitスクリプトを作成する必要があります。 su -c
などを使用してデーモンを起動しますが、[〜#〜]注意[〜#〜] :これを行うと、[〜#〜]深刻な[〜#〜]セキュリティへの影響(慎重に作成された「パラメータ」 fileを使用すると、ユーザーはinitシーケンス(通常はroot)を実行しているユーザーとして任意のコードを実行できます。
DerfKはcron@reboot
オプションについて言及しましたが、これは(セキュリティリスクが少ない)より良い選択かもしれませんが、管理者はこれらのプログラムがcronによって開始されることに注意する必要があります...