selinux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Petr Lautrbach <plautrba@redhat.com>
To: selinux@vger.kernel.org
Cc: Dominick Grift <dominick.grift@defensec.nl>,
	paul@paul-moore.com, Petr Lautrbach <plautrba@redhat.com>,
	Stephen Smalley <sds@tycho.nsa.gov>
Subject: Re: [PATCH v6] scripts/selinux: modernize mdp
Date: Mon, 25 Feb 2019 16:23:42 +0100	[thread overview]
Message-ID: <pjdwolnlwn5.fsf@redhat.com> (raw)
In-Reply-To: <819a099c-8d9d-5e07-7f3a-c7863254ce92@tycho.nsa.gov>


Stephen Smalley <sds@tycho.nsa.gov> writes:

> On 2/22/19 3:44 PM, Stephen Smalley wrote:
>> On 2/22/19 3:26 PM, Dominick Grift wrote:
>>> On Fri, Feb 22, 2019 at 03:17:10PM -0500, Stephen Smalley 
>>> wrote:
>>>> On 2/22/19 3:55 AM, Dominick Grift wrote:
>>>>> On Thu, Feb 21, 2019 at 04:31:47PM -0500, Stephen Smalley 
>>>>> wrote:
>>>>>> Derived in part from a patch by Dominick Grift.
>>>>>>
>>>>>> The MDP example no longer works on modern systems. Fix it.
>>>>>> While we are at it, add MLS support and enable it.
>>>>>>
>>>>>> NB This still does not work on systems using dbus-daemon 
>>>>>> instead of
>>>>>> dbus-broker because dbus-daemon does not yet gracefully 
>>>>>> handle unknown
>>>>>> classes/permissions. This appears to be a deficiency in 
>>>>>> libselinux's
>>>>>> selinux_set_mapping() interface and underlying 
>>>>>> implementation,
>>>>>> which was never fully updated to deal with unknown 
>>>>>> classes/permissions
>>>>>> unlike the kernel. The same problem also occurs with 
>>>>>> XSELinux.
>>>>>> Programs that instead use selinux_check_access() like 
>>>>>> dbus-broker
>>>>>> should not have this problem.
>>>>>>
>>>>>> Changes to mdp:
>>>>>> Add support for devtmpfs, required by modern Linux 
>>>>>> distributions.
>>>>>> Add MLS support, with sample sensitivities, categories, and 
>>>>>> constraints.
>>>>>> Generate fs_use and genfscon rules based on kernel 
>>>>>> configuration.
>>>>>> Update list of filesystem types for fs_use and genfscon 
>>>>>> rules.
>>>>>> Use object_r for object contexts.
>>>>>>
>>>>>> Changes to install_policy.sh:
>>>>>> Bail immediately on any errors.
>>>>>> Provide more helpful error messages when unable to find 
>>>>>> userspace tools.
>>>>>> Refuse to run if SELinux is already enabled.
>>>>>> Unconditionally move aside /etc/selinux/config and create a 
>>>>>> new one.
>>>>>> Build policy with -U allow so that userspace object 
>>>>>> managers do not break.
>>>>>> Build policy with MLS enabled by default.
>>>>>> Create seusers, failsafe_context, and default_contexts for 
>>>>>> use by
>>>>>> pam_selinux / libselinux.
>>>>>> Create x_contexts for the SELinux X extension.
>>>>>> Create virtual_domain_context and virtual_image_context for 
>>>>>> libvirtd.
>>>>>> Set to permissive mode rather than enforcing to permit 
>>>>>> initial
>>>>>> autorelabel.
>>>>>> Update the list of filesystem types to be relabeled.
>>>>>> Write -F to /.autorelabel to cause a forced autorelabel on 
>>>>>> reboot.
>>>>>> Drop broken attempt to relabel the /dev mountpoint 
>>>>>> directory.
>>>>>>
>>>>>> Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
>>>>>> ---
>>>>>> v6 fixes the seusers and failsafe_contexts to include :s0
>>>>>> as per Dominick's comments. It also adds a default_contexts
>>>>>> configuration for good measure, although this might not be
>>>>>> necessary. It creates a minimal working x_contexts 
>>>>>> configuration
>>>>>> to appease XSELinux, although XSELinux still has problems 
>>>>>> due
>>>>>> to the lack of the userspace class/perms definitions. It
>>>>>> creates empty virtual_*_context files to make libvirtd 
>>>>>> happy.
>>>>>> It writes -F to /.autorelabel as per Dominick's comments to
>>>>>> trigger a forced relabel. It also fixes mdp to correctly 
>>>>>> generate
>>>>>> fs_use rules for ext3 and ext2 when using ext4 as the 
>>>>>> driver.
>>>>>> These days ext4 is always used to handle ext3 mounts and it 
>>>>>> can
>>>>>> also be used for ext2. This version is called v6 to 
>>>>>> distinguish it from
>>>>>> Dominick's earlier patch sequence, which went up to v4, and 
>>>>>> then
>>>>>> my previous coalesced patch is logically v5.
>>>>>>
>>>>>>  scripts/selinux/install_policy.sh | 92 ++++++++++-------
>>>>>>  scripts/selinux/mdp/mdp.c | 165 
>>>>>>  +++++++++++++++++++++++++-----
>>>>>>  2 files changed, 194 insertions(+), 63 deletions(-)
>>>>>
>>>>> Acked-by: Dominick Grift <dominick.grift@defensec.nl>
>>>>>
>>>>> I was pretty sure that seusers entries need both current as 
>>>>> well as
>>>>> clearance (s0-s0 instead of just s0) but just s0 works in 
>>>>> this scenario
>>>>> atleast
>>>>> I did not test the X and virt_contexts aspects.
>>>>
>>>> Hmm...so even with the fix for libselinux selinux_set_mapping 
>>>> (which
>>>> addresses the dbus-daemon issue), I can't login under the 
>>>> dummy policy if
>>>> the system is set to enforcing. I get the following from 
>>>> pam_selinux:
>>>>
>>>> sshd[2015]: pam_selinux(sshd:session): Failed to translate 
>>>> security class
>>>> context. Invalid argument
>>>> sshd[2015]: pam_selinux(sshd:session): Security context
>>>> user_u:base_r:base_t:s0 is not allowed for 
>>>> user_u:base_r:base_t:s0
>>>> sshd[2015]: pam_selinux(sshd:session): Unable to get valid 
>>>> context for sds
>>>>
>>>> Looking at the pam_selinux code, it performs a userspace 
>>>> permission check on
>>>> the context class, contains permission, in order to validate 
>>>> that the MLS
>>>> level is authorized for the Linux user. The normal context 
>>>> validation is not
>>>> sufficient for this purpose since the SELinux user in the 
>>>> security context
>>>> to which the Linux username is mapped may be authorized for a 
>>>> wider range
>>>> than the Linux user. pam_selinux directly calls 
>>>> string_to_security_class(),
>>>> string_to_av_perm(), and security_compute_av() instead of 
>>>> using
>>>> selinux_check_access(), so it doesn't honor allow_unknown 
>>>> presently. Is
>>>> this fixed in rawhide?
>>>
>>> No I do not believe that this is fixed in rawhide, but might 
>>> be able to work
>>> around that by removing the the env_params option from the 
>>> pam_selinux call
>>> in /etc/pam.d/sshd.
>>>
>>> I know, not ideal.
>>
>> (cc Petr)
>>
>> Any chance we could get pam_selinux to use 
>> selinux_check_access() instead, or,
>> if not, to check security_deny_unknown() and handle failures of
>> string_to_security_class()/string_to_av_perm() accordingly?
>
> The latter might be preferable to avoid the overhead of creating 
> an AVC just for
> a single permission check.  Should be just a matter of adding 
> calls to
> security_deny_unknown() in the error handling paths for both 
> string_*() mapping
> functions and returning success instead of failure if it returns 
> 0.

I talked to pam_selinux maintainer and he's ready to improve the 
code.
We agreed that I'll file a bug and it'll be discussed there:

https://bugzilla.redhat.com/show_bug.cgi?id=1680961

>>
>>>
>>>>
>>>>>
>>>>>>
>>>>>> diff --git a/scripts/selinux/install_policy.sh
>>>>>> b/scripts/selinux/install_policy.sh
>>>>>> index 0b86c47baf7d..2dccf141241d 100755
>>>>>> --- a/scripts/selinux/install_policy.sh
>>>>>> +++ b/scripts/selinux/install_policy.sh
>>>>>> @@ -1,30 +1,61 @@
>>>>>>  #!/bin/sh
>>>>>>  # SPDX-License-Identifier: GPL-2.0
>>>>>> +set -e
>>>>>>  if [ `id -u` -ne 0 ]; then
>>>>>>  echo "$0: must be root to install the selinux policy"
>>>>>>  exit 1
>>>>>>  fi
>>>>>> +
>>>>>>  SF=`which setfiles`
>>>>>>  if [ $? -eq 1 ]; then
>>>>>> - if [ -f /sbin/setfiles ]; then
>>>>>> - SF="/usr/setfiles"
>>>>>> - else
>>>>>> - echo "no selinux tools installed: setfiles"
>>>>>> - exit 1
>>>>>> - fi
>>>>>> + echo "Could not find setfiles"
>>>>>> + echo "Do you have policycoreutils installed?"
>>>>>> + exit 1
>>>>>>  fi
>>>>>> -cd mdp
>>>>>> -
>>>>>>  CP=`which checkpolicy`
>>>>>> +if [ $? -eq 1 ]; then
>>>>>> + echo "Could not find checkpolicy"
>>>>>> + echo "Do you have checkpolicy installed?"
>>>>>> + exit 1
>>>>>> +fi
>>>>>>  VERS=`$CP -V | awk '{print $1}'`
>>>>>> -./mdp policy.conf file_contexts
>>>>>> -$CP -o policy.$VERS policy.conf
>>>>>> +ENABLED=`which selinuxenabled`
>>>>>> +if [ $? -eq 1 ]; then
>>>>>> + echo "Could not find selinuxenabled"
>>>>>> + echo "Do you have libselinux-utils installed?"
>>>>>> + exit 1
>>>>>> +fi
>>>>>> +
>>>>>> +if selinuxenabled; then
>>>>>> + echo "SELinux is already enabled"
>>>>>> + echo "This prevents safely relabeling all files."
>>>>>> + echo "Boot with selinux=0 on the kernel command-line or"
>>>>>> + echo "SELINUX=disabled in /etc/selinux/config."
>>>>>> + exit 1
>>>>>> +fi
>>>>>> +
>>>>>> +cd mdp
>>>>>> +./mdp -m policy.conf file_contexts
>>>>>> +$CP -U allow -M -o policy.$VERS policy.conf
>>>>>>  mkdir -p /etc/selinux/dummy/policy
>>>>>>  mkdir -p /etc/selinux/dummy/contexts/files
>>>>>> +echo "__default__:user_u:s0" > /etc/selinux/dummy/seusers
>>>>>> +echo "base_r:base_t:s0" > 
>>>>>> /etc/selinux/dummy/contexts/failsafe_context
>>>>>> +echo "base_r:base_t:s0 base_r:base_t:s0" >
>>>>>> /etc/selinux/dummy/default_contexts
>>>>>> +cat > /etc/selinux/dummy/contexts/x_contexts <<EOF
>>>>>> +client * user_u:base_r:base_t:s0
>>>>>> +property * user_u:object_r:base_t:s0
>>>>>> +extension * user_u:object_r:base_t:s0
>>>>>> +selection * user_u:object_r:base_t:s0
>>>>>> +event * user_u:object_r:base_t:s0
>>>>>> +EOF
>>>>>> +touch /etc/selinux/dummy/contexts/virtual_domain_context
>>>>>> +touch /etc/selinux/dummy/contexts/virtual_image_context
>>>>>> +
>>>>>>  cp file_contexts /etc/selinux/dummy/contexts/files
>>>>>>  cp dbus_contexts /etc/selinux/dummy/contexts
>>>>>>  cp policy.$VERS /etc/selinux/dummy/policy
>>>>>> @@ -33,37 +64,22 @@
>>>>>> FC_FILE=/etc/selinux/dummy/contexts/files/file_contexts
>>>>>>  if [ ! -d /etc/selinux ]; then
>>>>>>  mkdir -p /etc/selinux
>>>>>>  fi
>>>>>> -if [ ! -f /etc/selinux/config ]; then
>>>>>> - cat > /etc/selinux/config << EOF
>>>>>> -SELINUX=enforcing
>>>>>> +if [ -f /etc/selinux/config ]; then
>>>>>> + echo "/etc/selinux/config exists, moving to 
>>>>>> /etc/selinux/config.bak."
>>>>>> + mv /etc/selinux/config /etc/selinux/config.bak
>>>>>> +fi
>>>>>> +echo "Creating new /etc/selinux/config for dummy policy."
>>>>>> +cat > /etc/selinux/config << EOF
>>>>>> +SELINUX=permissive
>>>>>>  SELINUXTYPE=dummy
>>>>>>  EOF
>>>>>> -else
>>>>>> - TYPE=`cat /etc/selinux/config | grep "^SELINUXTYPE" | 
>>>>>> tail -1 
>>>>>> | awk -F= '{ print $2 '}`
>>>>>> - if [ "eq$TYPE" != "eqdummy" ]; then
>>>>>> - selinuxenabled
>>>>>> - if [ $? -eq 0 ]; then
>>>>>> - echo "SELinux already enabled with a non-dummy policy."
>>>>>> - echo "Exiting. Please install policy by hand if that"
>>>>>> - echo "is what you REALLY want."
>>>>>> - exit 1
>>>>>> - fi
>>>>>> - mv /etc/selinux/config /etc/selinux/config.mdpbak
>>>>>> - grep -v "^SELINUXTYPE" /etc/selinux/config.mdpbak >>
>>>>>> /etc/selinux/config
>>>>>> - echo "SELINUXTYPE=dummy" >> /etc/selinux/config
>>>>>> - fi
>>>>>> -fi
>>>>>>  cd /etc/selinux/dummy/contexts/files
>>>>>> -$SF file_contexts /
>>>>>> +$SF -F file_contexts /
>>>>>> -mounts=`cat /proc/$$/mounts | egrep 
>>>>>> "ext2|ext3|xfs|jfs|ext4|ext4dev|gfs2"
>>>>>> | awk '{ print $2 '}`
>>>>>> -$SF file_contexts $mounts
>>>>>> +mounts=`cat /proc/$$/mounts | \
>>>>>> + egrep 
>>>>>> "ext[234]|jfs|xfs|reiserfs|jffs2|gfs2|btrfs|f2fs|ocfs2" | \
>>>>>> + awk '{ print $2 '}`
>>>>>> +$SF -F file_contexts $mounts
>>>>>> -
>>>>>> -dodev=`cat /proc/$$/mounts | grep "/dev "`
>>>>>> -if [ "eq$dodev" != "eq" ]; then
>>>>>> - mount --move /dev /mnt
>>>>>> - $SF file_contexts /dev
>>>>>> - mount --move /mnt /dev
>>>>>> -fi
>>>>>> +echo "-F" > /.autorelabel
>>>>>> diff --git a/scripts/selinux/mdp/mdp.c 
>>>>>> b/scripts/selinux/mdp/mdp.c
>>>>>> index 073fe7537f6c..edaba8e51651 100644
>>>>>> --- a/scripts/selinux/mdp/mdp.c
>>>>>> +++ b/scripts/selinux/mdp/mdp.c
>>>>>> @@ -33,6 +33,7 @@
>>>>>>  #include <unistd.h>
>>>>>>  #include <string.h>
>>>>>>  #include <sys/socket.h>
>>>>>> +#include <linux/kconfig.h>
>>>>>>  static void usage(char *name)
>>>>>>  {
>>>>>> @@ -95,10 +96,31 @@ int main(int argc, char *argv[])
>>>>>>  }
>>>>>>  fprintf(fout, "\n");
>>>>>> - /* NOW PRINT OUT MLS STUFF */
>>>>>> + /* print out mls declarations and constraints */
>>>>>>  if (mls) {
>>>>>> - printf("MLS not yet implemented\n");
>>>>>> - exit(1);
>>>>>> + fprintf(fout, "sensitivity s0;\n");
>>>>>> + fprintf(fout, "sensitivity s1;\n");
>>>>>> + fprintf(fout, "dominance { s0 s1 }\n");
>>>>>> + fprintf(fout, "category c0;\n");
>>>>>> + fprintf(fout, "category c1;\n");
>>>>>> + fprintf(fout, "level s0:c0.c1;\n");
>>>>>> + fprintf(fout, "level s1:c0.c1;\n");
>>>>>> +#define SYSTEMLOW "s0"
>>>>>> +#define SYSTEMHIGH "s1:c0.c1"
>>>>>> + for (i = 0; secclass_map[i].name; i++) {
>>>>>> + struct security_class_mapping *map = &secclass_map[i];
>>>>>> +
>>>>>> + fprintf(fout, "mlsconstrain %s {\n", map->name);
>>>>>> + for (j = 0; map->perms[j]; j++)
>>>>>> + fprintf(fout, "\t%s\n", map->perms[j]);
>>>>>> + /*
>>>>>> + * This requires all subjects and objects to be
>>>>>> + * single-level (l2 eq h2), and that the subject
>>>>>> + * level dominate the object level (h1 dom h2)
>>>>>> + * in order to have any permissions to it.
>>>>>> + */
>>>>>> + fprintf(fout, "} (l2 eq h2 and h1 dom h2);\n\n");
>>>>>> + }
>>>>>>  }
>>>>>>  /* types, roles, and allows */
>>>>>> @@ -108,34 +130,127 @@ int main(int argc, char *argv[])
>>>>>>  for (i = 0; secclass_map[i].name; i++)
>>>>>>  fprintf(fout, "allow base_t base_t:%s *;\n",
>>>>>>  secclass_map[i].name);
>>>>>> - fprintf(fout, "user user_u roles { base_r };\n");
>>>>>> - fprintf(fout, "\n");
>>>>>> + fprintf(fout, "user user_u roles { base_r }");
>>>>>> + if (mls)
>>>>>> + fprintf(fout, " level %s range %s - %s", SYSTEMLOW,
>>>>>> + SYSTEMLOW, SYSTEMHIGH);
>>>>>> + fprintf(fout, ";\n");
>>>>>> +
>>>>>> +#define SUBJUSERROLETYPE "user_u:base_r:base_t"
>>>>>> +#define OBJUSERROLETYPE "user_u:object_r:base_t"
>>>>>>  /* default sids */
>>>>>>  for (i = 1; i < initial_sid_to_string_len; i++)
>>>>>> - fprintf(fout, "sid %s user_u:base_r:base_t\n",
>>>>>> initial_sid_to_string[i]);
>>>>>> + fprintf(fout, "sid %s " SUBJUSERROLETYPE "%s\n",
>>>>>> + initial_sid_to_string[i], mls ? ":" SYSTEMLOW : "");
>>>>>>  fprintf(fout, "\n");
>>>>>> - fprintf(fout, "fs_use_xattr ext2 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_xattr ext3 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_xattr ext4 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_xattr jfs 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_xattr xfs 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_xattr reiserfs 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_xattr jffs2 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_xattr gfs2 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> +#define FS_USE(behavior, fstype) \
>>>>>> + fprintf(fout, "fs_use_%s %s " OBJUSERROLETYPE "%s;\n", \
>>>>>> + behavior, fstype, mls ? ":" SYSTEMLOW : "")
>>>>>> +
>>>>>> + /*
>>>>>> + * Filesystems whose inode labels can be fetched via 
>>>>>> getxattr.
>>>>>> + */
>>>>>> +#ifdef CONFIG_EXT2_FS_SECURITY
>>>>>> + FS_USE("xattr", "ext2");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_EXT4_FS_SECURITY
>>>>>> +#ifdef CONFIG_EXT4_USE_FOR_EXT2
>>>>>> + FS_USE("xattr", "ext2");
>>>>>> +#endif
>>>>>> + FS_USE("xattr", "ext3");
>>>>>> + FS_USE("xattr", "ext4");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_JFS_SECURITY
>>>>>> + FS_USE("xattr", "jfs");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_REISERFS_FS_SECURITY
>>>>>> + FS_USE("xattr", "reiserfs");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_JFFS2_FS_SECURITY
>>>>>> + FS_USE("xattr", "jffs2");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_XFS_FS
>>>>>> + FS_USE("xattr", "xfs");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_GFS2_FS
>>>>>> + FS_USE("xattr", "gfs2");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_BTRFS_FS
>>>>>> + FS_USE("xattr", "btrfs");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_F2FS_FS_SECURITY
>>>>>> + FS_USE("xattr", "f2fs");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_OCFS2_FS
>>>>>> + FS_USE("xattr", "ocsfs2");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_OVERLAY_FS
>>>>>> + FS_USE("xattr", "overlay");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_SQUASHFS_XATTR
>>>>>> + FS_USE("xattr", "squashfs");
>>>>>> +#endif
>>>>>> +
>>>>>> + /*
>>>>>> + * Filesystems whose inodes are labeled from allocating 
>>>>>> task.
>>>>>> + */
>>>>>> + FS_USE("task", "pipefs");
>>>>>> + FS_USE("task", "sockfs");
>>>>>> - fprintf(fout, "fs_use_task eventpollfs 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_task pipefs 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_task sockfs 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> + /*
>>>>>> + * Filesystems whose inode labels are computed from both
>>>>>> + * the allocating task and the superblock label.
>>>>>> + */
>>>>>> +#ifdef CONFIG_UNIX98_PTYS
>>>>>> + FS_USE("trans", "devpts");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_HUGETLBFS
>>>>>> + FS_USE("trans", "hugetlbfs");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_TMPFS
>>>>>> + FS_USE("trans", "tmpfs");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_DEVTMPFS
>>>>>> + FS_USE("trans", "devtmpfs");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_POSIX_MQUEUE
>>>>>> + FS_USE("trans", "mqueue");
>>>>>> +#endif
>>>>>> - fprintf(fout, "fs_use_trans mqueue 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_trans devpts 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_trans hugetlbfs 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_trans tmpfs 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> - fprintf(fout, "fs_use_trans shm 
>>>>>> user_u:base_r:base_t;\n");
>>>>>> +#define GENFSCON(fstype, prefix) \
>>>>>> + fprintf(fout, "genfscon %s %s " OBJUSERROLETYPE "%s\n", \
>>>>>> + fstype, prefix, mls ? ":" SYSTEMLOW : "")
>>>>>> - fprintf(fout, "genfscon proc / user_u:base_r:base_t\n");
>>>>>> + /*
>>>>>> + * Filesystems whose inodes are labeled from path prefix 
>>>>>> match
>>>>>> + * relative to the filesystem root. Depending on the 
>>>>>> filesystem,
>>>>>> + * only a single label for all inodes may be supported. 
>>>>>> Here
>>>>>> + * we list the filesystem types for which per-file 
>>>>>> labeling is
>>>>>> + * supported using genfscon; any other filesystem type can 
>>>>>> also
>>>>>> + * be added by only with a single entry for all of its 
>>>>>> inodes.
>>>>>> + */
>>>>>> +#ifdef CONFIG_PROC_FS
>>>>>> + GENFSCON("proc", "/");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_SECURITY_SELINUX
>>>>>> + GENFSCON("selinuxfs", "/");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_SYSFS
>>>>>> + GENFSCON("sysfs", "/");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_DEBUG_FS
>>>>>> + GENFSCON("debugfs", "/");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_TRACING
>>>>>> + GENFSCON("tracefs", "/");
>>>>>> +#endif
>>>>>> +#ifdef CONFIG_PSTORE
>>>>>> + GENFSCON("pstore", "/");
>>>>>> +#endif
>>>>>> + GENFSCON("cgroup", "/");
>>>>>> + GENFSCON("cgroup2", "/");
>>>>>>  fclose(fout);
>>>>>> @@ -144,8 +259,8 @@ int main(int argc, char *argv[])
>>>>>>  printf("Wrote policy, but cannot open %s for writing\n",
>>>>>> ctxout);
>>>>>>  usage(argv[0]);
>>>>>>  }
>>>>>> - fprintf(fout, "/ user_u:base_r:base_t\n");
>>>>>> - fprintf(fout, "/.* user_u:base_r:base_t\n");
>>>>>> + fprintf(fout, "/ " OBJUSERROLETYPE "%s\n", mls ? ":" 
>>>>>> SYSTEMLOW : "");
>>>>>> + fprintf(fout, "/.* " OBJUSERROLETYPE "%s\n", mls ? ":" 
>>>>>> SYSTEMLOW :
>>>>>> "");
>>>>>>  fclose(fout);
>>>>>>  return 0;
>>>>>> -- 
>>>>>> 2.20.1
>>>>>>
>>>>>
>>>>
>>>
>>


      reply	other threads:[~2019-02-25 15:23 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-21 21:31 [PATCH v6] scripts/selinux: modernize mdp Stephen Smalley
2019-02-22  8:55 ` Dominick Grift
2019-02-22 13:04   ` Stephen Smalley
2019-02-22 13:40     ` Dominick Grift
2019-02-22 14:51       ` Stephen Smalley
2019-03-18 22:42         ` Paul Moore
2019-02-22 20:17   ` Stephen Smalley
2019-02-22 20:26     ` Dominick Grift
2019-02-22 20:44       ` Stephen Smalley
2019-02-22 20:55         ` Stephen Smalley
2019-02-25 15:23           ` Petr Lautrbach [this message]

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=pjdwolnlwn5.fsf@redhat.com \
    --to=plautrba@redhat.com \
    --cc=dominick.grift@defensec.nl \
    --cc=paul@paul-moore.com \
    --cc=sds@tycho.nsa.gov \
    --cc=selinux@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).