Tại sao tôi thiếu / var / run / sshd sau mỗi lần khởi động?


13

Tôi đang chạy bộ chứa Ubuntu 16.04 trong Proxmox 5.2-11. Sau khi áp dụng vòng vá mới nhất 1 Tôi không thể đăng nhập tại bảng điều khiển hoặc qua ssh.

Tôi đã gắn FS gốc container trên bộ ảo hóa và thêm pts/0vào /etc/security/access.conf(chúng tôi chạy pam_access) và điều đó cho phép đăng nhập root vào bàn điều khiển. Chúng tôi có root : lxc/tty0 lxc/tty1 lxc/tty2trong access.confđó tôi nghĩ là đủ vì vậy tại sao tôi cần pts/0bây giờ là khó hiểu.

Tôi nhận thấy ssh không chạy nên đã thử khởi động bằng tay ( /usr/sbin/sshd -DDD -f /etc/ssh/sshd_config) và nhận được lỗi này:

Missing privilege separation directory: /var/run/sshd

Tôi đã tạo thư mục bằng tay, bắt đầu sshvà cuối cùng đã có thể đăng nhập, nhưng sau khi khởi động lại, vấn đề vẫn tồn tại. Thư mục không được tạo. Chỉ các bit hữu ích trong journalctlvà phần thú vị duy nhất là một cái gì đó về "hoạt động không được phép" nhưng không có thêm thông tin.

Tôi không quá quen thuộc với 16.04 nên tự hỏi làm thế nào tôi có thể tìm hiểu thêm về vấn đề này. Tôi không có /var/log/sysloghoặc /var/log/messageschỉ có kern.logloại mất.

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

Đã thêm systemd-tmpfiles --createđầu ra

Thật kỳ quái .... Tôi đã kiểm tra /tmpvà những tập tin đó không tồn tại nhập mô tả hình ảnh ở đây

Câu trả lời:


11

Một sai lầm bạn đã làm là cố gắng bắt đầu sshdbằng tay.

Nếu bạn thay vì bắt đầu sshdthông qua chính thức có nghĩa là nó chỉ nên hoạt động. Các servicelệnh biết gì cách chính xác để bắt đầu một dịch vụ phân phối của bạn, và điều này sẽ làm việc:

service ssh start

Trong trường hợp các tập lệnh sysv init, đó là tất cả mọi thứ bạn cần làm. Lý do thư mục bị thiếu /var/runlà một liên kết tượng trưng /run/runlà một tmpfsđiểm gắn kết. Điều đó có nghĩa là trên mỗi khởi động /var/runsẽ bắt đầu trống rỗng. Khi bạn sử dụng servicelệnh, /etc/init.d/sshtập lệnh sẽ được sử dụng để bắt đầu sshdnhưng trước khi thực hiện, tập lệnh sẽ tạo /var/run/sshdnếu nó không tồn tại.

Với systemdnhững thứ hoạt động hơi khác một chút. Sẽ có một tệp được gọi /usr/lib/tmpfiles.d/sshd.confvới nội dung này:

d /var/run/sshd 0755 root root

Trong quá trình khởi động, điều này sẽ khiến /var/run/sshdthư mục được tạo. Những gì bạn cần để xác minh rằng các tập tin tồn tại và có nội dung chính xác. Nếu /var/run/sshdthư mục vẫn còn thiếu, bạn có thể xác minh nếu nó được tạo khi bạn chạy systemd-tmpfiles --createthủ công.


Đó là một ý tưởng tốt nhưng về cơ bản là làm điều tương tự mà hệ thống đã cố gắng thực hiện khi khởi động (và thất bại theo cách tương tự). Điều tôi thực sự băn khoăn là tại sao thư mục của tư nhân không được tạo bằng các phương tiện thông thường. Có lỗi đĩa không? Một vấn đề cho phép? khóa tập tin? Bất cứ nơi nào khác để tìm bên cạnh journalctl?
Lỗi máy chủ

@ServerFault Trong một số trường hợp nhất định /etc/init.d/sshsẽ không được chạy và systemctlsẽ được sử dụng thay thế. Và khi sshdđược bắt đầu thông qua systemctlthư mục không được tạo. Điều đó để lại một vài câu hỏi mở mà tôi sẽ cố gắng đào sâu vào ngày mai như chính xác những gì đã thay đổi và chính xác thư mục đó sẽ được tạo ra khi systemctlđược sử dụng.
kasperd

@ServerFault Khi sử dụng, systemctl/etc/init/ssh.confchịu trách nhiệm tạo thư mục. Tôi đã thử nghiệm trên Ubuntu 16.04 đầy đủ và thư mục sẽ được tạo trong khi khởi động. Nhưng vì một số lý do, nó không được tạo khi sử dụng service ssh start. Có một số cập nhật gần đây của một số systemdgói liên quan, nhưng tôi không thấy bất kỳ bằng chứng nào về hành vi liên quan đến việc tạo thư mục đó đã thay đổi. Và khi tôi kiểm tra nó sẽ được tạo trong khi khởi động. Vì vậy, câu hỏi sau đó là nếu bạn /etc/init/ssh.confcó nội dung chính xác.
kasperd

@ServerFault Tôi có thể đã nhầm lẫn về việc /etc/init/ssh.confcũng /usr/lib/tmpfiles.d/sshd.confcó vẻ như được sử dụng bởi systemd-tmpfiles --create. Có systemd-tmpfiles --createtạo /var/run/sshdthư mục bị thiếu ?
kasperd

Đã thêm pic cho câu hỏi từ systemd-tmpfiles --createđầu ra. Systemd "symlinks" đang phàn nàn về (/tmp/.X11-unix) thậm chí không tồn tại /tmp/nên tôi không biết nó lấy từ đâu. Cảm ơn tất cả sự giúp đỡ của bạn về nó, nhưng tôi nghĩ rằng tôi sẽ tiếp tục.
Lỗi máy chủ

10

Vì vậy, / run (và / var / run symlinked to it) được tạo lại mỗi lần khởi động lại. Ngoại trừ việc systemd-tmpfiles không làm điều đó đối với một số tệp bao gồm (/ var) / run / sshd.

Rõ ràng, điều này được khắc phục bằng nâng cấp kernel OpenVZ. Nhưng để thực sự sửa nó, bây giờ bạn chỉnh sửa /usr/lib/tmpfiles.d/sshd.confvà xóa /varkhỏi dòng d /var/run/sshd 0755 root rootđể đọc thay thế: d /run/sshd 0755 root root

Và đó là nó ..!

Và khi máy chủ openssh được nâng cấp, chúng tôi hy vọng rằng họ sẽ sửa lỗi này (hoặc nó thực sự là một lỗi trong systemd? Hoặc openvz ??) - nếu không bạn có thể gặp phải vấn đề tương tự.


1
+1 để sửa lỗi trong khi chờ nâng cấp Kernel. Trong trường hợp của tôi, nó cần phải trở thành: "d / run / sshd 0755 root root"
paulzag

1
@paulzag Điều đó cũng làm việc cho tôi. Tôi tự hỏi nếu @ pepa65 có ý muốn nói d /run/sshd 0755 root root, vì các hướng dẫn của họ nói chỉ xóa /varphần đó (mặc dù mã họ đưa ra trong câu trả lời có cả hai /var/runbị xóa).
Stephen Schrauger

4

Rõ ràng điều này được giải quyết khi chạy kernel OpenVZ 2.6.32-042stab134.7 hoặc mới hơn. Tôi thấy lạ là không có cách khắc phục nào trong các kịch bản khởi động systemd bằng cách nào đó. Có lẽ một hack xấu xí như tự động tạo / chạy / sshd / sau khi khởi động và sau đó bắt đầu sshd sẽ hoạt động.

Đầu ra của tôi 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

Thay đổi của OpenVZ 2.6.32-042stab134.7 nói điều này:

Chạy các bộ chứa Ubuntu với systemd 229-4ubfox21.9 có thể dẫn đến các dịch vụ không khởi động được vì systemd-tmpfiles không thể xác thực đường dẫn do các vấn đề liên kết. (PSBM-90038)


2

Đối với nhiều rắc rối như tôi đã gặp phải với systemd trong nhiều năm qua, tôi phải thừa nhận vấn đề này bắt nguồn từ chỉ thị đồng bộ hóa Ansible .

Vì một số lý do, sau khi cung cấp máy chủ này với các tập lệnh ansbile của chúng tôi, nó đã để lại thư mục / (cũng như / etc, / opt và các tệp khác) do người dùng quản trị sở hữu và không phải root. Sau khi chạy chownđể sửa các thứ, /var/run/sshdbây giờ được tạo lại khi khởi động lại.

Tôi thực sự đánh giá cao tất cả các đầu vào nhưng không có lỗi ở đây, ít nhất là theo nghĩa áp dụng quyền sở hữu không phù hợp cho các thư mục gốc gây ra hành vi hệ thống không xác định.


Điều này! Cảm ơn vì tiền boa, Ansible cũng là thủ phạm trong trường hợp của chúng tôi!
Beenish Khan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.