#!/usr/bin/env bats load helpers function setup() { requires root # for chcon if ! selinuxenabled; then skip "requires SELinux enabled and in enforcing mode" fi setup_busybox # Use a copy of runc binary with proper selinux label set. cp "$RUNC" . export RUNC="$PWD/runc" chcon -u system_u -r object_r -t container_runtime_exec_t "$RUNC" # Label container fs. chcon -u system_u -r object_r -t container_file_t -R rootfs # Save the start date and time for ausearch. AU_DD="$(date +%x)" AU_TT="$(date +%H:%M:%S)" } function teardown() { teardown_bundle # Show any avc denials. if [[ -v AU_DD && -v AU_TT ]] && command -v ausearch &>/dev/null; then ausearch -ts "$AU_DD" "$AU_TT" -i -m avc || true fi } # Baseline test, to check that runc works with selinux enabled. @test "runc run (no selinux label)" { update_config ' .process.args = ["/bin/true"]' runc run tst [ "$status" -eq 0 ] } @test "runc run (custom selinux label)" { update_config ' .process.selinuxLabel |= "system_u:system_r:container_t:s0:c4,c5" | .process.args = ["/bin/true"]' runc run tst [ "$status" -eq 0 ] }