SSHが致命的なエラーで終了しない

SSHが致命的なエラーで終了しない

ssytemdで開始されたカスタムSSHDサービスがあります。これらのサービスファイルはデフォルトではデフォルトのサービスファイルと同じですopenssh-serverが、sshd_configカスタムポートやその他の非標準設定を使用してカスタムファイルを指定します。

時々、誰かが/run/sshdシステムのディレクトリを削除します。これにより、このSSHDへのすべての後続の接続が失敗して表示されますfatal: Missing priviledge separation directory: /run/sshd

  1. このメッセージの原因は何ですか?
  2. このような致命的なエラーが原因でSSHD pidが終了しないのはなぜですか?プロセスが終了しない場合、systemdはサービスを再起動する必要があることを知りません。

ベストアンサー1

sshd.service私のシステムには次のものがあります。

[Service]
...
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755

RuntimeDirectorysystemdの多くのサンドボックス機能の1つです。man systyemd.exec詳細より。サービスが開始したら、/run/sshd0755権限で作成されたことを確認してください。ただし、機器が停止すると削除されます。

両方のサービスが同じサービスに依存している場合、問題が発生する可能性がありますRuntimeDirectory=。正常に実行しているが、RuntimeDirectory=同じ構成で別のデバイスが起動しているとします。 2番目の単位が始まると、すべてのファイルはchownその単位のUser=合計に再帰されますGroup=。デバイスが停止するとRuntimeDirectory=削除されます。これらの措置は、お客様のサービスに大きな害を及ぼす可能性があります。

このような状況から自分を守るには、次の2つのオプションがあります。

  1. 同じを使用する別のユニットを見つけますRuntimeDirectory=。ほぼ確実にsshd.serviceオリジナルをコピーしています。次に、デバイスが付属してConflicts=いることを確認します。これにより、両方のサービスが同時にアクティブで競合するのを防ぎます。必要でない場合は、他のサービスを使用してそのサービスが実行されないようにすることもConflict=できます。systemctl mask
[Unit]
...
Conflicts=sshd.service
  1. RuntimeDirectory=サービスに関連するディレクトリに移動します。

2番目の質問は、私が答えるのは少し難しいです。致命的なエラーマスターPIDを終了しないことにした決定は、sshdの設計決定(またはバグ)です。ちょっと見ても、「致命的な中断」や同様のオプションを見つけるのに役立ちませんでしたman sshdman sshd_config

おすすめ記事