Använder SSH över en UNIX-socket istället för sudo för att bli av med suid-filer

Timothee Ravier från Red Hat, en underhållare av Fedora Silverblue- och Fedora Kinoite-projekten, föreslog ett sätt att undvika att använda sudo-verktyget, som använder suid-biten för att eskalera privilegier. Istället för sudo, för en normal användare att utföra kommandon med root-rättigheter, föreslås det att använda ssh-verktyget med en lokal anslutning till samma system via en UNIX-socket och verifiering av behörigheter baserade på SSH-nycklar.

Genom att använda ssh istället för sudo kan du bli av med suid-program på systemet och möjliggöra exekvering av privilegierade kommandon i värdmiljön för distributioner som använder behållarisoleringskomponenter, såsom Fedora Silverblue, Fedora Kinoite, Fedora Sericea och Fedora Onyx. För att begränsa åtkomsten kan bekräftelse av auktoritet med en USB-token (till exempel Yubikey) användas.

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

/etc/systemd/system/sshd-unix.socket: [Enhet] Beskrivning=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Acceptera=ja [Installera] WantedBy=sockets.target

/ Etc / SYSTEMD / system /[e-postskyddad]: [Enhet] Beskrivning=OpenSSH per-anslutning serverdemon (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: # Lämnar endast nyckelautentisering PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # begränsar åtkomsten till valda användare TillåtAnvändare root adminusername # Lämnar endast användningen av .skeysauthorized/Fiskeysauthorized_ .ssh /authorized_ keys # aktivera sftp Subsystem sftp /usr/libexec/openssh/sftp-server

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

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

Konfigurera SSH-klienten.

Installera socat-verktyget: sudo dnf installera socat

Vi kompletterar /.ssh/config genom att ange socat som proxy för åtkomst via en UNIX-socket: Host host.local Användarrot # Använd /run/host/run istället för /run för att arbeta från behållare 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 det interaktiva skalet RequestTTY ja # Ta bort onödig utdata LogLevel QUIET

I sin nuvarande form kommer användarens adminusername nu att kunna utföra kommandon som root utan att ange ett lösenord. Kontrollerar operationen: $ ssh host.local [root ~]#

Vi skapar ett sudohost-alias i bash för att köra "ssh host.local", liknande sudo: sudohost() { if [[ ${#} -eq 0 ]]; sedan ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" annars ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

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

Vi lägger till autentiseringsuppgifter och aktiverar tvåfaktorsautentisering, vilket tillåter root-åtkomst endast när en Yubikey USB-token är insatt.

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

Om utdata är 5.2.3 eller högre, använd ed25519-sk när du genererar nycklar, annars använd ecdsa-sk: ssh-keygen -t ed25519-sk eller ssh-keygen -t ecdsa-sk

Lägger till den publika nyckeln till /root/.ssh/authorized_keys

Lägg till en nyckeltypsbindning till sshd-konfigurationen: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [e-postskyddad],[e-postskyddad]

Vi begränsar åtkomsten till Unix-socket till endast den användare som kan ha förhöjda privilegier (i vårt exempel, adminusername). I /etc/systemd/system/sshd-unix.socket lägg till: [Socket] ... SocketUser=adminanvändarnamn SocketGroup=adminanvändarnamn SocketMode=0660

Källa: opennet.ru

Lägg en kommentar