Mengapa saya kehilangan / var / run / sshd setelah setiap boot?

14

Saya menjalankan wadah Ubuntu 16.04 di bawah Proxmox 5.2-11. Setelah menerapkan putaran patch 1 saya tidak dapat login di konsol atau lebih ssh.

Saya memasang FS root kontainer pada hypervisor dan ditambahkan pts/0ke /etc/security/access.conf(kami menjalankan pam_access) dan yang memungkinkan login root ke konsol. Kami memiliki root : lxc/tty0 lxc/tty1 lxc/tty2di access.confmana saya pikir sudah cukup jadi mengapa saya butuhkan pts/0sekarang membingungkan.

Saya perhatikan ssh tidak berjalan jadi cobalah memulainya dengan tangan ( /usr/sbin/sshd -DDD -f /etc/ssh/sshd_config) dan menerima kesalahan ini:

Missing privilege separation directory: /var/run/sshd

Saya membuat direktori dengan tangan, memulai sshdan akhirnya bisa masuk, tetapi setelah reboot, masalahnya tetap ada. Direktori tidak sedang dibuat. Hanya bit yang berguna journalctldan satu-satunya bagian yang menarik adalah sesuatu tentang "operasi tidak diizinkan" tetapi tidak ada info lebih lanjut.

Saya tidak terlalu terbiasa dengan 16,04 jadi bertanya-tanya bagaimana saya bisa mengetahui lebih banyak tentang masalahnya. Saya tidak memiliki /var/log/syslogatau /var/log/messageshanya kern.logkehilangan semacam itu.

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 --createOutput ditambahkan

Benar-benar aneh .... Saya memeriksa /tmpdan file-file itu tidak ada masukkan deskripsi gambar di sini

Kesalahan Server
sumber

Jawaban:

11

Satu kesalahan yang Anda lakukan adalah mencoba memulai sshddengan tangan.

Jika Anda mulai sshdmelalui resmi berarti itu hanya berfungsi. The serviceperintah tahu apa cara yang benar untuk memulai layanan pada distribusi Anda, dan ini harus bekerja:

service ssh start

Dalam hal skrip init sysv, itu semua yang perlu Anda lakukan. Alasan direktori hilang adalah itu /var/runadalah symlink ke /rundan /runmerupakan tmpfstitik mount. Itu berarti pada setiap boot /var/runakan mulai kosong. Saat Anda menggunakan serviceperintah, /etc/init.d/sshskrip akan digunakan untuk memulai sshdtetapi sebelum melakukannya skrip akan dibuat /var/run/sshdjika tidak ada.

Dengan systemdhal-hal bekerja sedikit berbeda. Akan ada file yang disebut /usr/lib/tmpfiles.d/sshd.confdengan konten ini:

d /var/run/sshd 0755 root root

Selama boot, ini akan menyebabkan /var/run/sshddirektori dibuat. Apa yang Anda perlukan untuk memverifikasi bahwa file tersebut ada dan memiliki konten yang benar. Jika /var/run/sshddirektori masih hilang Anda dapat memverifikasi apakah itu dibuat ketika Anda berjalan systemd-tmpfiles --createsecara manual.

kasperd
sumber
Itu ide yang bagus tetapi pada dasarnya melakukan hal yang sama yang coba dilakukan sistem saat boot (dan gagal dengan cara yang sama). Yang saya benar-benar ingin tahu adalah mengapa direktori privsep tidak dibuat dengan cara biasa. Apakah ada kesalahan disk? Masalah izin? file kunci? Ada tempat lain untuk mencari selain journalctl?
Kesalahan Server
@ServerFault Dalam keadaan tertentu /etc/init.d/sshtidak akan dijalankan dan systemctlakan digunakan sebagai gantinya. Dan kapan sshddimulai melalui systemctldirektori tidak dibuat. Itu menyisakan beberapa pertanyaan terbuka yang akan saya coba gali besok seperti apa yang sebenarnya telah berubah dan bagaimana sebenarnya direktori itu dibuat ketika systemctldigunakan.
kasperd
@ServerFault Saat menggunakannya systemctl, /etc/init/ssh.confyang bertanggung jawab untuk membuat direktori. Saya menguji pada Ubuntu 16.04 yang sepenuhnya mutakhir dan direktori tersebut dibuat saat boot. Tetapi untuk beberapa alasan itu tidak bisa dibuat saat menggunakan service ssh start. Ada beberapa pembaruan terbaru dari beberapa systemdpaket terkait, tetapi saya tidak melihat bukti perilaku mengenai pembuatan direktori yang telah berubah. Dan ketika saya mengujinya itu dibuat saat boot. Jadi pertanyaannya adalah apakah Anda /etc/init/ssh.confmemiliki konten yang benar.
kasperd
@ServerFault Saya mungkin salah tentang /etc/init/ssh.confada juga /usr/lib/tmpfiles.d/sshd.confyang tampaknya digunakan oleh systemd-tmpfiles --create. Apakah systemd-tmpfiles --createmembuat /var/run/sshddirektori yang hilang ?
kasperd
Menambahkan pic ke pertanyaan dari systemd-tmpfiles --createoutput. Systemd "symlinks" mengeluhkan (/tmp/.X11-unix) bahkan tidak ada di /tmp/jadi saya tidak tahu dari mana itu didapat . Terima kasih atas semua bantuan Anda, tapi saya pikir saya akan pindah.
Kesalahan Server
10

Jadi / run (dan / var / run terhubung dengan itu) akan dibuat ulang setiap reboot. Kecuali bahwa systemd-tmpfiles tidak melakukan itu untuk beberapa file termasuk (/ var) / run / sshd.

Rupanya, ini diperbaiki oleh peningkatan kernel OpenVZ. Tetapi untuk benar-benar memperbaikinya sekarang Anda mengedit /usr/lib/tmpfiles.d/sshd.confdan menghapus /vardari baris d /var/run/sshd 0755 root rootuntuk dibaca sebagai gantinya: d /run/sshd 0755 root root

Dan itu saja ..!

Dan ketika openssh-server di-upgrade, kami berharap mereka akan memperbaiki bug ini (atau apakah itu benar-benar bug di systemd? Atau openvz ??) - jika tidak, Anda dapat mengalami masalah yang sama.

pepa65
sumber
1
+1 untuk perbaikan sambil menunggu peningkatan Kernel. Dalam kasus saya itu harus menjadi: "d / run / sshd 0755 root"
paulzag
1
@ Paulzag Itu berhasil juga untuk saya. Saya bertanya-tanya apakah @ pepa65 bermaksud mengatakan d /run/sshd 0755 root root, karena petunjuk mereka mengatakan untuk hanya menghapus /varbagian (meskipun kode yang mereka berikan dalam jawaban memiliki keduanya /vardan /rundihapus).
Stephen Schrauger
4

Tampaknya ini teratasi ketika menjalankan kernel OpenVZ 2.6.32-042stab134.7 atau lebih baru. Saya merasa aneh bahwa tidak ada perbaikan yang mungkin dalam skrip start systemd entah bagaimana. Mungkin hack jelek seperti secara otomatis membuat / menjalankan / sshd / setelah memulai dan kemudian memulai sshd akan bekerja.

Output dari saya 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

Changelog dari OpenVZ 2.6.32-042stab134.7 mengatakan ini:

Menjalankan wadah Ubuntu dengan systemd 229-4ubuntu21.9 dapat mengakibatkan layanan gagal untuk memulai karena systemd-tmpfiles tidak dapat memvalidasi jalur karena masalah symlinking. (PSBM-90038)

pepa65
sumber
2

Untuk masalah sebanyak yang saya alami dengan systemd selama bertahun-tahun, saya harus mengakui bahwa masalah ini bermula dari arahan sinkronisasi yang dimungkinkan .

Untuk beberapa alasan, setelah menyediakan host ini dengan skrip ansbile kami, ia meninggalkan direktori / (juga / etc, / opt dan lainnya) yang dimiliki oleh pengguna admin, dan bukan root. Setelah berjalan chownuntuk memperbaiki hal-hal, /var/run/sshdsekarang dibuat saat boot lagi.

Saya sangat menghargai semua input tetapi tidak ada bug di sini, setidaknya dalam arti bahwa menerapkan kepemilikan yang tidak pantas ke direktori root menyebabkan perilaku sistem yang tidak jelas.

Kesalahan Server
sumber
Ini! Terima kasih atas tipnya, Ansible adalah pelakunya dalam kasus kami juga!
Beenish Khan