Skip to content

Increase selinux coverage of the host system #2849

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 71 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
f72ca44
overlay profiles: Switch to hardened/selinux/systemd profiles
krnowak Apr 23, 2025
cf6ba82
sec-policy/selinux-apache: Add from Gentoo
krnowak Apr 24, 2025
66a0174
sec-policy/selinux-apm: Add from Gentoo
krnowak Apr 23, 2025
36c717d
sec-policy/selinux-bind: Add from Gentoo
krnowak Apr 23, 2025
f1ee6e7
sec-policy/selinux-brctl: Add from Gentoo
krnowak Apr 23, 2025
d74d238
sec-policy/selinux-cdrecord: Add from Gentoo
krnowak Apr 23, 2025
4b4acec
sec-policy/selinux-chronyd: Add from Gentoo
krnowak Apr 23, 2025
38fcdd9
sec-policy/selinux-dirmngr: Add from Gentoo
krnowak Apr 24, 2025
90b7dd2
sec-policy/selinux-dnsmasq: Add from Gentoo
krnowak Apr 23, 2025
938dfa9
sec-policy/selinux-docker: Add from Gentoo
krnowak Apr 23, 2025
cfe8dcf
sec-policy/selinux-dracut: Add from Gentoo
krnowak Apr 23, 2025
0f5ebc1
sec-policy/selinux-git: Add from Gentoo
krnowak Apr 23, 2025
db1100c
sec-policy/selinux-gpg: Add from Gentoo
krnowak Apr 23, 2025
e1ecc38
sec-policy/selinux-kdump: Add from Gentoo
krnowak Apr 23, 2025
9cedeee
sec-policy/selinux-kerberos: Add from Gentoo
krnowak Apr 23, 2025
869e7bd
sec-policy/selinux-ldap: Add from Gentoo
krnowak Apr 23, 2025
e140a20
sec-policy/selinux-loadkeys: Add from Gentoo
krnowak Apr 23, 2025
0ea0278
sec-policy/selinux-logrotate: Add from Gentoo
krnowak Apr 23, 2025
f7811d0
sec-policy/selinux-makewhatis: Add from Gentoo
krnowak Apr 23, 2025
9eab186
sec-policy/selinux-mandb: Add from Gentoo
krnowak Apr 23, 2025
b387c77
sec-policy/selinux-ntp: Add from Gentoo
krnowak Apr 23, 2025
963c0b3
sec-policy/selinux-pcscd: Add from Gentoo
krnowak Apr 23, 2025
0b21720
sec-policy/selinux-podman: Add from Gentoo
krnowak Apr 23, 2025
e012b56
sec-policy/selinux-qemu: Add from Gentoo
krnowak Apr 23, 2025
dda9538
sec-policy/selinux-quota: Add from Gentoo
krnowak Apr 23, 2025
ed40585
sec-policy/selinux-rpc: Add from Gentoo
krnowak Apr 23, 2025
1c3ba90
sec-policy/selinux-rpcbind: Add from Gentoo
krnowak Apr 23, 2025
407a711
sec-policy/selinux-samba: Add from Gentoo
krnowak Apr 23, 2025
2610ac4
sec-policy/selinux-sasl: Add from Gentoo
krnowak Apr 23, 2025
aca3947
sec-policy/selinux-smartmon: Add from Gentoo
krnowak Apr 23, 2025
42a3144
sec-policy/selinux-sudo: Add from Gentoo
krnowak Apr 23, 2025
a995b4e
sec-policy/selinux-tcsd: Add from Gentoo
krnowak Apr 23, 2025
64cdb99
sec-policy/selinux-virt: Add from Gentoo
krnowak Apr 24, 2025
e74b0f7
sec-policy/selinux-wireguard: Add from Gentoo
krnowak Apr 23, 2025
10af5af
sec-policy/selinux-xfs: Add from Gentoo
krnowak Apr 23, 2025
4d6b4b7
sec-policy/selinux-zfs: Add from Gentoo
krnowak Apr 23, 2025
c39bb25
overlay coreos/user-patches: Add symlinks for newly added policy pack…
krnowak Apr 23, 2025
a403e7b
.github: Add newly added policy packages to automation
krnowak Apr 23, 2025
6e4059d
overlay profiles: Clean up selinux enabling
krnowak Apr 23, 2025
0cdea03
overlay profiles: Mask python and perl USE flags for generic images
krnowak Apr 24, 2025
2c2fbcd
overlay profiles: Drop enabling caps and audit USE flags for specific…
krnowak Apr 24, 2025
2108a73
overlay profiles: Disable caps for smartmontools
krnowak Apr 24, 2025
015f6ae
overlay profiles: Allow python for sys-libs/libselinux
krnowak Apr 24, 2025
8d8c62d
overlay coreos/config: Add Flatcar modifications for sys-libs/libsema…
krnowak Apr 25, 2025
500f0fa
overlay sys-libs/libsemanage: Move to portage-stable
krnowak Apr 25, 2025
06f70e0
sys-libs/libsemanage: Sync with Gentoo
krnowak Apr 25, 2025
8a4673b
.github: Add sys-libs/libsemanage to automation
krnowak Apr 25, 2025
be03ce4
overlay sys-apps/policycoreutils: Move to portage-stable
krnowak Apr 29, 2025
47e1dde
sys-apps/policycoreutils: Sync with Gentoo
krnowak Apr 29, 2025
7a3bc7c
.github: Add sys-apps/policycoreutils to automation
krnowak Apr 29, 2025
be3ccbf
overlay profiles: Add FLATCAR_{TYPE,SUBTYPE} variables
krnowak Apr 30, 2025
aec7546
overlay: Replace cros_target with new variables
krnowak Apr 30, 2025
161bf1e
overlay coreos/config: Add python stuff to install mask for prod images
krnowak May 8, 2025
f4a85ed
overlay coreos/user-patches: Drop a patch for sys-libs/libsemanage
krnowak May 8, 2025
c339f64
app-admin/setools: Add from Gentoo
krnowak May 8, 2025
dc71a30
.github: Add app-admin/setools to automation
krnowak May 8, 2025
7a1f2af
overlay profiles: Do not pull app-admin/setools into prod images
krnowak May 8, 2025
7f29f2d
sys-apps/selinux-python: Add from Gentoo
krnowak May 8, 2025
f9d9a06
.github: Add sys-apps/selinux-python to automation
krnowak May 8, 2025
328fe66
dev-python/networkx: Add from Gentoo
krnowak May 8, 2025
eac4c74
.github: Add dev-python/networkx to automation
krnowak May 8, 2025
fe2ed9c
overlay coreos/config: Add further modifications to sys-process/audit
krnowak May 8, 2025
23e2d35
overlay profiles: Allow python for sys-process/audit
krnowak May 8, 2025
0d06538
overlay coreos/config: Add further Flatcar modifications for sys-apps…
krnowak May 8, 2025
d75e3b5
overlay profiles: Force static-libs on sys-libs/libsepol to fix boots…
krnowak May 9, 2025
8b1e581
build_toolchain: Do not leak variables
krnowak May 15, 2025
0dea927
build_toolchains: Break dep loop and handle more dependencies
krnowak May 13, 2025
693e695
overlay profiles: Move python from package.mask to package.provided f…
krnowak May 19, 2025
06c0b00
overlay coreos/config: Mask also /usr/bin/rlpkg
krnowak May 19, 2025
947305b
overlay coreos/config: Try again at rlpkg masking
krnowak May 19, 2025
73ea148
debug
krnowak May 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
40 changes: 40 additions & 0 deletions .github/workflows/portage-stable-packages-list
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ acct-user/tss
app-admin/eselect
app-admin/logrotate
app-admin/perl-cleaner
app-admin/setools
app-admin/sudo

app-alternatives/awk
Expand Down Expand Up @@ -334,6 +335,7 @@ dev-python/markupsafe
dev-python/mdurl
dev-python/more-itertools
dev-python/msgpack
dev-python/networkx
dev-python/olefile
dev-python/packaging
dev-python/pathspec
Expand Down Expand Up @@ -565,13 +567,48 @@ scripts

sec-keys/openpgp-keys-gentoo-release

sec-policy/selinux-apache
sec-policy/selinux-apm
sec-policy/selinux-base
sec-policy/selinux-base-policy
sec-policy/selinux-bind
sec-policy/selinux-brctl
sec-policy/selinux-cdrecord
sec-policy/selinux-chronyd
sec-policy/selinux-container
sec-policy/selinux-dbus
sec-policy/selinux-dirmngr
sec-policy/selinux-dnsmasq
sec-policy/selinux-docker
sec-policy/selinux-dracut
sec-policy/selinux-git
sec-policy/selinux-gpg
sec-policy/selinux-kdump
sec-policy/selinux-kerberos
sec-policy/selinux-ldap
sec-policy/selinux-loadkeys
sec-policy/selinux-logrotate
sec-policy/selinux-makewhatis
sec-policy/selinux-mandb
sec-policy/selinux-ntp
sec-policy/selinux-pcscd
sec-policy/selinux-podman
sec-policy/selinux-policykit
sec-policy/selinux-qemu
sec-policy/selinux-quota
sec-policy/selinux-rpc
sec-policy/selinux-rpcbind
sec-policy/selinux-samba
sec-policy/selinux-sasl
sec-policy/selinux-smartmon
sec-policy/selinux-sssd
sec-policy/selinux-sudo
sec-policy/selinux-tcsd
sec-policy/selinux-unconfined
sec-policy/selinux-virt
sec-policy/selinux-wireguard
sec-policy/selinux-xfs
sec-policy/selinux-zfs

sys-apps/acl
sys-apps/attr
Expand Down Expand Up @@ -613,10 +650,12 @@ sys-apps/nvme-cli
sys-apps/pciutils
sys-apps/pcsc-lite
sys-apps/pkgcore
sys-apps/policycoreutils
sys-apps/portage
sys-apps/pv
sys-apps/sandbox
sys-apps/sed
sys-apps/selinux-python
sys-apps/semodule-utils
sys-apps/shadow
sys-apps/smartmontools
Expand Down Expand Up @@ -692,6 +731,7 @@ sys-libs/libcap-ng
sys-libs/libnvme
sys-libs/libseccomp
sys-libs/libselinux
sys-libs/libsemanage
sys-libs/libsepol
sys-libs/libunwind
sys-libs/liburing
Expand Down
137 changes: 137 additions & 0 deletions build_library/break_dep_loop.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# Goo to attempt to resolve dependency loops on individual packages.
# If this becomes insufficient we will need to move to a full multi-stage
# bootstrap process like we do with the SDK via catalyst.
#
# Called like:
#
# break_dep_loop [-v] [PKG_USE_PAIR]…
#
# Pass -v for verbose output.
#
# PKG_USE_PAIR consists of two arguments: a package name (for example:
# sys-fs/lvm2), and a comma-separated list of USE flags to clear (for
# example: udev,systemd).
#
# Env vars:
#
# BDL_ROOT, BDL_PORTAGEQ, BDL_EQUERY, BDL_EMERGE, BDL_INFO
break_dep_loop() {
local bdl_root=${BDL_ROOT:-/}
local bdl_portageq=${BDL_PORTAGEQ:-portageq}
local bdl_equery=${BDL_EQUERY:-equery}
local bdl_emerge=${BDL_EMERGE:-emerge}
local bdl_info=${BDL_INFO:-echo}
local conf_dir="${bdl_root%/}/etc/portage"
local flag_file="${conf_dir}/package.use/break_dep_loop"
local force_flag_file="${conf_dir}/profile/package.use.force/break_dep_loop"

local verbose=
if [[ ${1:-} = '-v' ]]; then
verbose=x
shift
fi

# Be sure to clean up use flag hackery from previous failed runs
sudo rm -f "${flag_file}" "${force_flag_file}"

if [[ ${#} -eq 0 ]]; then
return 0
fi

function bdl_call() {
local output_var_name=${1}; shift
if [[ ${output_var_name} = '-' ]]; then
local throw_away
output_var_name=throw_away
fi
local -n output_ref=${output_var_name}
if [[ -n ${verbose} ]]; then
"${bdl_info}" "${*@Q}"
fi
local -i rv=0
output_ref=$("${@}") || rv=${?}
if [[ -n ${verbose} ]]; then
"${bdl_info}" "output: ${output_ref}"
"${bdl_info}" "exit status: ${rv}"
fi
return ${rv}
}

# Temporarily compile/install packages with flags disabled. If a binary
# package is available use it regardless of its version or use flags.
local pkg use_flags disabled_flags
local -a flags
local -a pkgs args flag_file_entries pkg_summaries
local -A per_pkg_flags=()
while [[ $# -gt 1 ]]; do
pkg=${1}
use_flags=${2}
shift 2

mapfile -t flags <<<"${use_flags//,/$'\n'}"
disabled_flags="${flags[*]/#/-}"

pkgs+=( "${pkg}" )
per_pkg_flags["${pkg}"]=${use_flags}
flag_file_entries+=( "${pkg} ${disabled_flags}" )
args+=( "--buildpkg-exclude=${pkg}" )
pkg_summaries+=( "${pkg}[${disabled_flags}]" )
done
unset pkg use_flags disabled_flags flags

# If packages are already installed we have nothing to do
local pkg any_package_uninstalled=
for pkg in "${pkgs[@]}"; do
if ! bdl_call - "${bdl_portageq}" has_version "${bdl_root}" "${pkg}"; then
any_package_uninstalled=x
break
fi
done
if [[ -z ${any_package_uninstalled} ]]; then
if [[ -n ${verbose} ]]; then
"${bdl_info}" "all packages (${pkgs[*]}) are installed already, skipping"
fi
return 0
fi
unset pkg any_package_uninstalled

# Likewise, nothing to do if the flags aren't actually enabled.
local pkg any_flag_enabled= equery_output flag flags_str
local -a flags grep_args
for pkg in "${pkgs[@]}"; do
bdl_call equery_output "${bdl_equery}" -q uses "${pkg}"
flags_str=${per_pkg_flags["${pkg}"]}
mapfile -t flags <<<"${flags_str//,/$'\n'}"
for flag in "${flags[@]}"; do
grep_args+=( -e "${flag/#/+}" )
done
if bdl_call - grep --quiet --line-regexp --fixed-strings "${grep_args[@]}" <<<"${equery_output}"; then
any_flag_enabled=x
break
fi
done
if [[ -z ${any_flag_enabled} ]]; then
if [[ -n ${verbose} ]]; then
"${bdl_info}" "all packages (${pkgs[*]}) has all the desired USE flags already disabled, skipping"
fi
return 0
fi
unset pkg any_flag_enabled equery_output flag flags_str flags grep_args

"${bdl_info}" "Merging ${pkg_summaries[*]}"
sudo mkdir -p "${flag_file%/*}" "${force_flag_file%/*}"
printf '%s\n' "${flag_file_entries[@]}" | sudo tee "${flag_file}" >/dev/null
cp -a "${flag_file}" "${force_flag_file}"
if [[ -n ${verbose} ]]; then
"${bdl_info}" "contents of ${flag_file@Q}:"
"${bdl_info}" "$(<"${flag_file}")"
"${bdl_info}" "${bdl_emerge}" --rebuild-if-unbuilt=n "${args[@]}" "${pkgs[@]}"
fi
# rebuild-if-unbuilt is disabled to prevent portage from needlessly
# rebuilding zlib for some unknown reason, in turn triggering more rebuilds.
"${bdl_emerge}" \
--rebuild-if-unbuilt=n \
"${args[@]}" "${pkgs[@]}"
sudo rm -f "${flag_file}" "${force_flag_file}"
unset bdl_call
}
77 changes: 71 additions & 6 deletions build_library/catalyst_toolchains.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
set -e
source /tmp/chroot-functions.sh
source /tmp/toolchain_util.sh
source /tmp/break_dep_loop.sh

# A note on packages:
# The default PKGDIR is /usr/portage/packages
Expand All @@ -28,13 +29,77 @@ build_target_toolchain() {
local ROOT="/build/${board}"
local SYSROOT="/usr/$(get_board_chost "${board}")"

mkdir -p "${ROOT}/usr"
cp -at "${ROOT}" "${SYSROOT}"/lib*
cp -at "${ROOT}"/usr "${SYSROOT}"/usr/include "${SYSROOT}"/usr/lib*
function btt_emerge() {
# --root is required because run_merge overrides ROOT=
PORTAGE_CONFIGROOT="$ROOT" run_merge --root="$ROOT" --sysroot="$ROOT" "${@}"
}

# --root is required because run_merge overrides ROOT=
PORTAGE_CONFIGROOT="$ROOT" \
run_merge -u --root="$ROOT" --sysroot="$ROOT" "${TOOLCHAIN_PKGS[@]}"
# install baselayout first - with the selinux profile, this is
# pulled into the dependency chain
btt_emerge --oneshot --nodeps sys-apps/baselayout

# copy libraries from sysroot to root - sysroot seems to be
# split-usr, whereas root does not, so take this into account
(
shopt -s nullglob
local d f
local -a files
for d in "${SYSROOT}"/lib* "${SYSROOT}"/usr/lib*; do
if [[ ! -d ${d} ]]; then
continue
fi
files=( "${d}"/* )
if [[ ${#files[@]} -gt 0 ]]; then
f=${d##*/}
cp -at "${ROOT}/usr/${f}" "${files[@]}"
fi
done
)
cp -at "${ROOT}"/usr "${SYSROOT}"/usr/include

local -a args_for_bdl=()
if [[ -n ${clst_VERBOSE} ]]; then
args_for_bdl+=(-v)
fi
function btt_bdl_portageq() {
ROOT=${ROOT} SYSROOT=${ROOT} PORTAGE_CONFIGROOT=${ROOT} portageq "${@}"
}
function btt_bdl_equery() {
ROOT=${ROOT} SYSROOT=${ROOT} PORTAGE_CONFIGROOT=${ROOT} equery "${@}"
}
# Breaking the following loops here:
#
# glibc[nscd] -> libcap[pam] -> sys-libs/pam -> libcrypt -> libxcrypt[system] -> glibc
# glibc[nscd] -> audit[python] -> python -> libcrypt -> libxcrypt[system] -> glibc
# glibc[selinux] -> libselinux[python] -> python -> libcrypt -> libxcrypt[system] -> glibc
# systemd[cryptsetup] -> cryptsetup[udev] -> libudev[systemd] -> systemd
# systemd[cryptsetup] -> cryptsetup -> lvm2[udev] -> libudev[systemd] -> systemd
# systemd[cryptsetup] -> cryptsetup -> lvm2[lvm,systemd] -> systemd
# systemd[cryptsetup] -> cryptsetup -> tmpfiles[systemd] -> systemd
# systemd[curl] -> curl -> nghttp2[systemd] -> systemd
# importd requires curl, so needs to be disabled too
# systemd[tpm] -> tpm2-tss -> tmpfiles[systemd] -> systemd
# util-linux[audit] -> audit[python] -> python -> util-linux
# util-linux[cryptsetup] -> cryptsetup -> util-linux
# util-linux[pam] -> sys-libs/pam[audit] -> sys-process/audit[python] -> python -> util-linux
# su requires pam, so needs to be disabled too
# util-linux[selinux] -> libselinux[python] -> python -> util-linux
# util-linux[systemd] -> systemd -> util-linux
# util-linux[udev] -> libudev[systemd] -> systemd -> util-linux
args_for_bdl+=(
sys-apps/systemd cryptsetup,curl,importd,tpm
sys-apps/util-linux audit,cryptsetup,pam,selinux,su,systemd,udev
sys-libs/glibc nscd,selinux
)
BDL_ROOT=${ROOT} \
BDL_PORTAGEQ=btt_bdl_portageq \
BDL_EQUERY=btt_bdl_equery \
BDL_EMERGE=btt_emerge \
break_dep_loop "${args_for_bdl[@]}"
unset btt_bdl_portageq btt_bdl_equery

btt_emerge --changed-use --update --deep "${TOOLCHAIN_PKGS[@]}"
unset btt_emerge
}

configure_crossdev_overlay / /usr/local/portage/crossdev
Expand Down
Loading