Re: Policies and Ports - how to define access?
Robert Sharp <selinux-/[email protected]> Fri, 2 Dec 2016 12:05:50 +0000
| Newsgroups | gmane.linux.gentoo.hardened |
|---|---|
| Message-ID | <[email protected]> |
On 01/12/16 15:31, Jason Zaman wrote: > On Thu, Dec 01, 2016 at 10:24:21AM +0000, Robert Sharp wrote: >> Hi, >> >> >> I've looked at the Gentoo SELinux web pages etc, the SELinux Handbook >> and through the Reference Policy and I cannot find the answer to a >> simple question. >> >> I am writing a small policy for my backup system and I want to be able >> to a) access a MongoDB running on remote servers, and b) use rsync. I >> can see two AVCs relating to my port use and I know how I can fix the >> problem from the command line, but surely I should be able to address >> this in the policy? I think there is an rsync interface I need to call >> (rsync_entry_type(mytype_t)) and I assume this will run rsync in the >> right domain? >> >> Mongo has a policy but the only interface is admin. All I need to do >> locally is connect to the port. Can I use "portcon" in a policy to do >> this or do I need to do something else? >> >> Thanks, >> >> Robert Sharp > What port number is it using? does that port already have a label? if it > does then you use the corenet stuff, eg: > > corenet_tcp_connect_mysqld_port(foo_t) would allow foo_t to connect to > these ports: > > # semanage port -l | grep mysql > mysqld_port_t tcp 1186, 3306, 63132-63164 > > if there is no good label on the port currently, you can define your own > with semanage port. or it can be added to the base policy, because of > the way pp files work, you cannot do portcon in a module. If there is a > port that is missing a label, we can add it to the base in both refpol > and gentoos policy. > > Look at policy/modules/kernel/corenetwork.te.in in the policy for > adding a new one. > > As for rsync, if you want your script to be able to run it without > changing domain, you probably want rsync_exec(), if you want to transition > to rsync_t, then rsync_domtrans() > > -- Jason > Mongo uses tcp on port 27017 and there is nothing defined for this in the core policy. There is a mongodb policy in contrib but it uses corenet_all_recvfrom_unlabeled, corenet_tcp_sendrecv_generic_if and the likes. From what I can make out, semanage port will only allow me to assign a port to an existing label? Looks like I can only define a port label in the reference policy? What is the best way forward? If I was to add something to corenetwork.te it would look like this, I guess: type mongodb_port_t, port_type, defined_port_type; type mongodb_client_packet_t, packet_type, client_packet_type; type mongodb_server_packet_t, packet_type, server_packet_type; typeattribute mongodb_port_t unreserved_port_type; portcon tcp 27017 gen_context(system_u:object_r:mongodb_port_t,s0) Would that then create a "corenet_tcp_connect_mongodb_port" interface? Incidentally, if I have a little family of apps that use use a number of unreserved ports. Seems a little monolithic if the only way I can integrate them is to have them included in the base policy? Luckily they are not on the machine I am trying to get to strict atm, but they are on the next one. Thanks for your help, as always! Robert