Re: [PATCH 1/1] cgroups: implement device whitelist (v6)

Previous thread: [PATCH] fs/xfs - Use #include "xfs.h" not <xfs.h> by Joe Perches on Wednesday, March 26, 2008 - 11:05 am. (1 message)

Next thread: [PATCH] x86: GEODE: add missing module.h include by Andres Salomon on Wednesday, March 26, 2008 - 11:13 am. (1 message)
From: Serge E. Hallyn
Date: Wednesday, March 26, 2008 - 11:05 am

(This is identical to the version I sent on Mar 19 in response to
the comments by Daniel Hokka Zakrisson, which are the last
comments I've gotten.)

Implement a cgroup to track and enforce open and mknod restrictions on device
files.  A device cgroup associates a device access whitelist with each
cgroup.  A whitelist entry has 4 fields.  'type' is a (all), c (char), or
b (block).  'all' means it applies to all types and all major and minor
numbers.  Major and minor are either an integer or * for all.
Access is a composition of r (read), w (write), and m (mknod).

The root device cgroup starts with rwm to 'all'.  A child devcg gets
a copy of the parent.  Admins can then remove devices from the
whitelist or add new entries.  A child cgroup can never receive a
device access which is denied its parent.  However when a device
access is removed from a parent it will not also be removed from the
child(ren).

An entry is added using devices.allow, and removed using
devices.deny.  For instance

	echo 'c 1:3 mr' &gt; /cgroups/1/devices.allow

allows cgroup 1 to read and mknod the device usually known as
/dev/null.  Doing

	echo a &gt; /cgroups/1/devices.deny

will remove the default 'a *:* mrw' entry.

CAP_SYS_ADMIN is needed to change permissions or move another task
to a new cgroup.  A cgroup may not be granted more permissions than
the cgroup's parent has.  Any task can move itself between cgroups.
This won't be sufficient, but we can decide the best way to
adequately restrict movement later.

Changelog:
	Mar 19 2008: Address dangerous bugs pointed out by
		Daniel Hokka Zakrisson.
	Mar 18 2008: Address comments by Li Zefan.
	Mar 17 2008: Place specific device cgroup hooks next to
		security_inode_{mknod,permission} rather than using
		the security hooks.
		Also remove most of the controls over tasks moving
		between cgroups and playing with the allow and deny
		permissions.
	Mar 13 2008: move the dev_cgroup support into
		capability hooks instead of having it
		as a separate ...
From: Andrew Morton
Date: Thursday, March 27, 2008 - 2:04 am

That's rather ugly-looking.  We can't use seq_file here?


--

From: Li Zefan
Date: Thursday, March 27, 2008 - 2:07 am

You mean to add a Documentation/controller/devices.txt? ;)

--

From: Serge E. Hallyn
Date: Thursday, March 27, 2008 - 9:24 am

I can do that, but then it will probably be cleaner if I split the
file into one for read and one for write.

Paul, did you have any plans of offering some sort of cft-&gt;read_seq()
helper?  Having both the cft-&gt; helpers and the subsystem code play
with -&gt;private fields and caching the cgroup isn't very palletable.

thanks,
-serge
--

From: Paul Menage
Date: Thursday, March 27, 2008 - 9:40 am

Yes, it's on my TODO list. It should just be a pretty simple extension
of the existing read_map() support.

Paul
--

From: Serge E. Hallyn
Date: Thursday, March 27, 2008 - 10:37 am

Ok, cool.  I can see about getting that done next week if you don't get
around to it, and convert the devices.allowed file to it.

thanks,
-serge
--

From: Pavel Machek
Date: Saturday, March 29, 2008 - 1:18 am

Can't you use selinux or something?

Or just fix the userland as this is for old-udev compatibility, only?

I don't know what this is, but it does not look like C...

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--

From: Serge E. Hallyn
Date: Monday, March 31, 2008 - 7:00 am

No.  At the moment SELinux can't authorize based on type/major:minor.  I
would like to add that support later on, but even when I do, folks such

Until the part of Miklos' user mounts patches go in which enforces MNT_NODEV
on mounts made by someone who is !capable(CAP_MKNOD), using capability bounding


Huh?

-serge
--

From: Pavel Machek
Date: Tuesday, April 1, 2008 - 5:32 am

Yep, it looks like openvz folks do not want to rely on any security
modules, do not want to fix their userland, and do not have a taste
when implementing new features.

IMO that means openvz folks should be kept off mainline.

Implementing SELinux extension that can authorize based on

Empty comments as separators? What does magical SUBSYS macro do?
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--

From: Alexey Dobriyan
Date: Tuesday, April 1, 2008 - 5:34 am

They help when multiple people add such SUBSYS things and
do not have to fight rejects.
--

From: Serge E. Hallyn
Date: Tuesday, April 1, 2008 - 3:07 pm

If we go with the decision that properly isolated containers will
always require an LSM then I can go with that.  But IMO such a
decision needs agreement by all the players.  So far it seems there
is only calls from one objector.

Eric, I don't recall - was it your opinion that an LSM was an ok
--

Previous thread: [PATCH] fs/xfs - Use #include "xfs.h" not <xfs.h> by Joe Perches on Wednesday, March 26, 2008 - 11:05 am. (1 message)

Next thread: [PATCH] x86: GEODE: add missing module.h include by Andres Salomon on Wednesday, March 26, 2008 - 11:13 am. (1 message)