Hello,
I have created a SELinux policy file for heimdal with LDAP support. It
also has the rulse to make pam_krb5 for heimdal and passwd work and to
let slapd use saslauth.
This makes a good central authenticating environment posible under SELinux.
It is based on the openldap, kerberos and saslauth policy files.
I would like some comment on the policy, what can I do better.
Is this a odd or nonstandard daemon configuration, or could it be
integrated in the portage tree?
I would be interested in maintaining this policy my self.
Mivz
#heimdal
daemon_domain(kpasswdd)
type kpasswd_exec_t, file_type, exec_type;
type slapd_keytab_t, file_type, sysadmfile;
#heimdal kpasswdd
can_network_server(kpasswdd_t)
allow kpasswdd_t slapd_t:unix_stream_socket connectto;
allow kpasswdd_t self:unix_dgram_socket { create connect write };
allow kpasswdd_t self:unix_stream_socket { connect create getattr read write };
allow kpasswdd_t self:capability net_bind_service;
allow kpasswdd_t self:netlink_route_socket { create bind getattr read write
nlmsg_read };
#/var/run/openldap/slapd.sock
allow kpasswdd_t slapd_var_run_t:dir search;
allow kpasswdd_t slapd_var_run_t:sock_file write;
#m-key / acl
allow kpasswdd_t krb5kdc_conf_t:file { read lock getattr };
#/etc/krb5.conf
allow kpasswdd_t krb5_conf_t:file { read getattr };
#/etc/nsswitch.conf
allow kpasswdd_t etc_t:file read;
#kpasswdd port is kerberos_admin_port 464
allow kpasswdd_t kerberos_admin_port_t:{ udp_socket tcp_socket } name_bind;
#heimdal kdc LDAP backend
allow krb5kdc_t slapd_t:unix_stream_socket connectto;
allow krb5kdc_t slapd_var_run_t:dir search;
allow krb5kdc_t slapd_var_run_t:sock_file write;
#pam_krb5
allow local_login_t device_t:chr_file { relabelfrom relabelto };
allow local_login_t krb5_keytab_t:file { lock read };
allow local_login_t self:netlink_route_socket { bind create getattr nlmsg_read
read write };
#saslauth
allow saslauthd_t krb5_keytab_t:file { lock read };
allow saslauthd_t self:netlink_route_socket { create bind read getattr write
nlmsg_read };
allow slapd_t saslauthd_var_run_t:dir search;
allow slapd_t saslauthd_t:unix_stream_socket connectto;
allow slapd_t saslauthd_var_run_t:sock_file write;
#slapd
#/etc/openldap/ldap.keytab
allow slapd_t slapd_keytab_t:file { lock read };
#/etc/krb5.conf
allow slapd_t krb5_conf_t:file { read getattr };
#kadmind
allow kadmind_t self:process setpgid; #??? stays root, but crashes without?
#passwd
can_network_server(passwd_t)
allow passwd_t krb5_conf_t:file { getattr read };
allow passwd_t self:netlink_route_socket { read nlmsg_read write getattr bind
create };
allow passwd_t sysctl_kernel_t:dir search;
allow passwd_t sysctl_kernel_t:file read;
allow passwd_t self:tcp_socket connect;
allow passwd_t ldap_port_t:tcp_socket name_connect;
#/tmp/krb5cc
allow user_t local_login_tmp_t:file { read lock append };
#Needed for whoami / id to work. Else: "I have no name!" for ldap users.
allow user_t nscd_var_run_t:dir search;
# gentoo file locations heimdal
/usr/sbin/kdc -- system_u:object_r:krb5kdc_exec_t
/usr/sbin/kpasswdd --
system_u:object_r:kpasswdd_exec_t
/usr/sbin/kpasswd -- system_u:object_r:kpasswd_exec_t
/var/heimdal/kadmind.acl -- system_u:object_r:krb5kdc_conf_t
/var/heimdal/m-key -- system_u:object_r:krb5kdc_conf_t
#slapd keytab
/etc/openldap/ldap.keytab -- system_u:object_r:slapd_keytab_t