Dominick Grift wrote: >On 08/16/2010 03:58 PM, Moray Henderson (ICT) wrote: >> Hi all, >> >> I've been looking at getting a Ruby on Rails app working through >> Passenger under CentOS 5.5. I felt it should run in its own security >> context, so I came up with the following sample module. Please comment. > > >This is not how i would do it probably, although i am not sure if my >approach would be much better. > >Instead of using the httpd_content_template() i would treat mod_passenger >as a normal domain. > >Then allow httpd_t to transition to the new mod_passenger domain when it >runs the passenger executable file. > >The advantage of this, i think, is that you do not have to allow rules >like this: > >allow httpd_t self:capability { fowner fsetid }; > >Also with regard to the policy below: > >allow httpd_t httpd_myapp_script_t:process { siginh rlimitinh >noatsecure }; > >This should not be needed and is by default silently denied. You're right, I removed the allow ...:process rule, and it still worked. How do I get httpd_t to transition to an ordinary domain? I've been experimenting with domain_entry_file and domain_transition_pattern, but keep getting denials for httpd_t writing to myapp_script_rw_t. It obviously has not transitioned by the time it tries to write its temporary files in /var/run/passenger. Are any of the macros in /usr/share/selinux/devel/include/support/ documented anywhere? I couldn't find them in the Tresys Refpolicy API documentation or the selinuxproject.org wiki. Oh, I see, it's domain_auto_transition_pattern I need, not domain_transition_pattern. I'm trying to use this refpolicy stuff, but honestly, I find it easier and quicker to program the thing manually than to find the macro to do it for me! Now I'm getting a load of process signal denials and a "Cannot stat '/usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.15/bin/passenger-spawn-serv er': Permission denied (13)" but at least it's in the correct domain now. I'll keep working on it. >> Summary >> ------- >> >> The policy creates a new set of apache content types using >> apache_content_template. The Passenger >> ApplicationPoolServerExecutable is given type >> httpd_myapp_script_exec_t, so the app will execute in >> httpd_myapp_script_t. The remaining Passenger files, and the Rails >> app itself, are httpd_myapp_content_t. PassengerTempDir is set to >> /var/run/passenger, and given httpd_myapp_script_rw_t to allow the >sockets and stuff to be created. >> >> Source >> ------ >> >> #### myapp.te #### >> policy_module(myapp,1.0) >> >> # Create a set of apache content types for myapp >> apache_content_template(myapp); >> >> # Give running app access to system things it will ask for >> kernel_read_kernel_sysctls(httpd_myapp_script_t); >> miscfiles_read_certs(httpd_myapp_script_t); >> term_use_all_user_ptys(httpd_myapp_script_t); >> >> # Allow apache to create and communicate with Passenger allow httpd_t >> self:capability { fowner fsetid }; allow httpd_t >> httpd_myapp_script_t:unix_stream_socket rw_socket_perms; allow httpd_t >> httpd_myapp_script_t:process { siginh rlimitinh noatsecure }; allow >> httpd_t httpd_myapp_script_rw_t:fifo_file manage_file_perms; allow >> httpd_t httpd_myapp_script_rw_t:sock_file { setattr unlink }; >> >> # Access that Passenger will need >> allow httpd_myapp_script_t self:capability { chown dac_override >> dac_read_search fowner fsetid setgid setuid }; allow >> httpd_myapp_script_t httpd_t:unix_stream_socket { read write }; >> >> #### myapp.fc #### >> /usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.15/lib/phusion_passenger/A >> pp >> licationPoolServerExecutable -- >> gen_context(system_u:object_r:httpd_myapp_script_exec_t, s0) >> /usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.15(/.*)? >> gen_context(system_u:object_r:httpd_myapp_content_t, s0) >> /usr/local/lib/myapp(/.*)? >> gen_context(system_u:object_r:httpd_myapp_content_t, s0) >> /var/run/passenger(/.*)? >> gen_context(system_u:object_r:httpd_myapp_script_rw_t, s0) -- selinux mailing list selinux@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/selinux