부팅 할 때마다 왜 / var / run / sshd가 누락됩니까?


14

Proxmox 5.2-11에서 Ubuntu 16.04 컨테이너를 실행 중입니다. 최신 패치 1을 적용한 후 콘솔 또는 ssh를 통해 로그인 할 수 없습니다.

컨테이너 루트 FS를 하이퍼 바이저에 마운트하고에 추가 pts/0했습니다 /etc/security/access.conf(우리는 실행 pam_access). 콘솔에 루트 로그인을 허용했습니다. 우리는 한 root : lxc/tty0 lxc/tty1 lxc/tty2access.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 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디렉토리가 생성됩니다. 파일이 존재하고 올바른 내용을 가지고 있는지 확인하기 위해 필요한 것. 는 IF /var/run/sshd디렉토리는 여전히 실행할 때이 작성되는 경우가 확인할 수없는 systemd-tmpfiles --create수동.


좋은 생각이지만 기본적으로 시스템이 부팅 할 때와 같은 방식으로 작동합니다 (같은 방식으로 실패). 내가 정말로 궁금한 것은 privsep 디렉토리가 정상적인 방법으로 생성되지 않는 이유입니다. 디스크 오류가 있습니까? 권한 문제? 파일을 잠그시겠습니까? 다른 곳을 보지 journalctl않겠습니까?
서버 오류

@ServerFault 특정 상황에서 /etc/init.d/ssh실행되지 systemctl않고 대신 사용됩니다. 그리고 디렉토리를 sshd통해 시작 systemctl되면 디렉토리가 작성되지 않습니다. 정확히 무엇이 바뀌 었는지, 디렉토리 systemctl가 사용될 때 어떻게 만들어 져야하는지와 같은 내일을 파헤쳐 볼 몇 가지 열린 질문이 남았습니다 .
kasperd

@ServerFault 사용하는 경우 systemctl그것의 /etc/init/ssh.conf디렉토리를 만들기위한 담당하는합니다. 완전히 최신 Ubuntu 16.04에서 테스트했으며 디렉토리는 부팅 중에 생성됩니다. 그러나 어떤 이유로을 사용할 때 생성되지 않습니다 service ssh start. 일부 systemd관련 패키지에 대한 최신 업데이트가 있지만 해당 디렉토리 작성과 관련된 동작의 증거가 표시되지 않습니다. 그리고 테스트 할 때 부팅 중에 생성됩니다. 따라서 문제 /etc/init/ssh.conf는 올바른 내용을 가지고 있는지 입니다.
kasperd

내가 잘못되었을 수도 있습니다 @ServerFault에 대해 /etc/init/ssh.conf도있다 /usr/lib/tmpfiles.d/sshd.conf사용할 수 있도록 표시되는 systemd-tmpfiles --create. systemd-tmpfiles --create누락 된 /var/run/sshd디렉토리를 작성 합니까 ?
kasperd

systemd-tmpfiles --create출력 에서 질문에 그림을 추가했습니다 . "symlinks"systemd는 (/tmp/.X11-unix)도 존재하지 않는다고 불평하고 /tmp/있으므로 어디서 가져 오는지 모릅니다. 도와 주셔서 감사합니다.하지만 계속 진행할 것 같습니다.
서버 오류

11

따라서 / 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제거되었지만)
Stephen Schrauger 19 :

4

분명히 이것은 OpenVZ 커널 2.6.32-042stab134.7 이상을 실행할 때 해결됩니다. 어떻게 든 systemd 시작 스크립트에 가능한 수정 사항이 없다는 것이 이상합니다. 아마도 시작 후 자동으로 / run / 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의 변경 로그는 다음과 같이 말합니다.

systemd 229-4ubuntu21.9로 Ubuntu 컨테이너를 실행하면 symlinking 문제로 인해 systemd-tmpfile이 경로의 유효성을 검사 할 수 없으므로 서비스가 시작되지 않을 수 있습니다. (PSBM-90038)


2

지난 몇 년 동안 시스템 문제로 많은 문제를 겪고 있었기 때문에 Ansible 동기화 지시문 대신이 문제가 발생한다는 것을 인정해야합니다 .

어떤 이유로,이 호스트에 ansbile 스크립트를 제공 한 후 root가 아닌 관리자 사용자가 소유 한 / 디렉토리 (/ etc, / opt 및 기타)를 그대로 두었습니다. 문제 chown를 해결하기 위해 실행 한 후 /var/run/sshd이제 부팅시 다시 생성됩니다.

모든 입력에 감사하지만 적어도 루트 디렉토리에 부적절한 소유권을 적용하면 정의되지 않은 시스템 동작이 발생한다는 의미에서 버그는 없습니다.


이! 팁 주셔서 감사합니다, 우리의 경우 Ansible도 범인이었습니다!
Beenish Khan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.