web-dev-qa-db-ja.com

デーモンツールサービスを再起動するためのよりクリーンな方法

私たちの製品では、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'ディレクトリを移動せずにこれを行う他のよりクリーンな方法はありますか?そうでない場合は、上記の手順を実行しても安全ですか?

2
Prabu
_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に設定します。これにより、誰でもファイルを読み取ることができますが、ユーザーまたはグループのみがそれらに書いてください。

1
Avery Payne