SSH erabiltzea UNIX socket baten gainean sudoren ordez suid fitxategiak kentzeko

Red Hat-eko Timothee Ravier-ek, Fedora Silverblue eta Fedora Kinoite proiektuen mantentzaileak, sudo utilitatea ez erabiltzeko modu bat proposatu zuen, pribilegioak areagotzeko suid bit erabiltzen duena. Sudo-ren ordez, erabiltzaile arrunt batek root-eskubideekin komandoak exekutatzeko, ssh utilitatea erabiltzea proposatzen da sistema berera konexio lokalarekin UNIX socket baten bidez eta SSH gakoetan oinarritutako baimenak egiaztatzea.

Sudo-ren ordez ssh erabiltzeak sistemako suid programak kentzeko aukera ematen du eta edukiontzien isolamendu osagaiak erabiltzen dituzten banaketa-ingurunean pribilegiozko komandoak exekutatzeko aukera ematen du, hala nola Fedora Silverblue, Fedora Kinoite, Fedora Sericea eta Fedora Onyx. Sarbidea murrizteko, USB token (adibidez, Yubikey) erabiliz baimenaren berrespena ere erabil daiteke.

OpenSSH zerbitzariaren osagaiak Unix socket lokal baten bidez sartzeko konfiguratzeko adibide bat (sshd instantzia bereizi bat abiaraziko da bere konfigurazio fitxategiarekin):

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

/ Etc / systemd / system /[posta elektroniko bidez babestua]: [Unitatea] Description=OpenSSH konexio bakoitzeko zerbitzariaren daemon (Unix socket) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Zerbitzua] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Gakoen autentifikazioa bakarrik uzten du PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # aukeratutako erabiltzaileei sarbidea mugatzen du AllowUsers root adminusername # .ssh/authorized_keyss/authorized_keys. ssh /authorized_ keys # gaitu sftp Azpisistema sftp /usr/libexec/openssh/sftp-server

Aktibatu eta abiarazi systemd unitatea: sudo systemctl daemon-reload sudo systemctl enable β€”orain sshd-unix.socket

Gehitu SSH gakoa /root/.ssh/authorized_keys-en

SSH bezeroa konfiguratzea.

Instalatu socat utilitatea: sudo dnf install socat

/.ssh/config gehitzen dugu socat UNIX socket bidez sartzeko proxy gisa zehaztuz: Host host.local Erabiltzailearen root # Erabili /run/host/run ordez /run edukiontzietatik lan egiteko ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # SSH gakoaren bidea IdentityFile ~/.ssh/keys/localroot # Gaitu TTY laguntza shell interaktiborako RequestTTY yes # Kendu beharrezkoa ez den irteera LogLevel QUIET

Oraingo moduan, erabiltzaile-administratzaile izenak komandoak root gisa exekutatu ahal izango ditu pasahitzik sartu gabe. Eragiketa egiaztatzen: $ ssh host.local [root ~]#

Sudohost alias bat sortzen dugu bash-en β€œssh host.local” exekutatzeko, sudoren antzera: sudohost() { if [[ ${#} -eq 0 ]]; gero ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \Β»${@}\»» fi }

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

Kredentzialak gehitzen ditugu eta bi faktoreko autentifikazioa gaitzen dugu, root sarbidea ahalbidetuz Yubikey USB token bat sartzen denean soilik.

Lehendik dagoen Yubikey-k zein algoritmo onartzen dituen egiaztatzen dugu: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{inprimatu $2}'

Irteera 5.2.3 edo handiagoa bada, erabili ed25519-sk gakoak sortzerakoan, bestela erabili ecdsa-sk: ssh-keygen -t ed25519-sk edo ssh-keygen -t ecdsa-sk

Gako publikoa gehitzen du /root/.ssh/authorized_keys

Gehitu gako-mota lotura sshd konfigurazioan: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [posta elektroniko bidez babestua],[posta elektroniko bidez babestua]

Pribilegioak goratuak izan ditzakeen erabiltzaileari soilik mugatzen diogu Unix socketerako sarbidea (gure adibidean, administratzaile izena). /etc/systemd/system/sshd-unix.socket-en gehitu: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Iturria: opennet.ru

Gehitu iruzkin berria