「pidファイルの作成に失敗しました...許可が拒否されました」というエラーが表示されるのはなぜですか?


11

プログラムに書き込み許可が必要な場合、chownでどのように設定すればよいですか?具体的には、このエラーを解決するためにプログラムfooのパーミッションはどうなりますか?

failed to create pid file '/var/run/bar.pid': Permission denied

回答:


7

fooファイルを作成またはファイルに書き込もうとするプログラムがある場合、fooバイナリのアクセス許可は重要ではありませんが、実行しいるユーザーがすべての違いを生みます。

この場合は、fooへの書き込みしようとしている/var/runが所有している、rootだけが書き込めルート

そのsudo fooため、PIDファイルを作成するには、プログラムを実行する必要があります。実行する前にプログラムをrootとして実行できるようにすることのセキュリティへの影響を考慮してください...


バイナリのパーミッションが何か:rw-rrの場合、ルートとしてプログラムを実行している場合、つまり/ var / runの下にプロセスIDを作成できる場合、プログラムは実行可能になりますか?
アンキット

@Ankit:バイナリに実行許可がまったくない場合、「実行」されません。しかし、あなたがrootとして実行しますものは下のpidを作成することができます/var/run
っぽい

または、別の場所にpidファイルを書き込みます(多くのアプリケーションでは、pidファイルへのパスを指定できます)。
msanford

1

一般的なアプローチ:ファイルにアクセスしようとしているプロセスのユーザーとグループを特定します。これは多くの場合、ソフトウェアの構成(webservers / mailservers / ...など)にありますが、ソフトウェアが既に実行されている場合はこれを使用します。

ps aux 

アクセス権を設定するプロセスを探します。最初の列は、実行中のユーザー名を示しています。

groups <username>

これにより、ユーザーが属するグループがわかります。

サービスに一致するようにファイルの所有者またはグループを変更します。

注1:ファイルが/ var / run /にあることを質問が指摘しているので、アクセスが必要なプロセスは1つだけであると想定しています。そうでない場合は、所有者またはグループを変更しないでください。 'ユーザーをグループに追加するか、このファイル/フォルダーの新しいグループを作成します。

注2:セキュリティシステムであるapparmorを使用すると、面白いことが起こる可能性があります。これにより、プロセスが(ファイルシステムレベルで)必要なすべての権限を持つファイルやフォルダーに書き込むことができなくなります。ではaa-status、あなたはあなたのサービスのための特定のルールがアクティブであるかどうかを確認することができます。


1

私がやったのは、start-stop-deamonが実行される直前にフォルダーの作成を追加するだけです。これは、スクリプトが一般に起動時にルートとして実行されるために機能します。/ var / runにフォルダーを作成し、すぐに所有者を変更するだけなので、PIDを書き込むことができます。

以下の例では、/ var / runのサブフォルダーの存在を確認します。ここでは、現在の実行ユーザーとしてPIDを配置します。この場合、ユーザー 'pi'です(私はラズベリーを使用しているため)。

私にとって非常に教育的だったので、このリンクもチェックしてください:Pythonスクリプトをサービスとして実行しますが、ここで説明した問題はカバーしませんでした。

私のシェルスクリプトの一部の例:

# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/power/$DAEMON_NAME.pid

do_start () {
    log_daemon_msg "Starting system $DAEMON_NAME daemon"
    if [ ! -d /var/run/power ]; then
        mkdir /var/run/power/
        chown pi:pi /var/run/power/
    fi
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chdir $DIR --startas $DAEMON -- $DAEMON_OPTS
    log_end_msg $?
}

systemd用にこのバージョンを入手しましたか?
アルテムルサコフスキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.