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

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

Я смонтировал корневой контейнер FS на гипервизоре и добавил pts/0 в /etc/security/access.conf (мы бегаем pam_access) и это позволило root войти в консоль. У нас есть 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 и эти файлы не существуют https://faultserver.ru//images/8130c98af074908519783d9627fc648d8697eed5.png

6 ответов

Решение

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

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

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

Одна ошибка, которую вы сделали, пыталась начать 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 вручную.

Поэтому /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??) - в противном случае вы можете столкнуться с той же проблемой.

Видимо, это решается при запуске ядра 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)

Один из способов, который я видел, — это просто создать этот каталог самостоятельно в своем Dockerfile.

      FROM debian:buster
MAINTAINER Adam Z Winter

# Steps done in one RUN layer:
# - Install packages
RUN apt-get update && \
    apt-get -y install openssh-server && \
    mkdir -p /var/run/sshd

COPY files/entrypoint /

EXPOSE 22

ENTRYPOINT ["/entrypoint"]

У меня тоже было такое поведение. Проблема в моем случае заключалась в том, что ssh.socket каким-то образом был включен. При отключении ssh.socket ssh.service нормально запускается при загрузке.

Другие вопросы по тегам