起動するたびに/ var / run / sshdが見つからないのはなぜですか?


13

Proxmox 5.2-11の下でUbuntu 16.04コンテナーを実行しています。最新のパッチ1を適用した後、コンソールまたはsshでログインできません。

コンテナールートFSをハイパーバイザーにマウントし、(実行)に追加pts/0して、コンソールへのルートログインを許可しました。私たちはしている中でどの私は十分だと思ったので、私は必要な理由を今不可解されます。/etc/security/access.confpam_accessroot : lxc/tty0 lxc/tty1 lxc/tty2access.confpts/0

sshが実行されていないことに気づいたので、手動で起動してみて(/usr/sbin/sshd -DDD -f /etc/ssh/sshd_config)このエラーを受け取りました

Missing privilege separation directory: /var/run/sshd

手作業でディレクトリを作成し、開始sshして最終的にログインできましたが、再起動後も問題は解決しません。ディレクトリは作成されていません。有用なjournalctl部分と唯一の興味深い部分は、「許可されていない操作」に関するものですが、それ以上の情報はありません。

私は16.04にあまり詳しくないので、この問題についてどのように調べることができるのか疑問に思っています。私は持っていない/var/log/syslog/var/log/messagesだけでkern.logとても親切失ったの。

1

systemd-sysv 229-4ubuntu21.9
libpam-systemd 229-4ubuntu21.9
libsystemd0 229-4ubuntu21.9
systemd 229-4ubuntu21.9
udev 229-4ubuntu21.9
libudev1 229-4ubuntu21.9
iproute2 4.3.0-1ubuntu3.16.04.4
libsasl2-modules-db 2.1.26.dfsg1-14ubuntu0.1
libsasl2-2 2.1.26.dfsg1-14ubuntu0.1
ldap-utils 2.4.42dfsg-2ubuntu3.4
libldap-2.4-2 2.4.42dfsg-2ubuntu3.4
libsasl2-modules 2.1.26.dfsg1-14ubuntu0.1
libgs9-common 9.25dfsg1-0ubuntu0.16.04.3
ghostscript 9.25dfsg1-0ubuntu0.16.04.3
libgs9 9.25dfsg1-0ubuntu0.16.04.3

[2]

Nov 27 10:13:48 host16 systemd[1]: Starting OpenBSD Secure Shell server...
Nov 27 10:13:48 host16 sshd[474]: Missing privilege separation directory: /var/run/sshd
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Control process exited, code=exited status=255
Nov 27 10:13:48 host16 systemd[1]: Failed to start OpenBSD Secure Shell server.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Unit entered failed state.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Failed with result 'exit-code'.
Nov 27 10:13:48 host16 mysqld_safe[495]: Starting mysqld daemon with databases from /var/lib/mysql/mysql
Nov 27 10:13:48 host16 mysqld[500]: 181127 10:13:48 [Note] /usr/sbin/mysqld (mysqld 10.0.36-MariaDB-0ubuntu0.16.04.1) starting as process 499 ...
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
Nov 27 10:13:48 host16 systemd[1]: Stopped OpenBSD Secure Shell server.
Nov 27 10:13:48 host16 systemd[1]: Failed to reset devices.list on /system.slice/ssh.service: Operation not permitted
Nov 27 10:13:48 host16 systemd[1]: Starting OpenBSD Secure Shell server...
Nov 27 10:13:48 host16 sshd[502]: Missing privilege separation directory: /var/run/sshd
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Control process exited, code=exited status=255
Nov 27 10:13:48 host16 systemd[1]: Failed to start OpenBSD Secure Shell server.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Unit entered failed state.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Failed with result 'exit-code'.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
Nov 27 10:13:48 host16 systemd[1]: Stopped OpenBSD Secure Shell server.
Nov 27 10:13:48 host16 systemd[1]: Failed to reset devices.list on /system.slice/ssh.service: Operation not permitted
Nov 27 10:13:48 host16 systemd[1]: Starting OpenBSD Secure Shell server...
Nov 27 10:13:48 host16 sshd[503]: Missing privilege separation directory: /var/run/sshd
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Control process exited, code=exited status=255
Nov 27 10:13:48 host16 systemd[1]: Failed to start OpenBSD Secure Shell server.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Unit entered failed state.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Failed with result 'exit-code'.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
Nov 27 10:13:48 host16 systemd[1]: Stopped OpenBSD Secure Shell server.
Nov 27 10:13:48 host16 systemd[1]: Failed to reset devices.list on /system.slice/ssh.service: Operation not permitted
Nov 27 10:13:48 host16 systemd[1]: Starting OpenBSD Secure Shell server...
Nov 27 10:13:48 host16 sshd[504]: Missing privilege separation directory: /var/run/sshd
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Control process exited, code=exited status=255
Nov 27 10:13:48 host16 systemd[1]: Failed to start OpenBSD Secure Shell server.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Unit entered failed state.
Nov 27 10:13:48 host16 systemd[1]: ssh.service: Failed with result 'exit-code'.
Nov 27 10:13:49 host16 systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
Nov 27 10:13:49 host16 systemd[1]: Stopped OpenBSD Secure Shell server.
Nov 27 10:13:49 host16 systemd[1]: ssh.service: Start request repeated too quickly.
Nov 27 10:13:49 host16 systemd[1]: Failed to start OpenBSD Secure Shell server.
Nov 27 10:13:49 host16 systemd[1]: ssh.service: Unit entered failed state.
Nov 27 10:13:49 host16 systemd[1]: ssh.service: Failed with result 'start-limit-hit'.
Nov 27 10:13:49 host16 systemd[1]: Started /etc/rc.local Compatibility.
Nov 27 10:13:49 host16 systemd[1]: Failed to reset devices.list on /system.slice/plymouth-quit.service: Operation not permitted
Nov 27 10:13:49 host16 systemd[1]: Starting Terminate Plymouth Boot Screen...
Nov 27 10:13:49 host16 systemd[1]: Failed to reset devices.list on /system.slice/plymouth-quit-wait.service: Operation not permitted
Nov 27 10:13:49 host16 systemd[1]: Starting Hold until boot process finishes up...
Nov 27 10:13:49 host16 systemd[1]: Failed to reset devices.list on /system.slice/rc-local.service: Operation not permitted
Nov 27 10:13:49 host16 systemd[1]: Started Hold until boot process finishes up.
Nov 27 10:13:49 host16 systemd[1]: Started Container Getty on /dev/pts/1.
Nov 27 10:13:49 host16 systemd[1]: Started Container Getty on /dev/pts/0.
Nov 27 10:13:49 host16 systemd[1]: Failed to reset devices.list on /system.slice/console-getty.service: Operation not permitted
Nov 27 10:13:49 host16 systemd[1]: Started Console Getty.
Nov 27 10:13:49 host16 systemd[1]: Reached target Login Prompts.
Nov 27 10:13:49 host16 systemd[1]: Started Terminate Plymouth Boot Screen.
Nov 27 10:13:52 host16 nslcd[338]: accepting connections
Nov 27 10:13:52 host16 nslcd[275]:    ...done.
Nov 27 10:13:52 host16 systemd[1]: Started LSB: LDAP connection daemon.
Nov 27 10:13:52 host16 systemd[1]: Failed to reset devices.list on /system.slice/cron.service: Operation not permitted
Nov 27 10:13:52 host16 systemd[1]: Started Regular background program processing daemon.
Nov 27 10:13:52 host16 systemd[1]: Failed to reset devices.list on /system.slice/atd.service: Operation not permitted

systemd-tmpfiles --create出力を追加しました

本当に奇妙な....私はチェックし/tmp、それらのファイルは存在しません ここに画像の説明を入力してください

回答:


11

あなたがした間違いの1つはsshd、手作業で開始しようとしたことです。

代わりにsshd公式から始めると、それはただうまくいくはずです。serviceコマンドは、お使いのディストリビューション上でサービスを開始するための正しい方法が何であるかを知っており、これは動作するはずです:

service ssh start

sysv initスクリプトの場合、それはあなたがする必要があるすべてです。ディレクトリが見つからない理由/var/runは、シンボリックリンク/run/runあり、tmpfsマウントポイントであるためです。つまり、起動/var/runするたびに空になります。このserviceコマンドを使用すると、/etc/init.d/sshスクリプトが起動に使用されますが、実行するsshd前にスクリプトが/var/run/sshd存在しない場合は作成されます。

systemd、物事は少し異なる動作をします。/usr/lib/tmpfiles.d/sshd.confこのコンテンツで呼び出されるファイルがあります:

d /var/run/sshd 0755 root root

これにより、ブート中に/var/run/sshdディレクトリが作成されます。ファイルが存在し、内容が正しいことを確認するために必要なもの。/var/run/sshdディレクトリがまだ見つからない場合は、systemd-tmpfiles --create手動で実行したときにディレクトリが作成されるかどうかを確認できます。


これは良い考えですが、基本的にはシステムがブート時に実行しようとしたことと同じことを実行しています(同じ方法で失敗しました)。私が本当に疑問に思っているのは、privsepディレクトリが通常の手段で作成されていない理由です。ディスクエラーはありますか?許可の問題ですか?ロックファイル?ほかにどこか他の場所を見ますjournalctlか?
サーバー障害

@ServerFault特定の状況で/etc/init.d/sshは実行systemctlされず、代わりに使用されます。そして、ディレクトリsshdを介しsystemctlて起動すると、作成されません。これにより、何が変更されたか、どのディレクトリsystemctlが使用されたときに作成されることになっているのかなど、明日掘り下げようとするいくつかの未解決の質問が残ります。
カスペルド

@ServerFault使用systemctlする場合/etc/init/ssh.confは、ディレクトリの作成を担当します。完全に最新のUbuntu 16.04でテストしましたが、ブート中にディレクトリが作成されます。しかし、何らかの理由で、を使用するときに作成されませんservice ssh start。いくつかのsystemd関連パッケージのいくつかの最近の更新がありますが、そのディレクトリの作成が変更されたことに関する動作の証拠を見ません。そして、テスト時に起動時に作成されます。したがって、質問はあなた/etc/init/ssh.confが正しい内容を持っているかどうかです。
カスペルド

私が間違っていたかもしれ@ServerFaultについて/etc/init/ssh.confも存在する/usr/lib/tmpfiles.d/sshd.confが使用するように見えますsystemd-tmpfiles --createsystemd-tmpfiles --create不足している/var/run/sshdディレクトリを作成しますか?
カスペルド

systemd-tmpfiles --create出力からの質問に写真を追加しました。「シンボリックリンク」systemdは(/tmp/.X11-unix)が存在しないことを訴えている/tmp/ので、それがどこから来たのかわかりません。あなたのすべての助けに感謝しますが、私は先に進むつもりだと思います。
サーバー障害

10

したがって、/ run(および/ var / runにシンボリックリンク)は、再起動するたびに再作成されます。systemd-tmpfilesが(/ var)/ run / sshdを含むいくつかのファイルに対してそうしないことを除いて。

どうやら、これはOpenVZカーネルのアップグレードによって修正されました。しかし実際に修正/usr/lib/tmpfiles.d/sshd.confするに/varは、d /var/run/sshd 0755 root root代わりに編集して行から削除し、代わりに読み取ります: d /run/sshd 0755 root root

以上です..!

そして、openssh-serverがアップグレードされたら、彼らがこのバグを修正してくれることを願っています(または、実際にsystemd?またはopenvz?のバグですか?)-そうでなければ、同じ問題にぶつかります。


1
カーネルのアップグレードを待っている間に修正のために+1。私の場合はそれがなるために必要な:「D /実行/ 0755ルートルートのsshd」
paulzag

1
@paulzagそれは私にとってもうまくいきました。@ pepa65が言うことを意味しているのだろうかd /run/sshd 0755 root rootその方向にのみ削除すると言うことから、/var一部を(彼らは答えに与えるコードは両方を持っているにもかかわらず/var/run削除します)。
スティーブンシュラウガー

4

これは、OpenVZカーネル2.6.32-042stab134.7以降を実行しているときに解決されるようです。systemdの起動スクリプトに何らかの形で修正が可能なのはおかしいと思います。おそらく、起動してからsshdを起動した後に/ run / sshd /を自動的に作成するようないハックが機能します。

私の出力systemd-tmpfiles --create

[/usr/lib/tmpfiles.d/var.conf:14] Duplicate line for path "/var/log", ignoring.
fchownat() of /run/named failed: Invalid argument
Failed to openat(/dev/simfs): Operation not permitted
Failed to validate path /var/run/screen: Too many levels of symbolic links
Failed to validate path /var/run/sshd: Too many levels of symbolic links
Failed to validate path /var/run/sudo: Too many levels of symbolic links
Failed to validate path /var/run/sudo/ts: Too many levels of symbolic links
fchownat() of /run/systemd/netif failed: Invalid argument
fchownat() of /run/systemd/netif/links failed: Invalid argument
fchownat() of /run/systemd/netif/leases failed: Invalid argument
fchownat() of /run/log/journal failed: Invalid argument
fchownat() of /run/log/journal/e9e1d08bc42c48999865b96c250f40cc failed: Invalid argument
fchownat() of /run/log/journal/e9e1d08bc42c48999865b96c250f40cc/system.journal failed: Invalid argument

OpenVZ 2.6.32-042stab134.7の変更ログには次のように書かれています:

systemd 229-4ubuntu21.9でUbuntuコンテナを実行すると、systemd-tmpfilesがシンボリックリンクの問題のためにパスを検証できなかったため、サービスの開始に失敗する可能性がありました。(PSBM-90038)


2

私が長年systemdで抱えていたトラブルと同様に、この問題はAnsible synchronizeディレクティブに起因することを認めなければなりません。

なんらかの理由で、このホストをアンスクリプトスクリプトでプロビジョニングした後、rootではなく、adminユーザーが所有する/ディレクトリ(/ etc、/ optなど)を残しました。chown物事を修正するために実行した後、/var/run/sshd今度は起動時に再び作成されます。

すべての入力を本当に感謝していますが、少なくともルートディレクトリに不適切な所有権を適用すると未定義のシステム動作が発生するという意味で、ここにはバグはありません。


この!ヒントをありがとう、Ansibleは私たちの場合の犯人でもありました!
ビーニッシュカーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.