mirror of
				https://github.com/optim-enterprises-bv/secureblue.git
				synced 2025-10-30 18:07:45 +00:00 
			
		
		
		
	Revert "feat: (almost) entirely remove suid (#606)"
This reverts commit 5f7a6d2a6f.
			
			
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/workflows/tests/justfile_tests.bats
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/tests/justfile_tests.bats
									
									
									
									
										vendored
									
									
								
							| @@ -17,7 +17,7 @@ setup() { | ||||
| } | ||||
|  | ||||
| @test "Ensure ujust is configured correctly for tests" { | ||||
|     run ujust bios | ||||
|     run ujust logs-this-boot | ||||
|     [ "$status" -eq 0 ] | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| -----BEGIN PUBLIC KEY----- | ||||
| MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELYK0cZjzpDF+bmiOMd6D7F+mi0Hv | ||||
| MhgXMA/VJvvwWJowh3izN28j4wAIA5T6HlTNqnr8CqJRDVciNpgtv0ACFA== | ||||
| MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEh4g4er65FA6Bn134y2MPFM+WJeFk | ||||
| Xt939y/Pf/LpP/UREPSybAabRj2eWFyBqWWe1x2SQl0ptkHGg+M3h+SZ1w== | ||||
| -----END PUBLIC KEY----- | ||||
|   | ||||
| @@ -61,8 +61,9 @@ Setting a GRUB password helps protect the device from physical tampering and mit | ||||
|  | ||||
| To set a GRUB password, use the following command. By default, the password will be required when modifying boot entries, but not when booting existing entries. | ||||
|  | ||||
| 1. `run0` | ||||
| 2. `grub2-setpassword` | ||||
| ``` | ||||
| sudo grub2-setpassword | ||||
| ``` | ||||
|  | ||||
| GRUB will prompt for a username and password. The default username is root. | ||||
|  | ||||
|   | ||||
| @@ -19,7 +19,7 @@ setup-usbguard: | ||||
|     #!/usr/bin/bash | ||||
|     echo "Notice: This will generate a policy based on your existing connected USB devices." | ||||
|     ACTIVE_USERNAME=$(whoami) | ||||
|     run0 sh -c ' | ||||
|     pkexec sh -c ' | ||||
|         mkdir -p /var/log/usbguard | ||||
|         mkdir -p /etc/usbguard | ||||
|         chmod 755 /etc/usbguard | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # Toggle the cups service on/off | ||||
| toggle-cups: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/pkexec /usr/bin/bash | ||||
|     if systemctl is-enabled --quiet cups; then | ||||
|       firewall-cmd --permanent --remove-port=631/tcp | ||||
|       firewall-cmd --permanent --remove-port=631/udp  | ||||
| @@ -23,21 +23,21 @@ toggle-cups: | ||||
|  | ||||
| # Toggle bluetooth kernel modules on/off (requires reboot) | ||||
| toggle-bluetooth-modules: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/pkexec /usr/bin/bash | ||||
|     BLUE_MOD_FILE="/etc/modprobe.d/99-bluetooth.conf" | ||||
|     if test -e $BLUE_MOD_FILE; then | ||||
|       rm -f $BLUE_MOD_FILE | ||||
|       sudo rm -f $BLUE_MOD_FILE | ||||
|       echo "Bluetooth kernel modules disabled. Reboot to take effect." | ||||
|     else | ||||
|       sh -c 'echo "install bluetooth /sbin/modprobe --ignore-install bluetooth" >> "$1"' _ "$BLUE_MOD_FILE" | ||||
|       sh -c 'echo "install btusb /sbin/modprobe --ignore-install btusb" >> "$1"' _ "$BLUE_MOD_FILE" | ||||
|       chmod 644 $BLUE_MOD_FILE | ||||
|       sudo sh -c 'echo "install bluetooth /sbin/modprobe --ignore-install bluetooth" >> "$1"' _ "$BLUE_MOD_FILE" | ||||
|       sudo sh -c 'echo "install btusb /sbin/modprobe --ignore-install btusb" >> "$1"' _ "$BLUE_MOD_FILE" | ||||
|       sudo chmod 644 $BLUE_MOD_FILE | ||||
|       echo "Bluetooth kernel modules enabled. Reboot to take effect." | ||||
|     fi | ||||
|  | ||||
| # Toggle GHNS (KDE Get New Stuff) | ||||
| toggle-ghns: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/pkexec /usr/bin/bash | ||||
|     KDE_GLOBALS_FILE="/etc/xdg/kdeglobals" | ||||
|     if test -e $KDE_GLOBALS_FILE; then | ||||
|       if grep -q "ghns=false" "$KDE_GLOBALS_FILE"; then | ||||
| @@ -55,24 +55,24 @@ toggle-ghns: | ||||
|  | ||||
| # enable a kernel module that is disabled by modprobe.d (requires restart) | ||||
| override-enable-module mod_name: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/pkexec /usr/bin/bash | ||||
|     MOD_NAME="{{ mod_name }}" | ||||
|     MOD_FILE="/etc/modprobe.d/99-$MOD_NAME.conf" | ||||
|     if test -e $MOD_FILE; then | ||||
|       echo "$MOD_NAME module is already enabled." | ||||
|     else | ||||
|       sh -c 'echo "install $1 /sbin/modprobe --ignore-install $1" >> "$2"' _ "$MOD_NAME" "$MOD_FILE"  | ||||
|       chmod 644 $MOD_FILE | ||||
|       sudo sh -c 'echo "install $1 /sbin/modprobe --ignore-install $1" >> "$2"' _ "$MOD_NAME" "$MOD_FILE"  | ||||
|       sudo chmod 644 $MOD_FILE | ||||
|       echo "Override created to enable $MOD_NAME module. Reboot to take effect." | ||||
|     fi | ||||
|  | ||||
| # reset the override by `just override-enable-module`, i.e. disable the module again (requires restart) | ||||
| override-reset-module mod_name: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/pkexec /usr/bin/bash | ||||
|     MOD_NAME="{{ mod_name }}" | ||||
|     MOD_FILE="/etc/modprobe.d/99-$MOD_NAME.conf" | ||||
|     if test -e $MOD_FILE; then | ||||
|       rm -f $MOD_FILE | ||||
|       sudo rm -f $MOD_FILE | ||||
|       echo "The override for $MOD_NAME module has been reset. Reboot to take effect." | ||||
|     else | ||||
|       echo "No override found for $MOD_NAME module." | ||||
| @@ -80,7 +80,7 @@ override-reset-module mod_name: | ||||
|  | ||||
| # Toggle anticheat support by changing ptrace scope (requires restart) | ||||
| toggle-anticheat-support: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/pkexec /usr/bin/bash | ||||
|     SYSCTL_HARDENING_FILE="/etc/sysctl.d/hardening.conf" | ||||
|     if grep -q "kernel.yama.ptrace_scope = 3" "$SYSCTL_HARDENING_FILE"; then | ||||
|         sed -i "s/kernel.yama.ptrace_scope = 3/kernel.yama.ptrace_scope = 1/" "$SYSCTL_HARDENING_FILE" | ||||
| @@ -94,14 +94,14 @@ toggle-anticheat-support: | ||||
|  | ||||
| # Toggle Gnome JIT JavaScript for GJS and WebkitGTK (requires session restart) | ||||
| toggle-gnome-jit-js: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/pkexec /usr/bin/bash | ||||
|     ENV_FILE="/etc/profile.d/gnome-disable-jit.sh" | ||||
|     if test -e $ENV_FILE; then | ||||
|         rm -f $ENV_FILE | ||||
|         sudo rm -f $ENV_FILE | ||||
|         echo "JIT JavaScript for Gnome and WebkitGTK has been enabled." | ||||
|     else | ||||
|         cp /usr$ENV_FILE $ENV_FILE | ||||
|         chmod 644 $ENV_FILE | ||||
|         sudo cp /usr$ENV_FILE $ENV_FILE | ||||
|         sudo chmod 644 $ENV_FILE | ||||
|         echo "JIT JavaScript for Gnome and WebkitGTK has been disabled." | ||||
|     fi | ||||
|  | ||||
| @@ -119,7 +119,7 @@ toggle-gnome-extensions: | ||||
|  | ||||
| # Toggle Xwayland support | ||||
| toggle-xwayland ACTION="prompt": | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/pkexec /usr/bin/bash | ||||
|     source /usr/lib/ujust/ujust.sh | ||||
|     OPTION={{ ACTION }} | ||||
|     if [ "$OPTION" == "prompt" ]; then | ||||
| @@ -137,31 +137,31 @@ toggle-xwayland ACTION="prompt": | ||||
|     if [ "$OPTION" == "GNOME" ] || [ "${OPTION,,}" == "gnome" ]; then | ||||
|       GNOME_XWAYLAND_FILE="/etc/systemd/user/org.gnome.Shell@wayland.service.d/override.conf" | ||||
|       if test -e $GNOME_XWAYLAND_FILE; then | ||||
|         rm -f $GNOME_XWAYLAND_FILE | ||||
|         sudo rm -f $GNOME_XWAYLAND_FILE | ||||
|         echo "Xwayland for GNOME has been enabled." | ||||
|       else | ||||
|         cp /usr$GNOME_XWAYLAND_FILE $GNOME_XWAYLAND_FILE | ||||
|         chmod 644 $GNOME_XWAYLAND_FILE | ||||
|         sudo cp /usr$GNOME_XWAYLAND_FILE $GNOME_XWAYLAND_FILE | ||||
|         sudo chmod 644 $GNOME_XWAYLAND_FILE | ||||
|         echo "Xwayland for GNOME has been disabled." | ||||
|       fi | ||||
|     elif [ "$OPTION" == "KDE Plasma" ] || [ "${OPTION,,}" == "plasma" ]; then | ||||
|       PLASMA_XWAYLAND_FILE="/etc/systemd/user/plasma-kwin_wayland.service.d/override.conf" | ||||
|       if test -e $PLASMA_XWAYLAND_FILE; then | ||||
|         rm -f $PLASMA_XWAYLAND_FILE | ||||
|         sudo rm -f $PLASMA_XWAYLAND_FILE | ||||
|         echo "Xwayland for KDE Plasma has been enabled." | ||||
|       else | ||||
|         cp /usr$PLASMA_XWAYLAND_FILE $PLASMA_XWAYLAND_FILE | ||||
|         chmod 644 $PLASMA_XWAYLAND_FILE | ||||
|         sudo cp /usr$PLASMA_XWAYLAND_FILE $PLASMA_XWAYLAND_FILE | ||||
|         sudo chmod 644 $PLASMA_XWAYLAND_FILE | ||||
|         echo "Xwayland for KDE Plasma has been disabled." | ||||
|       fi | ||||
|     elif [ "$OPTION" == "Sway" ] || [ "${OPTION,,}" == "sway" ]; then | ||||
|       SWAY_XWAYLAND_FILE="/etc/sway/config.d/99-noxwayland.conf" | ||||
|       if test -e $SWAY_XWAYLAND_FILE; then | ||||
|         rm -f $SWAY_XWAYLAND_FILE | ||||
|         sudo rm -f $SWAY_XWAYLAND_FILE | ||||
|         echo "Xwayland for Sway has been enabled." | ||||
|       else | ||||
|         cp /usr$SWAY_XWAYLAND_FILE $SWAY_XWAYLAND_FILE | ||||
|         chmod 644 $SWAY_XWAYLAND_FILE | ||||
|         sudo cp /usr$SWAY_XWAYLAND_FILE $SWAY_XWAYLAND_FILE | ||||
|         sudo chmod 644 $SWAY_XWAYLAND_FILE | ||||
|         echo "Xwayland for Sway has been disabled." | ||||
|       fi | ||||
|     fi | ||||
| @@ -179,7 +179,7 @@ toggle-bash-environment-lockdown: | ||||
|       if lsattr "${BASH_ENV_FILES[0]}" 2>/dev/null | awk '{print $1}' | grep -q 'i'; then | ||||
|         echo "Bash environment '(${BASH_ENV_FILES[@]})' is locked down. Unlocking it." | ||||
|         for file in "${BASH_ENV_FILES[@]}"; do | ||||
|             run0 chattr -i "$file" | ||||
|             pkexec chattr -i "$file" | ||||
|         done | ||||
|       else | ||||
|         echo "Bash environment '(${BASH_ENV_FILES[@]})' is unlocked. Locking it." | ||||
| @@ -215,7 +215,7 @@ toggle-bash-environment-lockdown: | ||||
|         " > ~/.bash_profile | ||||
|  | ||||
|         for file in "${BASH_ENV_FILES[@]}"; do | ||||
|             run0 chattr +i "$file" | ||||
|             pkexec chattr +i "$file" | ||||
|         done | ||||
|       fi | ||||
|     else | ||||
|   | ||||
| @@ -25,28 +25,26 @@ bios: | ||||
|  | ||||
| # Show all messages from this boot | ||||
| logs-this-boot: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     journalctl -b 0 | ||||
|     sudo journalctl -b 0 | ||||
|  | ||||
| # Show all messages from last boot | ||||
| logs-last-boot: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     journalctl -b -1 | ||||
|     sudo journalctl -b -1 | ||||
|  | ||||
| # Regenerate GRUB config, useful in dual-boot scenarios where a second operating system isn't listed | ||||
| regenerate-grub: | ||||
|     #! /bin/run0 /bin/bash | ||||
|     #!/usr/bin/bash | ||||
|     if [ -d /sys/firmware/efi ]; then | ||||
|       grub2-mkconfig -o /etc/grub2-efi.cfg | ||||
|       sudo grub2-mkconfig -o /etc/grub2-efi.cfg | ||||
|     else | ||||
|       grub2-mkconfig -o /etc/grub2.cfg | ||||
|       sudo grub2-mkconfig -o /etc/grub2.cfg | ||||
|     fi | ||||
|  | ||||
| # Enroll Nvidia driver & KMOD signing key for secure boot - Enter password "universalblue" if prompted | ||||
| enroll-secure-boot-key: | ||||
|     run0 mokutil --timeout -1 | ||||
|     sudo mokutil --timeout -1 | ||||
|     echo 'The next line will prompt for a MOK password. Then, input "universalblue"' | ||||
|     run0 mokutil --import /etc/pki/akmods/certs/akmods-ublue.der | ||||
|     sudo mokutil --import /etc/pki/akmods/certs/akmods-ublue.der | ||||
|     echo 'At next reboot, the mokutil UEFI menu UI will be displayed (*QWERTY* keyboard input and navigation).\nThen, select "Enroll MOK", and input "universalblue" as the password' | ||||
|  | ||||
| # Toggle display of the user-motd in terminal | ||||
|   | ||||
| @@ -12,13 +12,34 @@ whitelist=( | ||||
|     "/usr/lib/polkit-1/polkit-agent-helper-1" | ||||
|     # Needed for flatpak on no-userns images | ||||
|     "/usr/bin/bwrap" | ||||
|     # Required for chrome suid sandbox on no-userns images | ||||
|     "/usr/lib64/chromium-browser/chrome-sandbox" | ||||
|     # Requires cap_setuid if the suid bit is removed | ||||
|     "/usr/bin/gpasswd" | ||||
|     # "In effect, when the SUID bit is unset on /usr/bin/mount, mount(8) will never drop permissions. If /usr/bin/mount were to have a" | ||||
|     # "nonempty permitted capability set and its effective capability bit were set, then mount(8) would never have its effective "  | ||||
|     # "capability set cleared during execution, potentially allowing unprivileged users to perform actions they shouldn’t be able to perform" | ||||
|     # https://gist.github.com/ok-ryoko/1ff42a805d496cb1ca22e5cdf6ddefb0#can-we-replace-the-suid-bit-with-zero-or-more-file-capabilities-4 | ||||
|     "/usr/bin/mount" | ||||
|     # Required for nvidia images | ||||
|     "/usr/bin/nvidia-modprobe" | ||||
|     # https://gist.github.com/ok-ryoko/1ff42a805d496cb1ca22e5cdf6ddefb0#can-we-replace-the-suid-bit-with-zero-or-more-file-capabilities | ||||
|     "/usr/bin/passwd" | ||||
|     # https://gist.github.com/ok-ryoko/1ff42a805d496cb1ca22e5cdf6ddefb0#why-does-this-binary-need-to-be-suid-root-9 | ||||
|     "/usr/bin/pkexec" | ||||
|     # https://gist.github.com/ok-ryoko/1ff42a805d496cb1ca22e5cdf6ddefb0#can-we-replace-the-suid-bit-with-zero-or-more-file-capabilities-6 | ||||
|     "/usr/bin/su" | ||||
|     # https://gist.github.com/ok-ryoko/1ff42a805d496cb1ca22e5cdf6ddefb0#can-we-replace-the-suid-bit-with-zero-or-more-file-capabilities-6 | ||||
|     "/usr/bin/sudo" | ||||
|     # See /usr/bin/mount | ||||
|     "/usr/bin/umount" | ||||
|     # https://gitlab.freedesktop.org/polkit/polkit/-/issues/168 | ||||
|     "/usr/lib/polkit-1/polkit-agent-helper-1" | ||||
|     # https://github.com/secureblue/secureblue/issues/119 | ||||
|     # Required for hardened_malloc to be used by suid-root processes | ||||
|     "/usr/lib64/libhardened_malloc-light.so" | ||||
|     "/usr/lib64/libhardened_malloc-pkey.so" | ||||
|     "/usr/lib64/libhardened_malloc.so" | ||||
|     # Required for chrome suid sandbox on no-userns images | ||||
|     "/usr/lib64/chromium-browser/chrome-sandbox" | ||||
|     # https://github.com/secureblue/secureblue/issues/119 | ||||
|     "/usr/lib64/glibc-hwcaps/x86-64/libhardened_malloc-light.so" | ||||
|     "/usr/lib64/glibc-hwcaps/x86-64/libhardened_malloc-pkey.so" | ||||
|     "/usr/lib64/glibc-hwcaps/x86-64/libhardened_malloc.so" | ||||
| @@ -31,6 +52,8 @@ whitelist=( | ||||
|     "/usr/lib64/glibc-hwcaps/x86-64-v4/libhardened_malloc-light.so" | ||||
|     "/usr/lib64/glibc-hwcaps/x86-64-v4/libhardened_malloc-pkey.so" | ||||
|     "/usr/lib64/glibc-hwcaps/x86-64-v4/libhardened_malloc.so" | ||||
|     # Requires cap_setgid,cap_setuid if the SUID bit is removed | ||||
|     "/usr/sbin/grub2-set-bootflag" | ||||
| ) | ||||
|  | ||||
|  | ||||
| @@ -62,10 +85,4 @@ find /usr -type f -perm /2000 | | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|  | ||||
| rm -f /usr/bin/chsh | ||||
| rm -f /usr/bin/pkexec | ||||
| rm -f /usr/bin/sudo | ||||
| rm -f /usr/bin/su | ||||
|  | ||||
| systemctl enable setcapsforunsuidbinaries.service | ||||
|   | ||||
| @@ -1,6 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| # Tell build process to exit if there are any errors. | ||||
| set -oue pipefail | ||||
|  | ||||
| rm -f /etc/dnf/protected.d/sudo.conf | ||||
| @@ -5,7 +5,6 @@ modules: | ||||
|     - type: script | ||||
|       scripts: | ||||
|         - installrpmfusion.sh | ||||
|         - unprotectsudo.sh | ||||
|     - from-file: common/common-packages.yml | ||||
|     - type: files | ||||
|       files: | ||||
|   | ||||
| @@ -5,6 +5,7 @@ scripts: | ||||
|   - disablesealertpopups.sh | ||||
|   - httpsmirrors.sh | ||||
|   - createmissingdirectories.sh | ||||
|   - removesuid.sh | ||||
|   - disablegeoclue.sh | ||||
|   - enablesecurebluefirstrun.sh | ||||
|   - createjustcompletions.sh | ||||
|   | ||||
| @@ -35,9 +35,6 @@ remove: | ||||
|   - open-vm-tools-desktop | ||||
|   - virtualbox-guest-additions | ||||
|   - passim | ||||
|   - sudo | ||||
|   - sudo-python-plugin | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -2,5 +2,4 @@ modules: | ||||
|     - type: script | ||||
|       scripts: | ||||
|         - removeunusedrepos.sh | ||||
|         - removesuid.sh | ||||
|         - regenerateinitramfs.sh | ||||
| @@ -16,8 +16,6 @@ modules: | ||||
|         - usbguard | ||||
|         - firewalld | ||||
|         - policycoreutils-python-utils | ||||
|       remove: | ||||
|         - sudo | ||||
|          | ||||
|     - type: files | ||||
|       files: | ||||
| @@ -30,6 +28,3 @@ modules: | ||||
|       scripts: | ||||
|         - excludepcsc.sh | ||||
|         - setserverdefaultzone.sh | ||||
|         - setservermotd.sh | ||||
|         - removebrewjust.sh | ||||
|         - removesuid.sh | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 OutBack Dingo
					OutBack Dingo