Estou tentando usar o SELinux com um sistema que tem rsyslogd
chamando um binário:
# rsyslog configuration file
module(load="omprog")
template(
name="snmp_template"
type="string"
string="%msg%audit2allow -a /var/log/audit/audit.log
#============= syslogd_t ==============
allow syslogd_t security_t:security compute_av;
allow syslogd_t self:capability audit_write;
allow syslogd_t self:netlink_selinux_socket { bind create };
allow syslogd_t self:passwd passwd;
allow syslogd_t snmpd_var_lib_t:dir { write remove_name add_name };
allow syslogd_t snmpd_var_lib_t:file { rename create unlink append };
allow syslogd_t su_exec_t:file { read getattr open execute execute_no_trans };
allow syslogd_t system_dbusd_t:unix_stream_socket connectto;
allow syslogd_t system_dbusd_var_run_t:sock_file write;
7"
)
if ( $msg contains "SFCS_EVENT: " ) then action(
type="omprog"
binary="/usr/libexec/redacted/send_snmp"
template="snmp_template"
)
O programa send_snmp
é executado com o tipo syslog_t
, herdado de rsyslogd
. Aqui estão as permissões necessárias para executar:
# rsyslog configuration file
module(load="omprog")
template(
name="snmp_template"
type="string"
string="%msg%audit2allow -a /var/log/audit/audit.log
#============= syslogd_t ==============
allow syslogd_t security_t:security compute_av;
allow syslogd_t self:capability audit_write;
allow syslogd_t self:netlink_selinux_socket { bind create };
allow syslogd_t self:passwd passwd;
allow syslogd_t snmpd_var_lib_t:dir { write remove_name add_name };
allow syslogd_t snmpd_var_lib_t:file { rename create unlink append };
allow syslogd_t su_exec_t:file { read getattr open execute execute_no_trans };
allow syslogd_t system_dbusd_t:unix_stream_socket connectto;
allow syslogd_t system_dbusd_var_run_t:sock_file write;
7"
)
if ( $msg contains "SFCS_EVENT: " ) then action(
type="omprog"
binary="/usr/libexec/redacted/send_snmp"
template="snmp_template"
)
Permitir processos do tipo syslog_d
todos esses privilégios parece ser uma má idéia. Existe uma maneira razoavelmente simples de restringi-los ao meu programa send_snmp
e continuar negando-os a outros processos syslogd_t
?
P.S. "Simples" significa "pode ser implementado e testado por um novato do SELinux em um dia útil".