私たちの製品では、daemontoolsを使用してサービスを作成しました。私のサービスの1つは次のようになります
/service/test/run
/service/test/log/run (has multilog command to log into ./main dir)
/service/test/log/main/..
すべてのプロセスとそのディレクトリはrootユーザーが所有しています。今、このように変更するためのセキュリティ要件があります、
1. Service should run in non-root user.
2. Log main directory should be readable only to user and groups.
このために、「log」ディレクトリの下の「run」ファイルを変更する必要があります。また、その下の「main」ディレクトリの権限を変更する必要があります。
'/ service'の下にあるこれらのファイルはすべてtest-1.0-0.rpmによって所有されていることに注意してください。 rpmを更新すると、既存の実行ファイルが上書きされ、次のようなエラーが発生します。
multilog: fatal: unable to lock directory ./main: access denied
実行時に「run」ファイルをオーバーライドするべきではないことを私は知っています。 rpmスクリプトの%postセクションでこれらの手順を実行する予定です。
//Stop service
svc -d /service/test/log
//Moving the main directory
mv /service/test/log/main /service/test/log/main_old
//Updated run file has code to create main with limited permissions.
//Start service
svc -u /service/test/log
一部の記事では、「log/main」の下に「lock」ファイルを再作成することを提案しました。 'main'ディレクトリを移動せずにこれを行う他のよりクリーンな方法はありますか?そうでない場合は、上記の手順を実行しても安全ですか?
_1. Service should run in non-root user.
_
簡単です。サービス定義を「ユーザー」のホームのサービスディレクトリにコピーします。たとえば、ユーザーを作成するとします。これをniftyuser
と呼びます。また、あなたのサービスがniftyservice
と呼ばれているとしましょう。したがって、サービス定義をそのユーザーが制御するディレクトリにコピーします。議論のために(そして必ずしもこれをしたいとは限らない)、niftyuser
のホームディレクトリを使用するとしましょう。そう、
_cp -Rav /etc/service/niftyservice /home/niftyuser/service/niftyservice
_
サービス定義を作成します。次に、そのユーザーのディレクトリでサービススキャンを開始する必要がありますが、ユーザーの資格情報を使用して起動します。スクリプトとして記述した場合、次のようになります。
_#!/bin/sh
exec setuidgid niftyuser svscan /home/niftyuser/service
_
結果は、そのユーザーによって制御されるサービスツリーになります。これをスクリプトにすることで、ユーザー制御プロセスのサブツリーをメインプロセスツリーにくさびで留めることができることに注意してください... これはどのように見えるか のrunitの例を見ることができます。 runitはdaemontoolsに触発されました。
_2. Log main directory should be readable only to user and groups.
_
率直に言って、私は単に/service/(service-name)/log/main
を実際のディレクトリへのシンボリックリンクにします。つまり、_/service/niftyservice/log/main
_は_/var/log/niftyservice
_を指します。ログディレクトリの実行スクリプトで、ターゲットとして_./main
_を指すようにします。つまり、定義を一度設定すれば、シンボリックリンクを変更するだけで、必要に応じてロギングを移動できます。最後に、質問(2)に対処するために、必要に応じて_/var/log/niftyservice
_のユーザーとグループのアクセス許可を設定し、モードを775に設定します。これにより、誰でもファイルを読み取ることができますが、ユーザーまたはグループのみがそれらに書いてください。