ssytemdで開始されたカスタムSSHDサービスがあります。これらのサービスファイルはデフォルトではデフォルトのサービスファイルと同じですopenssh-server
が、sshd_config
カスタムポートやその他の非標準設定を使用してカスタムファイルを指定します。
時々、誰かが/run/sshd
システムのディレクトリを削除します。これにより、このSSHDへのすべての後続の接続が失敗して表示されますfatal: Missing priviledge separation directory: /run/sshd
。
- このメッセージの原因は何ですか?
- このような致命的なエラーが原因でSSHD pidが終了しないのはなぜですか?プロセスが終了しない場合、systemdはサービスを再起動する必要があることを知りません。
ベストアンサー1
sshd.service
私のシステムには次のものがあります。
[Service]
...
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755
RuntimeDirectory
systemdの多くのサンドボックス機能の1つです。man systyemd.exec
詳細より。サービスが開始したら、/run/sshd
0755権限で作成されたことを確認してください。ただし、機器が停止すると削除されます。
両方のサービスが同じサービスに依存している場合、問題が発生する可能性がありますRuntimeDirectory=
。正常に実行しているが、RuntimeDirectory=
同じ構成で別のデバイスが起動しているとします。 2番目の単位が始まると、すべてのファイルはchown
その単位のUser=
合計に再帰されますGroup=
。デバイスが停止するとRuntimeDirectory=
削除されます。これらの措置は、お客様のサービスに大きな害を及ぼす可能性があります。
このような状況から自分を守るには、次の2つのオプションがあります。
- 同じを使用する別のユニットを見つけます
RuntimeDirectory=
。ほぼ確実にsshd.service
オリジナルをコピーしています。次に、デバイスが付属してConflicts=
いることを確認します。これにより、両方のサービスが同時にアクティブで競合するのを防ぎます。必要でない場合は、他のサービスを使用してそのサービスが実行されないようにすることもConflict=
できます。systemctl mask
[Unit]
...
Conflicts=sshd.service
RuntimeDirectory=
サービスに関連するディレクトリに移動します。
2番目の質問は、私が答えるのは少し難しいです。致命的なエラーマスターPIDを終了しないことにした決定は、sshdの設計決定(またはバグ)です。ちょっと見ても、「致命的な中断」や同様のオプションを見つけるのに役立ちませんでしたman sshd
。man sshd_config