All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel J Walsh <dwalsh@redhat.com>
To: Karl MacMillan <kmacmillan@tresys.com>
Cc: SE Linux <selinux@tycho.nsa.gov>
Subject: Re: Proposed patch to policy file_contexts
Date: Tue, 02 Mar 2004 11:36:05 -0500	[thread overview]
Message-ID: <4044B7F5.1010302@redhat.com> (raw)
In-Reply-To: <1077916703.11720.274.camel@colossus.columbia.tresys.com>

Karl MacMillan wrote:

>Dan,
>
>We have been looking at this lately and come up with a solution that
>modifies the genhomedircon script (which is attached). It looks like
>your changes don't address all of the file contexts - just what is in
>types.fc. Our genhomedircon handles 2 main cases:
>
>1. For policy users it generates specific file_contexts entries
>including those in modules (i.e. not just in types.fc).
>2. It generates generic entries for all home directory prefixes based on
>the contents /etc/passwd and /etc/defaults/useradd.
>
>It does this by replacing /home with the magic string HOME_ROOT,
>/home/[^/] with HOME_DIR, and user_* with ROLE_* in the file contexts
>file. Those strings are then replaced with the correct entries. For
>example, the gpg entry:
>
>/home/[^/]+/\.gnupg(/.+)?       system_u:object_r:user_gpg_secret_t
>/root/\.gnupg(/.+)?             system_u:object_r:sysadm_gpg_secret_t
>
>would be replaced with:
>
>HOME_DIR/\.gnupg(/.+)?  system_u:object_r:ROLE_gpg_secret_t
>
>The genhomedircon script would then replace the strings appropriately
>with information from the policy and system. Let me know what you think.
>I can send a patch that includes the policy changes if this change looks
>good.
>
>Karl
>  
>
Yes this looks good to me, as you pointed out their were flaws in my 
assumption.  :^(
I have pulled my changes out, if you can send me a patch to policy, I 
will apply it and test it out.

Thanks.

Dan

>On Thu, 2004-02-26 at 15:10, Daniel J Walsh wrote:
>  
>
>>Since the file_contexts file is now being build with m4, I am proposing 
>>this patch to allow for simpler specifications of alternate 
>>homedirectories or staff users.
>>
>>As we are roling this out we are finding many users placing their 
>>homedirectories in the non standard location.
>>
>>What do you think?
>>
>>Dan
>>
>>______________________________________________________________________
>>--- policy-1.6/file_contexts/users.fc.homedir	2004-02-26 15:03:53.957826373 -0500
>>+++ policy-1.6/file_contexts/users.fc	2004-02-26 15:03:07.283167405 -0500
>>@@ -0,0 +1,9 @@
>>+#
>>+# If you have an alternate homedir you would specify it here
>>+#
>>+#home_dir(user, /local_home)
>>+#
>>+#  If you have alternate members of staff you would specify it here
>>+#
>>+#home_dir(staff, /home,jadmin)
>>+#home_dir(staff, /local_home,jadmin)
>>--- policy-1.6/file_contexts/types.fc.homedir	2004-02-26 14:57:19.071019536 -0500
>>+++ policy-1.6/file_contexts/types.fc	2004-02-26 14:59:04.624938026 -0500
>>@@ -82,9 +82,7 @@
>> # 
>> # Ordinary user home directories.
>> #
>>-/home			-d	system_u:object_r:home_root_t
>>-/home/[^/]+		-d	system_u:object_r:user_home_dir_t
>>-/home/[^/]+/.+			system_u:object_r:user_home_t
>>+home_dir(user,/home)
>> 
>> #
>> # /bin
>>@@ -418,7 +416,8 @@
>> /lost\+found(/.*)?		system_u:object_r:lost_found_t
>> /usr/lost\+found(/.*)?		system_u:object_r:lost_found_t
>> /boot/lost\+found(/.*)?		system_u:object_r:lost_found_t
>>-/home/lost\+found(/.*)?		system_u:object_r:lost_found_t
>>+# moved to home.fc 
>>+# /home/lost\+found(/.*)?		system_u:object_r:lost_found_t
>> /var/lost\+found(/.*)?		system_u:object_r:lost_found_t
>> /tmp/lost\+found(/.*)?		system_u:object_r:lost_found_t
>> /usr/local/lost\+found(/.*)?	system_u:object_r:lost_found_t
>>--- policy-1.6/file_contexts/homedir.homedir	2004-02-26 14:57:07.079392137 -0500
>>+++ policy-1.6/file_contexts/homedir	2004-02-26 14:56:33.529232470 -0500
>>@@ -0,0 +1,14 @@
>>+define(`home_dir',`
>>+$2			-d	system_u:object_r:home_root_t
>>+ifelse($3,`',`
>>+$2/[^/]+		-d	system_u:object_r:$1_home_dir_t
>>+$2/[^/]+/.+			system_u:object_r:$1_home_t
>>+$2/\.journal			<<none>>
>>+$2/lost\+found(/.*)?		system_u:object_r:lost_found_t
>>+', `
>>+$2/$3/[^/]+		-d	system_u:object_r:$1_home_dir_t
>>+$2/$3/[^/]+/.+			system_u:object_r:$1_home_t
>>+$2/$3/\.journal			<<none>>
>>+$2/$3/lost\+found(/.*)?		system_u:object_r:lost_found_t
>>+')
>>+')
>>--- policy-1.6/Makefile.homedir	2004-02-26 15:00:50.902774628 -0500
>>+++ policy-1.6/Makefile	2004-02-26 15:01:16.167883200 -0500
>>@@ -51,7 +51,7 @@
>> UNUSED_TE_FILES := $(wildcard domains/program/unused/*.te)
>> 
>> FC = file_contexts/file_contexts
>>-FCFILES=file_contexts/types.fc $(wildcard file_contexts/misc/*.fc) $(patsubst domains/program/%.te,file_contexts/program/%.fc, $(wildcard domains/program/*.te))
>>+FCFILES=file_contexts/homedir file_contexts/types.fc file_contexts/users.fc $(wildcard file_contexts/misc/*.fc) $(patsubst domains/program/%.te,file_contexts/program/%.fc, $(wildcard domains/program/*.te))
>> 
>> APPDIR=$(DESTDIR)/etc/security
>> APPFILES = $(addprefix $(APPDIR)/,default_contexts default_type initrc_context failsafe_context)
>>    
>>
>>------------------------------------------------------------------------
>>
>>#!/usr/bin/python
>># Copyright (C) 2004 Tresys Technology, LLC
>># see file 'COPYING' for use and warranty information
>>
>>#
>># genhomedircon - Replace HOME_ROOT, HOME_DIR, and ROLE macros in .fc files
>>#  with generic and user-specific values.
>>#
>># ASSUMPTIONS:
>>#
>># If a user has more than one role in FILECONTEXTDIR/users, genhomedircon uses
>>#  the first role in the list.
>>#
>># If a user is not listed in FILECONTEXTDIR/users, genhomedircon assumes that
>>#  the user's home dir will be found in one of the HOME_ROOTs.
>>#
>># "Real" users (as opposed to system users) are those whose UID is greater than
>>#  or equal STARTING_UID (usually 100) and whose login is not a member of
>>#  EXCLUDE_LOGINS.  Users who are explicitly defined in FILECONTEXTDIR/users
>>#  are always "real" (including root, in the default configuration).
>>#
>>
>>import commands, sys, os, pwd, string
>>
>>FILECONTEXTDIR="/etc/security/selinux/src/policy/"
>>EXCLUDE_LOGINS=["/sbin/nologin", "/bin/false"]
>>STARTING_UID=100
>>
>>def getPrefixes():
>>	ulist = pwd.getpwall()
>>	prefixes = {}
>>	for u in ulist:
>>		if u[2] >= STARTING_UID and \
>>		   not u[6] in EXCLUDE_LOGINS and \
>>		   u[5] != "/" and \
>>		   string.count(u[5], "/") > 1:
>>			prefix = u[5][:string.rfind(u[5], "/")]
>>			if not prefixes.has_key(prefix):
>>				prefixes[prefix] = ""
>>	return prefixes
>>
>>def getUsers():
>>	rc = commands.getstatusoutput("grep ^user %s/users" % FILECONTEXTDIR)
>>	udict = {}
>>	if rc[0] == 0:
>>		ulist = rc[1].strip().split("\n")
>>		for u in ulist:
>>			user = u.split()
>>			try:
>>				if user[1] == "user_u" or user[1] == "system_u":
>>					continue
>>				# !!! chooses first role in the list to use in the file context !!!
>>				role = user[4].split("_r")[0]
>>				home = pwd.getpwnam(user[1])[5]
>>				if home == "/":
>>					continue
>>				prefs = {}
>>				prefs["role"] = role
>>				prefs["home"] = home
>>				udict[user[1]] = prefs
>>			except KeyError:
>>				sys.stderr.write("The user \"%s\" is not present in the passwd file, skipping...\n" % (user[1],))
>>	return udict
>>
>>def usage(error = ""):
>>	if error != "":
>>		sys.stderr.write("%s\n" % (error,))
>>	sys.stderr.write("Usage: %s FILE_CONTEXTS\n" % sys.argv[0])
>>	sys.stderr.flush()
>>	sys.exit(1)
>>
>>def update(filecontext, user, prefs):
>>	rc=commands.getstatusoutput("grep -h '^HOME_DIR' %s | grep -v vmware | sed -e 's|HOME_DIR|%s|g' -e 's/ROLE/%s/' -e 's/system_u/%s/'" % (filecontext, prefs["home"], prefs["role"], user))
>>	if rc[0] == 0:
>>		print rc[1]
>>	else:
>>		usage(rc[1])
>>	return rc
>>
>>try:
>>	prefixes = getPrefixes()
>>
>>	rc=commands.getstatusoutput("grep -h '^HOME' /etc/default/useradd")
>>	if rc[0] == 0:
>>		homedir = rc[1].split("=")[1]
>>	else:
>>		sys.stderr.write("%s\n" % (rc[1],))
>>		sys.stderr.write("Do you have access to /etc/default/useradd?\n")
>>		sys.stderr.flush()
>>		sys.exit(1)
>>
>>	if not prefixes.has_key(homedir):
>>		prefixes[homedir] = ""
>>
>>	if len(prefixes) == 1:
>>		regex_root = prefixes.keys()[0]
>>	else:
>>		regex_root = "(%s)" % (string.join(prefixes, "\|"),)
>>	regex_dir = "%s/[^/]+" % (regex_root,)
>>
>>	# Fill in HOME_ROOT, HOME_DIR, and ROLE for users not explicitly defined in /etc/security/selinux/src/policy/users
>>	rc=commands.getstatusoutput("sed -e 's|^HOME_ROOT|%s|g' -e 's|^HOME_DIR|%s|g' -e 's/ROLE_/user_/' %s" % (regex_root, regex_dir, sys.argv[1]))
>>	if rc[0] == 0:
>>		print rc[1]
>>	else:
>>		usage(rc[1])
>>
>>	users = getUsers()
>>	print "\n#\n# User-specific file contexts\n#\n"
>>
>>	# Fill in HOME and ROLE for users that are defined
>>	for u in users.keys():
>>		update(sys.argv[1], u, users[u])
>>
>>except ValueError, error:
>>	usage(error)
>>except IndexError, error:
>>	usage()
>>    
>>

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

  reply	other threads:[~2004-03-02 16:36 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-26 20:10 Proposed patch to policy file_contexts Daniel J Walsh
2004-02-26 23:39 ` Dale Amon
2004-02-27 19:28 ` Stephen Smalley
2004-02-27 21:18 ` Karl MacMillan
2004-03-02 16:36   ` Daniel J Walsh [this message]
2004-03-03 14:22     ` Karl MacMillan
2004-03-03 21:21       ` Stephen Smalley
2004-03-03 21:36         ` Karl MacMillan
2004-03-05 17:18           ` Stephen Smalley
2004-03-08 15:59             ` Karl MacMillan
2004-03-08 16:05               ` Russell Coker
2004-03-08 17:33               ` Stephen Smalley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4044B7F5.1010302@redhat.com \
    --to=dwalsh@redhat.com \
    --cc=kmacmillan@tresys.com \
    --cc=selinux@tycho.nsa.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.