Re: SELinux User Guide

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Murray McAllister wrote:


There are a few SELinux books, but these are very technical. We want to create a guide that people with no previous SELinux experience can use, to allow them to do what they want without turning SELinux off.



If anyone has any ideas about what they would like to see in the guide, or any corrections to the current topics we would like to include, please let us know. As well, user feedback and comments can be left at <https://fedoraproject.org/wiki/Docs/Drafts/SELinux_User_Guide/SELinux_Feedback>. A Fedora account (https://admin.fedoraproject.org/accounts/) is required to use the Wiki - if you do not have one, please do not hesitate to mail me directly, or respond to this thread.


Here are a few ideas with comments in no particular order:

0 - *Reference material* - Not something many will probably dive into but necessary for completeness. Just some links to other sources of info. Like the IBM page :

http://www.ibm.com/developerworks/linux/library/l-selinux/?ca=dgr-lnxw01SELinux

Even if there is no link directly to this page a small *Further Info* section like the Resources section at the bottom would still be useful, links to papers and web pages that can explain things in more detail if anyone is interested in finding out more of the nuts and bolts stuff.

Also perhaps links to any threads in the mailing list archives that help explain some of the concepts, these might be sprinkled about so they end up in relevant places. So if the section is about TE rules and there is a thread in the archives that was particularly good at explaining this or covers some key points then drop a link to the relevant thread there as additional reference or draw useful examples from the archives to use in explaining things. Showing how a real world problem was solved step by step has more impact than using myapp_t.

1 - *What SELinux isn't* - not an antivirus, will not fix vulnerabilities, etc ....Maybe slip in a few lines explaining the concept of default permit and why this is a bad idea. *No such thing as a free lunch*. Which leads to the concept of default deny and....

2 - *What is SELinux and why should I care* - MAC system uses type enforcement to confine applications.....default deny. Everything that is to be allowed must be expressed in policy. Policy is complex because the system is complex. Typical usage of SELinux, the apache example would fit well in this section. What the goal of refpolicy is, where it is , where its going. Its not called reference policy for nothing, use as a building block.

3 - *Explain unconfined*. For instance going through the archives I found this little tidbit :


Allowing unconfined_t to do things is ok; it is supposed to be unrestricted (and usually this happens automatically when you use the right type attributes on any new types you define, like the "file_type" attribute for file types and the "domain" attribute for domains). Allowing other domains to access unconfined_t is the concern.

http://www.nsa.gov/seLinux/list-archive/0610/17941.cfm

Above is the link to the message in the archives that I pulled the quote from, in case anyone is wondering about the context this was said in, though the statement by my estimation is straight forward and not context dependent in this case.

Some explanation of unconfined should be given and points like not letting other domains access unconfined should be made crystal clear, is it ever acceptable?If so under what conditions.

4 - *Admin Skills*

From recent traffic to fedora-selinux :

I guess this is the number one thing we need to teach unix
administrators.  With SELinux when you get a permission denied message
there are 3 things to check.  Ownership, Permissions which all admins
have ingrained into them, and SELinux Label.

chown OWNER PATH
chmod PERM PATH
restorecon PATH

This brings us to the Z option , very useful, often forgotten(maybe it should be automatic with commands like ls -l). Also a complete listing of SELinux commands. Refer people to man pages except where command may be commonly used by admins.

Listing of most commonly encountered issues with explanations and typical fixes. The most important thing is explaining how to determine what the problem is and the general diagnostic approach one should use.

How do I tell the difference between the common and uncommon issues? Is there a general way to determine this? Somethings are never easy to explain but clues as to what should be looked for are invaluable.

Listing of not so common problems and a general diagnostic approach to take for these issues.

At least a minimal list of info that you should include when asking for help on the mailing list. Who, what, when, where, why stuff that is useful in diagnosing problems. Like the top 5 things the SELinux guru would like to know or needs to know to help resolve the issue.



5 - *audit2why and audit2allow* - The man pages explain pretty well what to do and how to do it. I would definitely include an explanation of these because they can be the primary tool for solving denials but if your going to copy and paste the man page then I would say don't bother. So I like the man page but if you can't take a slightly different approach to explaining it then I don't see the point of reiterating what's available from man audit2allow. Maybe just changing the order of the info presented would be enough, so its a little less tech manual and a little more conversational, more wiki less man page. This is the overall goal anyway.

From the man page:

	Care must be exercised while acting on the output of  this  utility  to
       ensure  that  the  operations  being  permitted  do not pose a security
       threat. Often it is better to define new domains and/or types, or  make
       other structural changes to narrowly allow an optimal set of operations
       to succeed, as opposed to  blindly  implementing  the  sometimes  broad
changes recommended by this utility.

This seems to me to be the most important point when using audit2allow. Here as a segue into writing policy there should be some of the *do nots of policy writing*, so if audit2allow happens to suggest one of these it either definitely shouldn't be allowed or requiring permissions of this kind should be considered an application bug or policy bug , bounce it off your distros selinux list etc...


	  Certain permission denials are
       not fatal to the application, in which case it  may  be  preferable  to
       simply  suppress  logging  of  the denial via a ’dontaudit’ rule rather
       than an ’allow’ rule.

Breakdown the different rules, at least one of each, explain the conventions of policy language. How deep into policy langauge this needs to go I am not sure but most of what prompts people to turn SELinux off or ignore it is lack of understanding. Nothing turns people off like being confused but being in the dark is worse, too much info is better than not enough IMO. For instance the reserved word self , the wildcard and complement operators, all useful to know about and very dangerous if you stumble across it and don't fully understand the implications of using or not using it.

6 - *Explanation of the major concepts*. Types, domains, context, object classes etc....

7 - *Thorough breakdown of AVC*. This is really important. It is essentially the face of SELinux. If all goes well you'll never know its there but if something breaks then this is likely to make me want to take a header off the nearest skyscraper :

time->Tue Jul 15 22:02:04 2008
type=SYSCALL msg=audit(1216173724.561:64): arch=c000003e syscall=6 success=no exit=-13 a0=1bcdaa5 a1=7fff450fea80 a2=7fff450fea80 a3=7faa3d0e4810 items=0 ppid=9135 pid=9143 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts2 ses=2 comm="passwd" exe="/usr/bin/passwd" subj=unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 key=(null) type=AVC msg=audit(1216173724.561:64): avc: denied { search } for pid=9143 comm="passwd" name="tmp" dev=dm-0 ino=12 scontext=unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:tmp_t:s0 tclass=dir

Now experienced admins can figure out most of it or google for answers but this is for the inexperienced, running a desktop system, exactly where this is needed most, they may not have basic admin skills or care about learning them, so a comprehensive breakdown of the AVC is essential. I should be able to bookmark this page and use it for reference.

8 - *ausearch* is another must have in the arsenal of the admin. Alot of options here. Just a small random selection of them :

 -c, --comm comm-name
Search for an event based on the given comm name. The comm name is the executable’s name from the task structure.

       -hn, --host host-name
Search for an event with the given host name. The hostname can be either a hostname, fully qualified domain name, or numeric network address. No attempt is made to
              resolve numeric addresses to domain names or aliases.

       -if, --input file-name
Use the given file instead if the logs. This is to aid analysis where the logs have been moved to another machine or only part of a log was saved.

       --input-logs
Use the log file location from auditd.conf as input for searching. This is needed if you are using ausearch from a cron job.


*Lots of ways to search. Can be used in conjunction with audit2allow:*

[root@localhost ~]# ausearch -m avc | audit2allow


#============= NetworkManager_t ==============
allow NetworkManager_t fixed_disk_device_t:blk_file getattr;

#============= avahi_t ==============
allow avahi_t user_home_t:file write;

#============= consoletype_t ==============
allow consoletype_t dhcpc_state_t:file read;


9 - *Examples,Examples,Examples*

What did I search by?How can this be useful to me? Its all in the man pages of course but man pages are dry and the output is intimidating.

[root@localhost ~]# ausearch -a 30 | grep SYSCALL
type=SYSCALL msg=audit(1212681693.050:30): arch=c000003e syscall=59 success=yes exit=0 a0=403665 a1=7fff4a0fbba0 a2=7fff4a0fc228 a3=0 items=0 ppid=5712 pid=5713 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="umount" exe="/bin/umount" subj=system_u:system_r:mount_t:s0 key=(null) type=SYSCALL msg=audit(1213111393.121:30): arch=c000003e syscall=2 success=no exit=-13 a0=7fff0a76d7d0 a1=2 a2=14 a3=0 items=0 ppid=4308 pid=4309 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="lsusb" exe="/sbin/lsusb" subj=system_u:system_r:cupsd_config_t:s0 key=(null) type=SYSCALL msg=audit(1214321269.400:30): arch=c000003e syscall=59 success=yes exit=0 a0=14ebba0 a1=14a53c0 a2=14a8b20 a3=8 items=0 ppid=4104 pid=4114 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1 comm="iptables" exe="/sbin/iptables" subj=unconfined_u:system_r:iptables_t:s0 key=(null)


Leave no stone unturned. Make them laugh, make them cry, make an impression. Sometimes when explaining technical concepts to the uninitiated you must sacrifice being strictly accurate in favor of getting the larger point across. Once the larger point is made then each person can begin to work out the details but having the details without an appreciation of the larger picture causes more problems than it solves.


Max



--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux