Utilitzant SSH sobre un sòcol UNIX en lloc de sudo per desfer-se dels fitxers suid

Timothee Ravier de Red Hat, un responsable dels projectes Fedora Silverblue i Fedora Kinoite, va proposar una manera d'evitar l'ús de la utilitat sudo, que utilitza el bit suid per augmentar els privilegis. En lloc de sudo, perquè un usuari normal executi ordres amb drets root, es proposa utilitzar la utilitat ssh amb una connexió local al mateix sistema mitjançant un sòcol UNIX i la verificació dels permisos basats en claus SSH.

L'ús de ssh en lloc de sudo us permet desfer-vos dels programes suid del sistema i habilitar l'execució d'ordres privilegiades a l'entorn amfitrió de les distribucions que utilitzen components d'aïllament de contenidors, com ara Fedora Silverblue, Fedora Kinoite, Fedora Sericea i Fedora Onyx. Per restringir l'accés, també es pot utilitzar la confirmació de l'autoritat mitjançant un testimoni USB (per exemple, Yubikey).

Un exemple de configuració de components del servidor OpenSSH per accedir a través d'un sòcol Unix local (s'iniciarà una instància sshd independent amb el seu propi fitxer de configuració):

/etc/systemd/system/sshd-unix.socket: [Unitat] Descripció=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=sí [Instal·la] WantedBy=sockets.target

/ Etc / systemd / system /[protegit per correu electrònic]: [Unitat] Descripció=Dimoni del servidor OpenSSH per connexió (sòquet Unix) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Servei] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Només deixa l'autenticació de clau PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # restringeix l'accés als usuaris seleccionats AllowUsers root adminusername # Deixa només l'ús de .ssh/withoutthorized_keys/authorized_keys/authorized. ssh /authorized_keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Activeu i inicieu la unitat systemd: sudo systemctl daemon-reload sudo systemctl enable —ara sshd-unix.socket

Afegiu la vostra clau SSH a /root/.ssh/authorized_keys

Configuració del client SSH.

Instal·leu la utilitat socat: sudo dnf install socat

Complementem /.ssh/config especificant socat com a proxy per accedir a través d'un sòcol UNIX: Host host.local User root # Utilitzeu /run/host/run en lloc de /run per treballar des de contenidors ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Camí a la clau SSH IdentityFile ~/.ssh/keys/localroot # Habilita el suport TTY per a l'intèrpret d'ordres interactiu RequestTTY yes # Elimina la sortida innecessària LogLevel QUIET

En la seva forma actual, l'usuari adminusername ara podrà executar ordres com a root sense introduir una contrasenya. Comprovació de l'operació: $ ssh host.local [arrel ~]#

Creem un àlies sudohost a bash per executar “ssh host.local”, semblant a sudo: sudohost() { if [[ ${#} -eq 0 ]]; llavors ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

Comproveu: $ sudohost id uid=0(arrel) gid=0(arrel) grups=0(arrel)

Afegim credencials i activem l'autenticació de dos factors, permetent l'accés root només quan s'insereix un testimoni USB Yubikey.

Comprovem quins algorismes són compatibles amb la Yubikey existent: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Si la sortida és 5.2.3 o superior, utilitzeu ed25519-sk quan genereu claus, en cas contrari, utilitzeu ecdsa-sk: ssh-keygen -t ed25519-sk o ssh-keygen -t ecdsa-sk

Afegeix la clau pública a /root/.ssh/authorized_keys

Afegiu un enllaç de tipus de clau a la configuració sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [protegit per correu electrònic],[protegit per correu electrònic]

Restringim l'accés al sòcol Unix només a l'usuari que pot tenir privilegis elevats (en el nostre exemple, nom d'usuari). A /etc/systemd/system/sshd-unix.socket afegiu: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Font: opennet.ru

Afegeix comentari