Results 1 to 1 of 1
|
Enjoy an ad free experience by logging in. Not a member yet? Register.
|
|
-
05-08-2005 #1
SELinux on Fedora Core workstations
Introduction
This post is really just an introduction to SELinux on a desktop Linux machine. It is not intended for people running servers. It is also not an in depth look at SELinux, for that try here :- http://www.nsa.gov/selinux/ and http://www.nsa.gov/selinux/faq.html or try the FAQs at http://www.crypt.gen.nz/selinux/faq.html.
I have based this piece on my experiences with my home PC running, first Redhat 9, then Fedora Core 1 then 2 and now 3.
What is SELinux
SELinux is additional security that runs behind the normal Linux security. Note that I say behind normal Linux security. This means that SELinux only gets referred to if your request passes the normal Linux security.
SELinux comes with Fedora Core 2 and Fedora Core 3.
Do I need SELinux
The honest answer to that is, as a desktop user, no. Normal, non-SELinux, is probably secure enough for you, but as you get it as standard with fc2 and fc3, why not use it.
Strict and Targeted
The SELinux developers quickly realised that strict SELinux was going to cause some real problems to users and would require a fair degree of expertise in the end users, so they created a second flavour called targeted. Targeted is the flavour (policy) that you get by default with fc2 and fc3.
Targeted SELinux targets a number of daemons on your Linux machine that could be vulnerable to attack or be devastating to your machine. These daemons are - dhcpd, httpd, named, nscd, ntpd, portmapd, snmpd, squid and syslogd. The rest of the system runs as if SELinux was not switched on (they run in something called the unconfined_t domain).
Targeted policy
This is the default flavour of SELinux that you get with fc2 and fc3. From the list of daemons above, you can see that as a desktop user you will probably only ever be running two or three of them (syslogd, portmapd, and maybe dhcpd).
It is the targeted policy that I run on my home PC.
Strict Policy
I tried switching from targeted to strict on my home PC, but I couldn't even get it to boot (the init task ran foul of SELinux and I just got screens and screens of avc : denied messages. I suspect that this was due to me not running a relabel on my filesystem, and I couldn't use the autorelabel (more of that later) after reboot facility, as I could get it to boot (more on how I go out of that problem later). So I won't be going into the strict policy of SELinux in this piece.
What you notice with SELinux (targeted policy) running
The first thing you'll see is more messages at boot up. You get the following (or something similar) before you get the Init message (and then all of the various system process start okay messages).
Code:security: 3 users, 4 roles, 320 types, 23 bools security: 53 classes, 10921 rules SELinux: Completing initialization. SELinux: Setting up existing superblocks. SELinux: initialized (dev hda2, type ext3), uses xattr SELinux: initialized (dev tmpfs, type tmpfs), uses transition SIDs SELinux: initialized (dev selinuxfs, type selinuxfs), uses genfs_contexts SELinux: initialized (dev mqueue, type mqueue), not configured for labeling SELinux: initialized (dev hugetlbfs, type hugetlbfs), not configured for labeling SELinux: initialized (dev devpts, type devpts), uses transition SIDs SELinux: initialized (dev eventpollfs, type eventpollfs), uses genfs_contexts SELinux: initialized (dev tmpfs, type tmpfs), uses transition SIDs SELinux: initialized (dev futexfs, type futexfs), uses genfs_contexts SELinux: initialized (dev pipefs, type pipefs), uses task SIDs SELinux: initialized (dev sockfs, type sockfs), uses task SIDs SELinux: initialized (dev proc, type proc), uses genfs_contexts SELinux: initialized (dev bdev, type bdev), uses genfs_contexts SELinux: initialized (dev rootfs, type rootfs), uses genfs_contexts SELinux: initialized (dev sysfs, type sysfs), uses genfs_contexts SELinux: initialized (dev usbfs, type usbfs), uses genfs_contexts SELinux: initialized (dev hda1, type ext2), uses xattr SELinux: initialized (dev hda6, type ext3), uses xattr SELinux: initialized (dev hdc1, type vfat), uses genfs_contexts SELinux: initialized (dev tmpfs, type tmpfs), uses transition SIDs SELinux: initialized (dev binfmt_misc, type binfmt_misc), uses genfs_contexts
You also get some new commands to play with (more later).
New commands
--setatus--
The /usr/sbin/setatus command tells you the status of SELinux on your PC.
Code:[root@localhost ~]# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 18 Policy from config file:targeted Policy booleans: allow_ypbind active dhcpd_disable_trans inactive httpd_disable_trans inactive httpd_enable_cgi active httpd_enable_homedirs active httpd_ssi_exec active httpd_tty_comm inactive httpd_unified active mysqld_disable_trans inactive named_disable_trans inactive named_write_master_zonesinactive nscd_disable_trans inactive ntpd_disable_trans inactive portmap_disable_trans inactive postgresql_disable_transinactive snmpd_disable_trans inactive squid_disable_trans inactive syslogd_disable_trans inactive use_nfs_home_dirs inactive use_samba_home_dirs inactive use_syslogng inactive winbind_disable_trans inactive ypbind_disable_trans inactive [root@localhost ~]#
The above display also shows if certain of the targeted policy checks have been turned off (disabled), more of this later.
--id--
The id command has extra information as well as a new switch - "-Z".
Code:[nerderello@localhost ~]$ id uid=502(nerderello) gid=503(nerderello) groups=503(nerderello) context=user_u:system_r:unconfined_t [nerderello@localhost ~]$ id -Z user_u:system_r:unconfined_t
The context shown is made up of three parts - the identity , the role , and the domain or type . This encompasses who you are and what you can do/have access to.
The settings, in the SELinux that Fedora ships, for these three things are fairly generic. As far as identity is concerned, you're either a "user-u" (ie. a normal user) or "root" (ie. the root / superuser).
Your identity will change when you do a "su -" in a terminal. This is because the targetted policy that Fedora ships does both a su and a SELinux newrole at the same time.
--ls -Z--
The new switch to the file list command - ls -Z - allows you to see the contexts of your files.
Code:[nerderello@localhost ~]$ ls -alZ drwx------ nerderel nerderel root:object_r:user_home_dir_t . drwxr-xr-x root root system_u:object_r:home_root_t .. -rw------- nerderel nerderel user_u:object_r:user_home_t .bash_history -rw-r--r-- nerderel nerderel root:object_r:user_home_t .bash_logout -rw-r--r-- nerderel nerderel root:object_r:user_home_t .bash_profile -rw-r--r-- nerderel nerderel root:object_r:user_home_t .bashrc -rw-r--r-- nerderel nerderel root:object_r:user_home_t .emacs -rw-r--r-- nerderel nerderel root:object_r:user_home_t .gtkrc drwxr-xr-x nerderel nerderel root:object_r:user_home_t .kde -rw-rw-r-- nerderel nerderel user_u:object_r:user_home_t test.txt -rw------- nerderel nerderel user_u:object_r:user_home_t .viminfo -rw-r--r-- nerderel nerderel root:object_r:user_home_t .zshrc [nerderello@localhost ~]$
You can see from this display (above) that all apart from the test.txt and the .viminfo files have been created by root (when the user id of nerderello was setup).
--ps -Z--
The extra switch (-Z) for the process display command (ps), shows you the context of your processes.
Code:[nerderello@localhost ~]$ ps -Z LABEL PID TTY TIME CMD user_u:system_r:unconfined_t 4652 pts/1 00:00:00 bash user_u:system_r:unconfined_t 4674 pts/1 00:00:00 ps [nerderello@localhost ~]$
Code:[nerderello@localhost ~]$ ps -xZ Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.3/FAQ LABEL PID TTY STAT TIME COMMAND user_u:system_r:unconfined_t 4001 ? Ss 0:00 /bin/sh /etc/xdg/xfce user_u:system_r:unconfined_t 4029 ? Ss 0:00 /usr/bin/ssh-agent -s user_u:system_r:unconfined_t 4056 ? S 0:00 /usr/bin/dbus-launch user_u:system_r:unconfined_t 4057 ? Ss 0:00 dbus-daemon-1 --fork user_u:system_r:unconfined_t 4061 ? S 0:00 /bin/sh /etc/xdg/xfce user_u:system_r:unconfined_t 4063 ? S 0:00 xscreensaver -no-spla user_u:system_r:unconfined_t 4068 ? Ss 0:00 xfce-mcs-manager user_u:system_r:unconfined_t 4070 ? Ss 0:01 xfwm4 --daemon user_u:system_r:unconfined_t 4071 ? S 0:01 xftaskbar4 user_u:system_r:unconfined_t 4072 ? S 0:05 xfdesktop user_u:system_r:unconfined_t 4075 ? S 0:06 /usr/bin/xfce4-panel user_u:system_r:unconfined_t 4266 ? S 0:00 /usr/libexec/gconfd-2 user_u:system_r:unconfined_t 4461 ? S 0:16 gedit user_u:system_r:unconfined_t 4463 ? Ss 0:00 /usr/libexec/bonobo-a user_u:system_r:unconfined_t 4465 ? S 0:00 /usr/libexec/gam_serv user_u:system_r:unconfined_t 4467 ? Ss 0:00 /usr/bin/esd -termina user_u:system_r:unconfined_t 4469 ? S 0:00 xterm -title Terminal user_u:system_r:unconfined_t 4471 pts/0 Ss 0:00 bash user_u:system_r:unconfined_t 4650 ? R 0:00 xterm -title Terminal user_u:system_r:unconfined_t 4652 pts/1 Ss 0:00 bash user_u:system_r:unconfined_t 4673 pts/1 R+ 0:00 ps -xZ [nerderello@localhost ~]$
The first problem I came across, when I upgraded to Fedora Core 2, was that the portmap daemon failed to start at boot, and I no longer had a syslog!
--daemons failing to start, no syslog--
There are a number of ways around this. You can sort out the filesystem so that it all works properly. Or (the first I used) simply turn SELinux off, a bit drastic, but it worked. Or you can disable the bit of SELinux that is causing the problems.
Sorting out the file system to allow proper SELinux operations
Get yourself to a command line prompt, as root or su -. Enter touch /.autorelabel . Reboot.
When your PC comes back up, you will get a warning message that the file system is being relabeled and that it make take some time. I found on my PC that it too about the same time a my regular "updatedb", about 5 or 6 minutes.
Once the relabel has completed, your PC will continue to boot in the normal way. The relabeling is a one off, you won't get this delay every time you boot up.
Now, when you use the "ls -Z" you'll see that all of your files have a context, rather than just some.
Turning SELinux off
As you'd expect with Linux, there are a number of ways to turn off SELinux. You can :-
1) Add selinux=0 to the kernel line within your /boot/grub/grub.conf file. Then, when you next boot, SELinux will not be started.
2) Add SELINUX=disabled to your /etc/sysconfig/selinux file (which may be a link to "/etc/selinux/config").
Disable parts of SELinux
Within Gnome or KDE you can use the System menu option Security Level, which runs the gui based program system-config-securtylevel.
This has a tab marked SELinux, which shows you what you can turn on and off.
From the SELinux service protection option within (at the bottom) the list of options you can turn off (disable) SELinux protection for particular daemons, such as portmap and syslogd.
You can also, from the SELinux tab, stop/start the enforce option (SELinux can be run either to enforce its policy, or simply to report on any breaches - you'll get loads of avc: denied messages if you do).
--Not all of my files have a SELinux context--
After an upgrade of Fedora you may need to relabel your file system. This allows SELinux to give all files the correct context.
Get yourself to a command line prompt, as root or su -. Enter touch /.autorelabel . Reboot.
When your PC comes back up, you will get a warning message that the file system is being relabeled and that it make take some time. I found on my PC that it too about the same time a my regular "updatedb", about 5 or 6 minutes.
Written by Nerderello