[snap] cannot create user data directory: failed to verify SELinux context of /root/snap: exec: "matchpathcon"
cmd_run.go:1044: WARNING: cannot create user data directory: failed to verify SELinux context of /root/snap: exec: "matchpathcon": executable file not found in $PATH
Saving debug log to /var/log/letsencrypt/letsencrypt.log
(1) 까닭
letsencrypt 인증서를 갱신할 때 나올 수 있는 경고문이다. SELinux를 쓰지 않더라도 cron으로 실행될 때 실행 파일의 경로 문제로 이 경고문이 나올 수 있는 것 같다. 경고문이 나오더라도 작업 결과에 영향이 없는 것 같다.
https://forum.snapcraft.io/t/centos-7-cannot-create-user-data-directory-from-cron/21487
(2) 풀기 ① - $PATH 경로 지정
문제를 푸는 방법이 아닐 수 있다.
리눅스 환경변수 $PATH에 /sbin을 더하여 넣는다.
1) 현재 $PATH 확인
$ sudo echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
2) $PATH에 /sbin 더하기 (일시 적용)
$ sudo export PATH=$PATH:/sbin
3) $PATH에 /sbin 더하기 (영구 적용)
~/.bashrc 또는 ~/.bash_profile 파일에 다음 내용을 더하여 넣는다.
PATH=$PATH:/sbin
export PATH
(3) 풀기 ② - SELinux 보안 문맥 고치기
리눅스 명령줄에서 'audit2allow -a'로 SELinux 보안 문맥에 따른 오류를 풀 방법을 알아본다.
$ sudo audit2allow -a
#============= fail2ban_t ==============
...
#============= snappy_cli_t ==============
...
#============= snappy_confine_t ==============
#!!!! WARNING: 'var_run_t' is a base type.
#!!!! The file '/run/snapd/lock/certbot-dns-rfc2136.lock' is mislabeled on your system.
#!!!! Fix with $ restorecon -R -v /run/snapd/lock/certbot-dns-rfc2136.lock
allow snappy_confine_t var_run_t:file { lock open read write };
#============= snappy_mount_t ==============
#!!!! This avc is allowed in the current policy
allow snappy_mount_t binfmt_misc_fs_t:dir search;
#!!!! This avc is allowed in the current policy
allow snappy_mount_t sysctl_fs_t:dir search;
#!!!! WARNING: 'var_run_t' is a base type.
#!!!! The file '/run/snapd/lock/certbot-dns-rfc2136.lock' is mislabeled on your system.
#!!!! Fix with $ restorecon -R -v /run/snapd/lock/certbot-dns-rfc2136.lock
allow snappy_mount_t var_run_t:file { lock open read write };
#============= snappy_t ==============
#!!!! This avc is allowed in the current policy
allow snappy_t binfmt_misc_fs_t:dir search;
allow snappy_t init_t:system status;
#!!!! WARNING 'snappy_t' is not allowed to write or create to var_run_t. Change the label to snappy_var_run_t.
allow snappy_t var_run_t:dir { add_name create write };
#!!!! The file '/run/snapd/lock/core20.lock' is mislabeled on your system.
#!!!! Fix with $ restorecon -R -v /run/snapd/lock/core20.lock
allow snappy_t var_run_t:file { create write };
#============= unconfined_t ==============
allow unconfined_t self:capability2 mac_admin;
#============= useradd_t ==============
allow useradd_t cloud_log_t:file { read write };
위와 같이 나온다면 /run/snapd/lock/의 certbot-dns-rfc2136.lock과 core20.lock의 보안 문맥(security context)을 restorecon으로 바꾸는 방법을 알려 주고 있다.
'll -Z /run/snapd/lock'으로 문제가 되는 파일들의 보안 문맥을 확인해 본다.
$ sudo ll -Z /run/snapd/lock/
-rw-------. root root system_u:object_r:var_run_t:s0 certbot-dns-rfc2136.lock
-rw-------. root root system_u:object_r:var_run_t:s0 certbot.lock
-rw-------. root root system_u:object_r:var_run_t:s0 core20.lock
이 파일들의 보안 문맥를 resotrecon으로 바꾸어 본다.
$ sudo restorecon -R -v /run/snapd/lock/core20.lock
restorecon reset /run/snapd/lock/core20.lock context system_u:object_r:var_run_t:s0->system_u:object_r:snappy_var_run_t:s0
$ sudo restorecon -R -v /run/snapd/lock/certbot-dns-rfc2136.lock
restorecon reset /run/snapd/lock/certbot-dns-rfc2136.lock context system_u:object_r:var_run_t:s0->system_u:object_r:snappy_var_run_t:s0
$ sudo restorecon -R -v /run/snapd/lock/certbot.lock
restorecon reset /run/snapd/lock/certbot.lock context system_u:object_r:var_run_t:s0->system_u:object_r:snappy_var_run_t:s0
다시 이 파일들의 보안 문맥을 확인해 보면, var_run_t에서 snappy_var_run_t로 바뀐 것을 볼 수 있다.
$ sudo ll -Z /run/snapd/lock/
-rw-------. root root system_u:object_r:snappy_var_run_t:s0 certbot-dns-rfc2136.lock
-rw-------. root root system_u:object_r:snappy_var_run_t:s0 certbot.lock
-rw-------. root root system_u:object_r:snappy_var_run_t:s0 core20.lock
덧글을 달아 주세요