Почему я пропускаю / var / run / sshd после каждой загрузки?

14

Я использую контейнер Ubuntu 16.04 под Proxmox 5.2-11. После применения последнего раунда патчей 1 я не могу войти в консоль или через ssh.

Я установил контейнер корневой FS на гипервизор и добавил pts/0к /etc/security/access.conf(мы бежим pam_access) , и что позволило корневой входа в консоль. У нас, root : lxc/tty0 lxc/tty1 lxc/tty2в access.confкоторых я думал, было достаточно, поэтому, почему я нуждался pts/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

Одна ошибка, которую вы сделали, была попытка начать sshdвручную.

Если вы вместо этого начнете sshdчерез официальные средства, это должно просто работать. Команда serviceзнает, как правильно запустить службу в вашем дистрибутиве, и это должно сработать:

service ssh start

В случае сценариев инициализации sysv это все, что вам нужно сделать. Причина отсутствует каталог, что /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вручную.

kasperd
источник
Это хорошая идея, но, по сути, она делает то же самое, что система пыталась сделать при загрузке (и провалилась так же). Что меня действительно интересует, так это то, почему каталог 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 --create. Создает ли systemd-tmpfiles --createотсутствующий /var/run/sshdкаталог?
Касперд
Добавлена ​​картинка в вопрос из systemd-tmpfiles --createвывода. Systemd, на который жалуется systemmlinks (/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-сервер будет обновлен, мы надеемся, что он исправит эту ошибку (или это действительно ошибка в systemd? Или openvz ??) - иначе вы можете столкнуться с той же проблемой.

pepa65
источник
1
+1 за исправление в ожидании обновления ядра. В моем случае это должно было стать: "d / run / sshd 0755 root root"
paulzag
1
@paulzag Это сработало и для меня. Интересно, хотел ли сказать @ pepa65 d /run/sshd 0755 root root, поскольку в их указаниях говорится только об удалении /varчасти (хотя код, который они дают в ответе, удалил и то, /varи другое /run).
Стивен Шраугер
4

Очевидно, это решается при запуске ядра OpenVZ версии 2.6.32-042stab134.7 или новее. Я нахожу странным, что в сценариях запуска systemd невозможно исправить ситуацию. Вероятно, уродливый хак, такой как автоматическое создание / запуск / sshd / после запуска и запуска 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 говорится следующее:

Запуск контейнеров Ubuntu с systemd 229-4ubuntu21.9 может привести к невозможности запуска служб, поскольку systemd-tmpfiles не удалось проверить путь из-за проблем с символьными ссылками. (PSBM-90038)

pepa65
источник
2

Поскольку столько лет у меня было много проблем с systemd, я должен признать, что эта проблема проистекает из директивы Ansible synchronize .

По какой-то причине после предоставления этому хосту наших скриптов ansbile он оставил каталог / (а также / etc, / opt и другие), принадлежащий пользователю с правами администратора, а не root. После запуска, chownчтобы исправить вещи, /var/run/sshdтеперь снова создается при загрузке.

Я действительно ценю все входные данные, но здесь нет ошибки, по крайней мере в том смысле, что применение неправильного владения корневыми каталогами привело к неопределенному поведению системы.

Ошибка сервера
источник
Эта! Спасибо за подсказку, Ansible был виновником и в нашем случае!
Бениш Хан