76 lines
4.8 KiB
ReStructuredText
76 lines
4.8 KiB
ReStructuredText
Gentoo hardened desktop with GNOME 3 – Round one
|
||
################################################
|
||
|
||
:date: 2011-05-12T20:32:41Z
|
||
:url: blog/2011/5/12/gentoo-hardened-desktop-with-gnome-3-round-one.html
|
||
:save_as: blog/2011/5/12/gentoo-hardened-desktop-with-gnome-3-round-one.html
|
||
:category: blog
|
||
:tags: gentoo,gnome3,selinux
|
||
:author: Gergely Polonkai
|
||
:status: published
|
||
|
||
After having some hard times with Ubuntu (upgrading from 10.10 to 11.04), I decided to switch back
|
||
to my old friend, Gentoo. As I’m currently learning about Linux hardening, I decided to use the
|
||
new SELinux profile, which supports the v2 reference policy.
|
||
|
||
Installation was pretty easy, using the `Gentoo x86 Handbook
|
||
<http://www.gentoo.org/doc/hu/handbook/handbook-x86.xml>`_. This profile automatically turns on
|
||
the ``USE=selinux`` flag (so does the old SELinux profile), but deprecated ``FEATURE=loadpolicy``
|
||
(which is turned on by the profile, so portage will complain about it until you disable it in
|
||
``/etc/make.conf``).
|
||
|
||
For the kernel, I chose ``hardened-sources-2.6.37-r7``. This seems to be recent enough for my
|
||
security testing needs. I turned on both SELinux, PaX and grsecurity. So far, I have no problem
|
||
with it, but I don’t have X installed yet, which will screw up things for sure.
|
||
|
||
After having those hard times with Ubuntu mentioned before, I decided not to install Grub2 yet, as
|
||
it renders things unusable (eg. my Windows 7 installation, which I sometimes need at the office).
|
||
So I installed Grub 0.97 (this is the only version marked as stable, as I remember), touched
|
||
``/.autorelabel``, and reboot.
|
||
|
||
My first mistake was using an UUID as the root device on the kernel parameter list (I don’t want
|
||
to list all the small mistakes like forgetting to include to correct SATA driver from my kernel
|
||
and such). Maybe I was lame, but after including ``/dev/sda5`` instead of the UUID thing, it
|
||
worked like…
|
||
|
||
Well, charm would not be the good word. For example, I forgot to install the ``lvm2`` package, so
|
||
nothing was mounted except my root partition. After I installed it with the install CD, I assumed
|
||
everything will be all right, but I was wrong.
|
||
|
||
``udev`` and LVM is a critical point in a hardened environment. ``udev`` itself doesn’t want to
|
||
work without the ``CONFIG_DEVFS_TEMPFS=y`` kernel option, so I also had to change that. It seemed
|
||
that it can be done without the install CD, as it compiled the kernel with no problems. However,
|
||
when it reached the point when it compresses the kernel with gzip, it stopped with a ``Permission
|
||
denied`` message (although it was running with root privileges).
|
||
|
||
The most beautiful thing in the hardened environment with Mandatory Access Control enabled is that
|
||
root is not a real power user any more by default. You can get this kind of messages many times.
|
||
There are many tools to debug these, I will talk about these later.
|
||
|
||
So, my ``gzip`` needed a fix. After digging a bit on the Internet, I found that the guilty thing
|
||
is text relocation, which can be corrected if ``gzip`` is compiled with PIC enabled. Thus, I
|
||
turned on ``USE=pic`` flag globally, and tried to remerge gzip. Of course it failed, as it had to
|
||
use gzip to unpack the gzip sources. So it did when I tried to install the PaX tools and
|
||
``gradm`` to turn these checks off. The install CD came to the rescue again, with which I
|
||
successfully recompiled gzip, and with this new gzip, I compressed my new kernel, with which udev
|
||
started successfully. So far, so good, let’s try to reboot!
|
||
|
||
Damn, LVM is still not working. So I decided to finally consult the Gentoo hardened guide. It
|
||
says that the LVM startup scripts under ``/lib/rcscripts/…`` must be modified, so LVM will put its
|
||
lock files under ``/etc/lvm/lock`` instead of ``/dev/.lvm``. After this step and a reboot, LVM
|
||
worked fine (finally).
|
||
|
||
The next thing was the file system labelling. SELinux should automatically relabel the entire
|
||
file system at boot time whenever it finds the ``/.autorelabel`` file. Well, in my case it didn’t
|
||
happen. After checking the `Gentoo Hardening <http://wiki.gentoo.org/wiki/Hardened_Gentoo>`_
|
||
docs, I realised that the ``rlpkg`` program does exactly the same (as far as I know, it is
|
||
designed specifically for Gentoo). So I ran ``rlpkg``, and was kind of shocked. It says it will
|
||
relabel ext2, ext3, xfs and JFS partitions. Oh great, no ext4 support? Well, consulting the
|
||
forums and adding some extra lines to ``/etc/portage/package.keywords`` solved the problem
|
||
(``rlpkg`` and some dependencies had to have the ``~x86`` keyword set). Thus, ``rlpkg``
|
||
relabelled my file systems (I checked some directories with ``ls -lZ``, it seemed good for me).
|
||
|
||
Now it seems that everything is working fine, except the tons of audit messages. Tomorrow I will
|
||
check them with ``audit2why`` or ``audit2allow`` to see if it is related with my SELinux lameness,
|
||
or with a bug in the policy included with Gentoo.
|