Individual Domains for Particular PHP Scripts.

Daniel J Walsh dwalsh at redhat.com
Thu Jun 23 16:27:22 UTC 2005


TobyD at wolke7.net wrote:

>Hi SELinux users!
>
>I've
>read:
>http://fedora.redhat.com/docs/selinux-apache-fc3/sn-further-approaches.html#sn-cgi-subdomains
>
>My Testbed: FC4 with selinux-policy-strict-sources-1.23.16-6.
>
>My Steps:
>
>#ls -laZ /var/www/html/
>drwxr-xr-x  root     root     system_u:object_r:httpd_sys_content_t .
>drwxr-xr-x  root     root     system_u:object_r:httpd_sys_content_t ..
>-rw-r--r--  root     root     system_u:object_r:httpd_php_script_a_t a.php
>-rw-r--r--  root     root     system_u:object_r:httpd_php_script_b_t b.php
>-rw-r--r--  root     root     system_u:object_r:httpd_sys_content_t
>index.html
>
>#cat a.php
><?php
>$fp = fopen("b.php","r");
>if ($fp)
>{
>echo "sorry, could access the another domain :-(";
>}
>fclose($fp);
>?>
>
>#cat myphp.te
>#file types httpd_php_script_x_t
>type httpd_php_script_a_t, file_type, sysadmfile;
>type httpd_php_script_b_t, file_type, sysadmfile;
>
>#process domains httpd_php_domain_x_t
>type httpd_php_domain_a_t, domain, privmail;
>type httpd_php_domain_b_t, domain, privmail;
>
>#allow apache acces the new types
>allow httpd_t httpd_php_script_a_t:file { getattr read };
>allow httpd_t httpd_php_script_b_t:file { getattr read };
>
>#authorize system_r for httpd_php_domain_x_t;
>role system_r types httpd_php_domain_a_t;
>role system_r types httpd_php_domain_b_t;
>
>#domain auto transition
>domain_auto_trans(httpd_t, httpd_php_script_a_t, httpd_php_domain_a_t);
>domain_auto_trans(httpd_t, httpd_php_script_b_t, httpd_php_domain_a_t);
>
># make reload
>
>#cat /selinux/enforce
>1
>
>Now, i'll expect an Error, or Acces Denied while Browseraccess
>to http://localhost/a.php, but a.php reports "sorry, could access
>the another domain :-(". Neither avc denied messages, nor any other Errors.
>
>What's wrong in my policy?  Doesn't works the domain auto transition
>properly ? How to separate PHP Scripts in their own domains?
>
>Any Help welcome! Thanks in Advance!
>Toby
>
>
>  
>
A better approach would be to create a te file with the following


more domains/program/myphp.te
#myphp.te
apache_domain(myphp)

And
more file_contexts/program/myphp.fc
/var/www/cgi-bin/myphp          -- 
system_u:object_r:httpd_myphp_script_exec_t

This will create file_types of

type httpd_myphp_content_t, file_type, httpdcontent, sysadmfile, 
customizable;
type httpd_myphp_htaccess_t, file_type, sysadmfile, customizable;
type httpd_myphp_script_exec_t, file_type, sysadmfile, customizable;
type httpd_myphp_script_ro_t, file_type, httpdcontent, sysadmfile, 
customizable;
type httpd_myphp_script_rw_t, file_type, httpdcontent, sysadmfile, 
customizable;
type httpd_myphp_script_ra_t, file_type, httpdcontent, sysadmfile, 
customizable;

Which you can define in your fc file to files/directories depending on 
what your script wants to do.  You can also add additional allow rules 
to your te file to grant it access.




More information about the fedora-selinux-list mailing list