Package: chrony Version: 4.0-8 Severity: grave Tags: upstream Justification: renders package unusable X-Debbugs-Cc: s.egb...@sbcglobal.net
Dear Maintainer, The filename construct for a UNIX socket to be shared between the Chrony (chronyd) daemon and its Chrony CLI (chronyc) client admin tool are not in sync, as client's UNIX filename uses a PID value whereas server's UNIX filename does not use PID value. This appears to be a Debian-only issue. Fired up its daemon and doubled checked that a UNIX socket was made: $ ls -1 /run/chrony chrony.sock chrony.pid Execute the client and no successful UNIX socket opened. Using List Open File (lsof) tool, I show the daemon's opened files: COMMAND PID USER FD TYPE NODE NAME <snipped some non-relevant fds out> chronyd 3597 _chrony 3u unix 0x0000000000000000 \ type=DGRAM chronyd 3597 _chrony 5u IPv4 UDP 127.0.0.1:323 chronyd 3597 _chrony 6u IPv6 UDP [::1]:323 chronyd 3597 _chrony 7u unix 0x0000000000000000 \ /run/chrony/chronyd.sock type=DGRAM chronyd 3597 _chrony 8u unix 0x0000000000000000 type=SEQPACKET chronyc 3809 johnd 3u IPv4 UDP \ 127.0.0.1:33911->127.0.0.1:323 No socket in the dispatcher part of the daemon, now to check the other forked part of the daemon used to carry on the connection with its chronyc client, same 'lsof' output. COMMAND PID USER FD TYPE NODE NAME <snipped some non-relevant fds out> chronyd 3597 _chrony 5u IPv4 UDP 127.0.0.1:323 chronyd 3597 _chrony 6u IPv6 UDP [::1]:323 chronyd 3598 _chrony 9u unix 0x0000000000000000 type=SEQPACKET chronyc 3809 johnd 3u IPv4 UDP \ 127.0.0.1:33911->127.0.0.1:323 Appears that client failed socket open and fell back to a different approach which is using an IP loopback address. Investigated why socket open failed... by using 'strace -f chrony[c|d]'. For the chronyd v4.0 having opened a Debian-tweaked '/run/chrony/chrony.sock', I show the corresponding chronyc v4.0 version: $ chronyc -v chronyc (chrony) version 4.0 (+READLINE +SECHASH +IPV6 -DEBUG) And ran strace against this v4.0 client and grep'd for 'sock' word pattern: $ strace -f /usr/bin/chronyc socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3 unlink("/run/chrony/chronyc.3875.sock") = -1 EACCES (Permission denied) bind(3, {sa_family=AF_UNIX, sun_path="/run/chrony/chronyc.3875.sock"}, 110) = -1 EACCES (Permission denied) getsockname(3, {sa_family=AF_UNIX}, [112->2]) = 0 close(3) = 0 socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3 connect(3, {sa_family=AF_INET, sin_port=htons(323), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 Noticed the 'PID' number being inserted into the '/run/chrony/chronyc.3875.sock'? This is the chronyc client doing "PID-sock" filenaming convention, whereas its daemon is doing a different "just-sock" filenaming convention. The v4.1 client does exactly the same. chronyc (chrony) version DEVELOPMENT (-READLINE -SECHASH +IPV6 +DEBUG) socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3 unlink("/var/run/chrony/chronyc.3885.sock") = -1 EACCES (Permission denied) bind(3, {sa_family=AF_UNIX, sun_path="/var/run/chrony/chronyc.3885.sock"}, 110) = -1 EACCES (Permission denied) getsockname(3, {sa_family=AF_UNIX}, [112->2]) = 0 close(3) = 0 socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3 connect(3, {sa_family=AF_INET, sin_port=htons(323), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 fstat(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0 read(0, ^Cstrace: Process 3885 detached <detached ...> It would be nice to use consistent filenaming convention for the UNIX socket for both client and daemon. -- System Information: Debian Release: 11.0 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 5.10.46 (SMP w/4 CPU threads) Kernel taint flags: TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages chrony depends on: ii adduser 3.118 ii init-system-helpers 1.60 ii iproute2 5.10.0-4 ii libc6 2.31-13 ii libcap2 1:2.44-1 ii libedit2 3.1-20191231-2+b1 ii libgnutls30 3.7.1-5 ii libnettle8 3.7.3-1 ii libseccomp2 2.5.1-1 ii tzdata 2021a-1 ii ucf 3.0043 chrony recommends no packages. Versions of packages chrony suggests: ii bind9-dnsutils [dnsutils] 1:9.16.15-1 pn networkd-dispatcher <none> -- Configuration Files: /etc/apparmor.d/usr.sbin.chronyd changed: /usr/sbin/chronyd flags=(attach_disconnected) { #include <abstractions/base> #include <abstractions/nameservice> # For /run/chrony to be created capability chown, # Give “root” the ability to read and write the PID file capability dac_override, capability dac_read_search, # Needed to support HW timestamping capability net_admin, # Needed to allow NTP server sockets to be bound to a privileged port capability net_bind_service, # Needed to allow an NTP socket to be bound to a device using the # SO_BINDTODEVICE socket option on kernels before 5.7 capability net_raw, # Needed to drop privileges capability setgid, capability setuid, # Needed to set the SCHED_FIFO real-time scheduler at the specified priority # using the '-P' option capability sys_nice, # Needed to lock chronyd into RAM capability sys_resource, # Needed to set the system/real-time clock capability sys_time, /usr/sbin/chronyd mr, /etc/chrony/{,**} r, /var/lib/chrony/{,*} rw, /var/log/chrony/{,*} rw, @{run}/chrony/{,*} rw, @{run}/chrony-dhcp/{,*} r, # Using the “tempcomp” directive gives chronyd the ability to improve # the stability and accuracy of the clock by compensating the temperature # changes measured by a sensor close to the oscillator. @{sys}/class/hwmon/hwmon[0-9]*/temp[0-9]*_input r, @{sys}/devices/virtual/thermal/thermal_zone[0-9]*/hwmon[0-9]*/temp[0-9]*_input r, # Support all paths suggested in the man page (LP: #1771028). Assume these # are common use cases; others should be set as local include (see below). # Configs using a 'chrony.' prefix like the tempcomp config file example /etc/chrony.* r, # Example gpsd socket is outside @{run}/chrony/ @{run}/chrony.tty{,*}.sock rw, @{run}/chrony.*.sock rw, # To sign replies to MS-SNTP clients by the smbd daemon /var/lib/samba/ntp_signd/socket rw, # rtc /etc/adjtime r, /dev/rtc{,[0-9]*} rw, # gps devices /dev/pps[0-9]* rw, /dev/ptp[0-9]* rw, # For use with clocks that report via shared memory (e.g. gpsd), # you may need to give ntpd access to all of shared memory, though # this can be considered dangerous. See https://launchpad.net/bugs/722815 # for details. To enable, add this to local/usr.sbin.chronyd: # capability ipc_owner, # Site-specific additions and overrides. See local/README for details. #include <local/usr.sbin.chronyd> } /etc/default/chrony changed: DAEMON_OPTS="-F 1 -L 0" -- no debconf information