mirror of
https://passt.top/passt
synced 2024-12-22 05:35:23 +00:00
selinux: Use auth_read_passwd() interface for all our getpwnam() needs
If passt or pasta are started as root, we need to read the passwd file (be it /etc/passwd or whatever sssd provides) to find out UID and GID of 'nobody' so that we can switch to it. Instead of a bunch of allow rules for passwd_file_t and sssd macros, use the more convenient auth_read_passwd() interface which should cover our usage of getpwnam(). The existing rules weren't actually enough: # strace -e openat passt -f [...] Started as root, will change to nobody. openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 4 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4 openat(AT_FDCWD, "/lib64/libnss_sss.so.2", O_RDONLY|O_CLOEXEC) = 4 openat(AT_FDCWD, "/var/lib/sss/mc/passwd", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) openat(AT_FDCWD, "/var/lib/sss/mc/passwd", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 with corresponding SELinux warnings logged in audit.log. Reported-by: Minxi Hou <mhou@redhat.com> Analysed-by: Miloš Malik <mmalik@redhat.com> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
6e1e44293e
commit
5e24466677
@ -47,8 +47,6 @@ require {
|
|||||||
type port_t;
|
type port_t;
|
||||||
type http_port_t;
|
type http_port_t;
|
||||||
|
|
||||||
type passwd_file_t;
|
|
||||||
|
|
||||||
class netlink_route_socket { bind create nlmsg_read };
|
class netlink_route_socket { bind create nlmsg_read };
|
||||||
type sysctl_net_t;
|
type sysctl_net_t;
|
||||||
|
|
||||||
@ -96,8 +94,7 @@ allow passt_t self:capability { sys_tty_config setpcap net_bind_service setuid s
|
|||||||
allow passt_t self:cap_userns { setpcap sys_admin sys_ptrace };
|
allow passt_t self:cap_userns { setpcap sys_admin sys_ptrace };
|
||||||
allow passt_t self:user_namespace create;
|
allow passt_t self:user_namespace create;
|
||||||
|
|
||||||
allow passt_t passwd_file_t:file read_file_perms;
|
auth_read_passwd(passt_t)
|
||||||
sssd_search_lib(passt_t)
|
|
||||||
|
|
||||||
allow passt_t proc_net_t:file read;
|
allow passt_t proc_net_t:file read;
|
||||||
allow passt_t net_conf_t:file { open read };
|
allow passt_t net_conf_t:file { open read };
|
||||||
|
@ -68,9 +68,6 @@ require {
|
|||||||
type system_dbusd_t;
|
type system_dbusd_t;
|
||||||
type systemd_hostnamed_t;
|
type systemd_hostnamed_t;
|
||||||
type systemd_systemctl_exec_t;
|
type systemd_systemctl_exec_t;
|
||||||
type passwd_file_t;
|
|
||||||
type sssd_public_t;
|
|
||||||
type sssd_var_lib_t;
|
|
||||||
class dbus send_msg;
|
class dbus send_msg;
|
||||||
class system module_request;
|
class system module_request;
|
||||||
class system status;
|
class system status;
|
||||||
@ -115,8 +112,7 @@ allow pasta_t self:capability { setpcap net_bind_service sys_tty_config dac_read
|
|||||||
allow pasta_t self:cap_userns { setpcap sys_admin sys_ptrace net_admin net_bind_service };
|
allow pasta_t self:cap_userns { setpcap sys_admin sys_ptrace net_admin net_bind_service };
|
||||||
allow pasta_t self:user_namespace create;
|
allow pasta_t self:user_namespace create;
|
||||||
|
|
||||||
allow pasta_t passwd_file_t:file read_file_perms;
|
auth_read_passwd(pasta_t)
|
||||||
sssd_search_lib(pasta_t)
|
|
||||||
|
|
||||||
domain_auto_trans(pasta_t, bin_t, unconfined_t);
|
domain_auto_trans(pasta_t, bin_t, unconfined_t);
|
||||||
domain_auto_trans(pasta_t, shell_exec_t, unconfined_t);
|
domain_auto_trans(pasta_t, shell_exec_t, unconfined_t);
|
||||||
@ -178,12 +174,9 @@ allow pasta_t init_t:system status;
|
|||||||
allow pasta_t unconfined_t:dir search;
|
allow pasta_t unconfined_t:dir search;
|
||||||
allow pasta_t unconfined_t:file read;
|
allow pasta_t unconfined_t:file read;
|
||||||
allow pasta_t unconfined_t:lnk_file read;
|
allow pasta_t unconfined_t:lnk_file read;
|
||||||
allow pasta_t passwd_file_t:file { getattr open read };
|
|
||||||
allow pasta_t self:process { setpgid setcap };
|
allow pasta_t self:process { setpgid setcap };
|
||||||
allow pasta_t shell_exec_t:file { execute execute_no_trans map };
|
allow pasta_t shell_exec_t:file { execute execute_no_trans map };
|
||||||
|
|
||||||
allow pasta_t sssd_var_lib_t:dir search;
|
|
||||||
allow pasta_t sssd_public_t:dir search;
|
|
||||||
allow pasta_t hostname_exec_t:file { execute execute_no_trans getattr open read map };
|
allow pasta_t hostname_exec_t:file { execute execute_no_trans getattr open read map };
|
||||||
allow pasta_t system_dbusd_t:unix_stream_socket connectto;
|
allow pasta_t system_dbusd_t:unix_stream_socket connectto;
|
||||||
allow pasta_t system_dbusd_t:dbus send_msg;
|
allow pasta_t system_dbusd_t:dbus send_msg;
|
||||||
|
Loading…
Reference in New Issue
Block a user