Använda SSH över UNIX-socket istället för sudo för att undvika suid-filer

Timothee Ravier från Red Hat, underhållare av Fedora Silverblue och Fedora Kinoite-projekten, föreslog ett sätt att undvika användningen av sudo, som använder suid-bit för att öka privilegier. Istället för sudo föreslås det att använda ssh för att låta en vanlig användare köra kommandon med root-rättigheter genom en lokal anslutning till samma system via en UNIX-socket och autentisering baserad på SSH-nycklar.

Användningen av ssh istället för sudo möjliggör att bli av med suid-program i systemet och organisera exekvering av privilegierade kommandon i värdmiljöer av distributioner som använder komponentisolering via containrar, såsom Fedora Silverblue, Fedora Kinoite, Fedora Sericea och Fedora Onyx. För att begränsa åtkomst kan ytterligare autentisering genom en USB-token (till exempel Yubikey) användas.

Ett exempel på konfiguration av OpenSSH-serverkomponenter för åtkomst via lokal Unix-socket (en separat instans av sshd kommer att startas med sin konfigurationsfil):

/etc/systemd/system/sshd-unix.socket: [Unit] Description=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=yes [Install] WantedBy=sockets.target

/etc/systemd/system/sshd-unix@.service: [Unit] Description=OpenSSH per-connection server daemon (Unix socket) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Service] ExecStart=-/usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Оставляет только аутентификацию по ключам PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # ограничиваем доступ выбранным пользователям AllowUsers root adminusername # Оставляем только использование .ssh/authorized_keys (без .ssh/authorized_keys2 AuthorizedKeysFile .ssh/authorized_keys # включаем sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktivera och starta systemd-enheten: sudo systemctl daemon-reload sudo systemctl enable —now sshd-unix.socket

Lägg till din SSH-nyckel i /root/.ssh/authorized_keys

Konfigurera SSH-klientens inställningar.

Installera programmet socat: sudo dnf install socat

Komplettera /.ssh/config genom att ange socat som proxy för åtkomst via UNIX-socket: Host host.local User root # Använd /run/host/run istället för /run för att fungera från containrar ProxyCommand socat — UNIX-CLIENT:/run/host/run/sshd.sock # Sökväg till SSH-nyckeln IdentityFile ~/.ssh/keys/localroot # Aktivera TTY-stöd för interaktivt skal RequestTTY yes # Ta bort onödig utdata LogLevel QUIET

I sin nuvarande form kan användaren adminusername nu köra kommandon med root-rättigheter utan att ange ett lösenord. Kontrollera att det fungerar: $ ssh host.local [root ~]#

Skapa en alias i bash för att köra "ssh host.local" som sudo: sudohost() { if [[ ${#} -eq 0 ]]; then ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" —login" else ssh host.local "cd \"${PWD}\"; exec \"${@}\"" fi }

Kontrollera: $ sudohost id uid=0(root) gid=0(root) groups=0(root)

Lägg till en autentiseringskontroll och aktivera tvåfaktorsautentisering, vilket tillåter root-åtkomst endast vid insättning av en USB-token Yubikey.

Kontrollera vilka algoritmer den befintliga Yubikey stöder: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Om värdet 5.2.3 eller högre visas, använder vi ed25519-sk vid nyckelgenerering, annars — ecdsa-sk: ssh-keygen -t ed25519-sk eller ssh-keygen -t ecdsa-sk

Lägg till den offentliga nyckeln i /root/.ssh/authorized_keys

Lägg till en bindning till nyckeltypen i sshd-konfigurationen: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes sk-ecdsa-sha2-nistp256@openssh.com,sk-ssh-ed25519@openssh.com

Begränsa tillgången till Unix-socketen endast till användaren som kan höja privilegier (i vårt exempel — adminusername). I /etc/systemd/system/sshd-unix.socket lägger vi till: [Socket] … SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Källa: opennet.ru

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster