SSH brûke oer in UNIX-socket ynstee fan sudo om suid-bestannen kwyt te reitsjen

Timothee Ravier fan Red Hat, in ûnderhâlder fan de Fedora Silverblue en Fedora Kinoite-projekten, stelde in manier foar om it sudo-hulpprogramma te foarkommen, dat it suid-bit brûkt om privileezjes te eskalearjen. Ynstee fan sudo, foar in normale brûker om kommando's út te fieren mei rootrjochten, wurdt it foarsteld om it ssh-hulpprogramma te brûken mei in lokale ferbining mei itselde systeem fia in UNIX-socket en ferifikaasje fan tagongsrjochten basearre op SSH-kaaien.

Mei ssh ynstee fan sudo kinne jo suid-programma's op it systeem kwytreitsje en de útfiering fan befoarrjochte kommando's ynskeakelje yn 'e hostomjouwing fan distribúsjes dy't kontenerisolaasjekomponinten brûke, lykas Fedora Silverblue, Fedora Kinoite, Fedora Sericea en Fedora Onyx. Om tagong te beheinen, kin befêstiging fan autoriteit mei in USB-token (Bygelyks Yubikey) ek brûkt wurde.

In foarbyld fan it konfigurearjen fan OpenSSH-tsjinnerkomponinten foar tagong fia in lokale Unix-socket (in aparte sshd-eksimplaar sil wurde lansearre mei in eigen konfiguraasjetriem):

/etc/systemd/system/sshd-unix.socket: [Unit] Beskriuwing=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Akseptearje=ja [Ynstallearje] WantedBy=sockets.target

/ etc / systemd / system /[e-post beskerme]: [Ienheid] Beskriuwing=OpenSSH per-ferbining tsjinner 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: # Lit allinnich kaai autentikaasje PermitRootLogin ferbean-wachtwurd PasswordAuthentication gjin PermitEmptyPasswords gjin GSSAPIAuthentication no # beheint tagong ta selektearre brûkers AllowUsers root adminusername # Lit allinich it gebrûk fan .ssheysauthorized/.Fishorized .ssh / autorisearre_ kaaien # ynskeakelje sftp Subsysteem sftp /usr/libexec/openssh/sftp-server

Aktivearje en starte de systemd-ienheid: sudo systemctl daemon-reload sudo systemctl ynskeakelje - no sshd-unix.socket

Foegje jo SSH-kaai ta oan /root/.ssh/authorized_keys

It ynstellen fan de SSH-kliïnt.

Ynstallearje it socat-hulpprogramma: sudo dnf ynstallearje socat

Wy oanfolje /.ssh/config troch socat op te jaan as in proxy foar tagong fia in UNIX-socket: Host host.local Brûkersroot # Brûk /run/host/run ynstee fan /run om te wurkjen fan konteners ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Paad nei de SSH-kaai IdentityFile ~/.ssh/keys/localroot # TTY-stipe ynskeakelje foar de ynteraktive shell RequestTTY yes # Fuortsmite ûnnedige útfier LogLevel QUIET

Yn syn hjoeddeistige foarm sil de brûker adminusername no kommando's as root kinne útfiere sûnder in wachtwurd yn te fieren. Kontrolearje de operaasje: $ ssh host.local [root ~]#

Wy meitsje in sudohost-alias yn bash om "ssh host.local" út te fieren, fergelykber mei sudo: sudohost() {if [[ ${#} -eq 0]]; then ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" oars ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

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

Wy foegje bewiisbrieven en aktivearje twa-faktor autentikaasje, wêrtroch root tagong allinnich as in Yubikey USB token wurdt ynfoege.

Wy kontrolearje hokker algoritmen wurde stipe troch de besteande Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

As de útfier 5.2.3 of heger is, brûk dan ed25519-sk by it generearjen fan kaaien, oars brûke ecdsa-sk: ssh-keygen -t ed25519-sk of ssh-keygen -t ecdsa-sk

Foeget de iepenbiere kaai ta oan /root/.ssh/authorized_keys

Foegje in kaaitype-ferbining ta oan de sshd-konfiguraasje: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [e-post beskerme],[e-post beskerme]

Wy beheine tagong ta de Unix-socket allinich foar de brûker dy't privileezjes ferhege kin hawwe (yn ús foarbyld, adminusername). Yn /etc/systemd/system/sshd-unix.socket tafoegje: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Boarne: opennet.ru

Add a comment