mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
![Stephen Smalley](/assets/img/avatar_default.png)
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> Acked-by: Dominick Grift <dominick.grift@defensec.nl> Signed-off-by: Paul Moore <paul@paul-moore.com>
85 lines
2.3 KiB
Bash
Executable file
85 lines
2.3 KiB
Bash
Executable file
#!/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
|
|
echo "Could not find setfiles"
|
|
echo "Do you have policycoreutils installed?"
|
|
exit 1
|
|
fi
|
|
|
|
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}'`
|
|
|
|
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
|
|
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
|
|
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
|
|
|
|
cd /etc/selinux/dummy/contexts/files
|
|
$SF -F file_contexts /
|
|
|
|
mounts=`cat /proc/$$/mounts | \
|
|
egrep "ext[234]|jfs|xfs|reiserfs|jffs2|gfs2|btrfs|f2fs|ocfs2" | \
|
|
awk '{ print $2 '}`
|
|
$SF -F file_contexts $mounts
|
|
|
|
echo "-F" > /.autorelabel
|