-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 01/17/2011 11:47 AM, Erinn Looney-Triggs wrote: > This is a lot of groping about in the dark for me with SELinux so please > excuse any completely absurd choices I made :). > > I posted before about getting a setup working with mod_passenger, I was > able to work things around such that mod_passenger worked fine with > selinux enabled. I came up with this small policy: The policy for passenger needs to be revisited. mgrepl mentioned that he is going to cooperate with some ruby related people to fix it. I havent noticed any progress on that front though. What you have below, can hardly be called policy ;) Its just avc denials ran through audit2allow -M. Basically it compromises the httpd_t domain. But atleast you got it to work for now. Keep an eye open on the selinux-policy changelog with regard to passenger. When policy is redone you should be able to remove your myruby module and update to latest available selinux-policy instead to get passenger to work with selinux. > module myruby 1.0; > > require { > type httpd_tmp_t; > type lib_t; > type httpd_t; > type tmp_t; > class sock_file { write create unlink getattr setattr }; > class capability { fowner fsetid }; > class file { read getattr execute_no_trans }; > class fifo_file { create unlink getattr setattr }; > } > > #============= httpd_t ============== > allow httpd_t httpd_tmp_t:fifo_file { create unlink getattr setattr }; > allow httpd_t httpd_tmp_t:sock_file { write create unlink getattr setattr }; > allow httpd_t lib_t:file execute_no_trans; > allow httpd_t self:capability { fowner fsetid }; > allow httpd_t tmp_t:file { read getattr }; > > It worked just fine though I had a bit of a gripe with the execute on > lib_t, this was due to the mod_passenger module being automatically > labelled as lib_t (it was located in /usr/local/ruby/lib, hence the > labelling), but I couldn't really change things as they were in > production. Well now we are going through an upgrade to Rails 3 and it > is not playing nicely with SELinux again, so around we go with > audit2allow, this time I changed the passenger module to be labelled > like all the other apache modules (httpd_modules_t), and there are a few > other executables that Passenger requires, I labelled them as apache > modules as well (for better or worse, I tried httpd_script_t as well > thinking that it would fit better, but I don't know if it makes much > difference). However, after many runs through adit2allow the outcome is > pretty vulgar: > module myruby 1.0; > > require { > type unconfined_t; > type semanage_t; > type hplip_t; > type setrans_t; > type mysqld_t; > type syslogd_t; > type getty_t; > type xfs_t; > type initrc_t; > type irqbalance_t; > type httpd_modules_t; > type snmpd_t; > type tmp_t; > type avahi_t; > type rpm_t; > type gpm_t; > type unconfined_execmem_t; > type restorecond_t; > type init_t; > type httpd_tmp_t; > type ntpd_t; > type fsdaemon_t; > type postfix_master_t; > type auditd_t; > type udev_t; > type postfix_qmgr_t; > type audisp_t; > type system_dbusd_t; > type cupsd_t; > type inetd_t; > type portmap_t; > type postfix_pickup_t; > type kernel_t; > type setfiles_t; > type hald_t; > type apmd_t; > type crond_t; > type rpcd_t; > type httpd_t; > class capability { fowner sys_resource fsetid }; > class process ptrace; > class dir { getattr search }; > class file { read getattr execute_no_trans }; > class sock_file { write create unlink getattr setattr }; > } > > #============= httpd_t ============== > allow httpd_t apmd_t:dir { getattr search }; > allow httpd_t apmd_t:file read; > allow httpd_t audisp_t:dir { getattr search }; > allow httpd_t audisp_t:file read; > allow httpd_t auditd_t:dir { getattr search }; > allow httpd_t auditd_t:file read; > allow httpd_t avahi_t:dir { getattr search }; > allow httpd_t avahi_t:file read; > allow httpd_t crond_t:dir { getattr search }; > allow httpd_t crond_t:file read; > allow httpd_t cupsd_t:dir { getattr search }; > allow httpd_t cupsd_t:file read; > allow httpd_t fsdaemon_t:dir { getattr search }; > allow httpd_t fsdaemon_t:file read; > allow httpd_t getty_t:dir { getattr search }; > allow httpd_t getty_t:file read; > allow httpd_t gpm_t:dir { getattr search }; > allow httpd_t gpm_t:file read; > allow httpd_t hald_t:dir { getattr search }; > allow httpd_t hald_t:file read; > allow httpd_t hplip_t:dir { getattr search }; > allow httpd_t hplip_t:file read; > allow httpd_t httpd_modules_t:file execute_no_trans; > allow httpd_t httpd_tmp_t:sock_file { write create unlink getattr setattr }; > allow httpd_t inetd_t:dir { getattr search }; > allow httpd_t inetd_t:file read; > allow httpd_t init_t:dir { getattr search }; > allow httpd_t init_t:file read; > allow httpd_t initrc_t:dir { getattr search }; > allow httpd_t initrc_t:file read; > allow httpd_t irqbalance_t:dir { getattr search }; > allow httpd_t irqbalance_t:file read; > allow httpd_t kernel_t:dir { getattr search }; > allow httpd_t kernel_t:file read; > allow httpd_t mysqld_t:dir { getattr search }; > allow httpd_t mysqld_t:file read; > allow httpd_t ntpd_t:dir { getattr search }; > allow httpd_t ntpd_t:file read; > allow httpd_t portmap_t:dir { getattr search }; > allow httpd_t portmap_t:file read; > allow httpd_t postfix_master_t:dir { getattr search }; > allow httpd_t postfix_master_t:file read; > allow httpd_t postfix_pickup_t:dir { getattr search }; > allow httpd_t postfix_pickup_t:file read; > allow httpd_t postfix_qmgr_t:dir { getattr search }; > allow httpd_t postfix_qmgr_t:file read; > allow httpd_t restorecond_t:dir { getattr search }; > allow httpd_t restorecond_t:file read; > allow httpd_t rpcd_t:dir { getattr search }; > allow httpd_t rpcd_t:file read; > allow httpd_t rpm_t:dir { getattr search }; > allow httpd_t rpm_t:file read; > allow httpd_t self:capability { fowner sys_resource fsetid }; > allow httpd_t self:process ptrace; > allow httpd_t semanage_t:dir getattr; > allow httpd_t setfiles_t:dir getattr; > allow httpd_t setrans_t:dir { getattr search }; > allow httpd_t setrans_t:file read; > allow httpd_t snmpd_t:dir { getattr search }; > allow httpd_t snmpd_t:file read; > allow httpd_t syslogd_t:dir { getattr search }; > allow httpd_t syslogd_t:file read; > allow httpd_t system_dbusd_t:dir { getattr search }; > allow httpd_t system_dbusd_t:file read; > allow httpd_t tmp_t:file { read getattr }; > allow httpd_t udev_t:dir { getattr search }; > allow httpd_t udev_t:file read; > allow httpd_t unconfined_execmem_t:dir { getattr search }; > allow httpd_t unconfined_execmem_t:file read; > allow httpd_t unconfined_t:dir { getattr search }; > allow httpd_t unconfined_t:file read; > allow httpd_t xfs_t:dir { getattr search }; > allow httpd_t xfs_t:file read; > > This seems like an absurd amount of access to me, it gets things going > but really? Anyone have a bit of experience with mod_passenger and Rails > 3, any insight? Now I did go through and manually prune out what I > though was wrong and came up with this (this was when I was testing the > httpd_sys_script type, just mentally change it to httpd_t): > module myruby 1.0; > require { > type httpd_tmp_t; > type httpd_sys_script_t; > type devpts_t; > type httpd_t; > type tmp_t; > type udev_tbl_t; > class process { ptrace setpgid getsched }; > class sock_file { write create unlink getattr setattr }; > class capability { kill sys_resource dac_override > dac_read_search chown fsetid setgid setuid fowner }; > class chr_file { read write ioctl }; > class file { read getattr execute_no_trans }; > class fifo_file { create unlink getattr setattr }; > class lnk_file read; > class dir search; > class unix_stream_socket connectto; > } > > #============= httpd_t ============== > allow httpd_t httpd_tmp_t:fifo_file { create unlink getattr setattr }; > allow httpd_t httpd_tmp_t:sock_file { write create unlink getattr setattr }; > allow httpd_t self:capability { fowner fsetid }; > allow httpd_t tmp_t:file { read getattr }; > allow httpd_t httpd_sys_script_t:unix_stream_socket connectto; > > > #============= httpd_sys_script_t ============== > allow httpd_sys_script_t devpts_t:chr_file { read write ioctl }; > allow httpd_sys_script_t self:capability { kill dac_read_search fsetid > sys_resource setuid setgid fowner chown dac_override }; > allow httpd_sys_script_t self:process { getsched setpgid }; > allow httpd_sys_script_t udev_tbl_t:lnk_file read; > allow httpd_sys_script_t devpts_t:dir search; > > System works, passenger runs etc. but an obscene amount of logs are > being pumped into the audit logs for each of those directory reads etc. > I suppose I could add dontaudit rules (not that I know how). But again > seeking any other insights into this. > > Thanks, > -Erinn > -- > selinux mailing list > selinux@xxxxxxxxxxxxxxxxxxxxxxx > https://admin.fedoraproject.org/mailman/listinfo/selinux -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ iEYEARECAAYFAk00MJQACgkQMlxVo39jgT8uHQCeIeMSzdK77vSGPHfWJnsqA8I1 QgIAn2Yd8cYnpHLUV/pEQdMySR1RIzj/ =j5xq -----END PGP SIGNATURE----- -- selinux mailing list selinux@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/selinux