Përdorimi i SSH mbi një fole UNIX në vend të sudo për të hequr qafe skedarët suid

Timothee Ravier nga Red Hat, një mbajtës i projekteve Fedora Silverblue dhe Fedora Kinoite, propozoi një mënyrë për të shmangur përdorimin e mjetit sudo, i cili përdor bitin suid për të përshkallëzuar privilegjet. Në vend të sudo, që një përdorues normal të ekzekutojë komanda me të drejta rrënjësore, propozohet përdorimi i programit ssh me një lidhje lokale me të njëjtin sistem nëpërmjet një foleje UNIX dhe verifikimi i lejeve bazuar në çelësat SSH.

Përdorimi i ssh në vend të sudo ju lejon të hiqni qafe programet suid në sistem dhe të mundësoni ekzekutimin e komandave të privilegjuara në mjedisin pritës të shpërndarjeve që përdorin komponentë të izolimit të kontejnerëve, si Fedora Silverblue, Fedora Kinoite, Fedora Sericea dhe Fedora Onyx. Për të kufizuar aksesin, mund të përdoret gjithashtu konfirmimi i autoritetit duke përdorur një token USB (për shembull, Yubikey).

Një shembull i konfigurimit të komponentëve të serverit OpenSSH për qasje përmes një fole lokale Unix (një shembull i veçantë sshd do të nisë me skedarin e tij të konfigurimit):

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

/ etj / systemd / sistemi /[email mbrojtur]: [Njësia] Përshkrimi=OpenSSH demon serveri për lidhje (Hapja Unix) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Shërbimi] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Lë vetëm vërtetimin e çelësit. 2 AuthorizedKeysFile .ssh /authorized_ keys # aktivizo sftp Nënsistemi sftp /usr/libexec/openssh/sftp-server

Aktivizo dhe lësho njësinë systemd: sudo systemctl daemon-reload sudo systemctl aktivizo —tani sshd-unix.socket

Shtoni çelësin tuaj SSH në /root/.ssh/authorized_keys

Vendosja e klientit SSH.

Instaloni programin socat: sudo dnf install socat

Ne plotësojmë /.ssh/config duke specifikuar socat si një përfaqësues për akses nëpërmjet një foleje UNIX: Host host.local Rrënja e përdoruesit # Përdor /run/host/run në vend të /run për të punuar nga kontejnerët ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Shtegu te tasti SSH IdentityFile ~/.ssh/keys/localroot # Aktivizo mbështetjen TTY për guaskën interaktive KërkesëTTY po # Hiq daljen e panevojshme LogLevel QUIET

Në formën e tij aktuale, emri i administratorit të përdoruesit tani do të jetë në gjendje të ekzekutojë komanda si rrënjë pa futur një fjalëkalim. Kontrollimi i operacionit: $ ssh host.local [root ~]#

Ne krijojmë një pseudonim sudohost në bash për të ekzekutuar "ssh host.local", ngjashëm me sudo: sudohost() { if [[ ${#} -eq 0 ]]; pastaj ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

Kontrollo: $ sudohost id uid=0(rrënjë) gid=0(rrënjë) grupe=0(rrënjë)

Ne shtojmë kredencialet dhe aktivizojmë vërtetimin me dy faktorë, duke lejuar qasjen në rrënjë vetëm kur futet një kod Yubikey USB.

Ne kontrollojmë se cilët algoritme mbështeten nga Yubikey ekzistues: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk "{print $2}"

Nëse dalja është 5.2.3 ose më e madhe, përdorni ed25519-sk kur gjeneroni çelësa, përndryshe përdorni ecdsa-sk: ssh-keygen -t ed25519-sk ose ssh-keygen -t ecdsa-sk

Shton çelësin publik te /root/.ssh/authorized_keys

Shtoni një lidhje të llojit të çelësit në konfigurimin sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [email mbrojtur],[email mbrojtur]

Ne e kufizojmë aksesin në folenë Unix vetëm për përdoruesin që mund të ketë privilegje të ngritura (në shembullin tonë, emri i administratorit). Në /etc/systemd/system/sshd-unix.socket shtoni: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Burimi: opennet.ru

Shto një koment