У меня есть чашки, не удающиеся установить соединение по https://.
→ curl https://possum.int.gg3.net:631/adsf -I
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to possum.int.gg3.net:631
strace на процессе показывает, что ему не удается открыть ключ:
[pid 12399] access("/etc/cups/ssl/possum.int.gg3.net.crt", R_OK) = 0
[pid 12399] access("/etc/cups/ssl/possum.int.gg3.net.key", R_OK) = 0
[pid 12399] access("/etc/cups/ssl/possum.int.gg3.net.crt", R_OK) = 0
[pid 12399] access("/etc/cups/ssl/possum.int.gg3.net.key", R_OK) = 0
[pid 12399] openat(AT_FDCWD, "/etc/cups/ssl/possum.int.gg3.net.key", O_RDONLY) = -1 EACCES (Permission denied)
Это с моим /etc/cups/ssl
каталог, бывший похожий на это:
root@possum:/etc/cups/ssl# find /possum.int.gg3.net.* ./ -exec ls -dgG {} + ;
drwx------ 1 88 Oct 1 19:52 ./
lrwxrwxrwx 1 23 Oct 1 19:52 ./possum.int.gg3.net.crt -> /possum.int.gg3.net.crt
lrwxrwxrwx 1 23 Oct 1 19:52 ./possum.int.gg3.net.key -> /possum.int.gg3.net.key
-rw------- 1 3810 Oct 1 18:58 /possum.int.gg3.net.crt
-rw------- 1 1708 Oct 1 18:58 /possum.int.gg3.net.key
Однако, если я перемещаю файлы в /tmp
или к /opt
, это начинает работать.
root@possum:/etc/cups/ssl# mv -vi /possum.int.gg3.net.* /opt/
renamed '/possum.int.gg3.net.crt' -> '/opt/possum.int.gg3.net.crt'
renamed '/possum.int.gg3.net.key' -> '/opt/possum.int.gg3.net.key'
root@possum:/etc/cups/ssl# ln -svf -t . /opt/possum.int.gg3.net.*
'./possum.int.gg3.net.crt' -> '/opt/possum.int.gg3.net.crt'
'./possum.int.gg3.net.key' -> '/opt/possum.int.gg3.net.key'
Попробованный несколько других каталогов, но не может выяснить шаблон. Например, это работает, если ссылки указывают на /tmp
, /opt
, или ./file/
, но не работает, если они указывают на /usr
, /
, или /etc/letsencrypt/live/possum.int.gg3.net
(последний - то, что я действительно должен сделать).
Оказывается, что это было проблемой с apparmor профилем чашек, который не позволял процессу читать файлы в/etc/letsencrypt каталоге.
Я недавно установил livepatch, который установил snapd, который установил и включил apparmor.
Решение состоит в том, чтобы позволить их в профиле. Например.
$ sudo tee -a /etc/apparmor.d/local/usr.sbin.cupsd <<EOF
> /etc/letsencrypt/live/** r,
> /etc/letsencrypt/archive/** r,
> EOF
$ sudo systemctl restart apparmor