Uporaba SSH prek vtičnice UNIX namesto sudo, da se znebite datotek suid

Timothee Ravier iz Red Hat, vzdrževalec projektov Fedora Silverblue in Fedora Kinoite, je predlagal način, kako se izogniti uporabi pripomočka sudo, ki uporablja bit suid za stopnjevanje privilegijev. Namesto sudo je za običajnega uporabnika za izvajanje ukazov s korenskimi pravicami predlagana uporaba pripomočka ssh z lokalno povezavo z istim sistemom prek vtičnice UNIX in preverjanjem dovoljenj na podlagi ključev SSH.

Uporaba ssh namesto sudo vam omogoča, da se znebite programov suid v sistemu in omogočite izvajanje privilegiranih ukazov v gostiteljskem okolju distribucij, ki uporabljajo komponente za izolacijo vsebnika, kot so Fedora Silverblue, Fedora Kinoite, Fedora Sericea in Fedora Onyx. Za omejitev dostopa se lahko dodatno uporabi potrditev pooblastila z žetonom USB (na primer Yubikey).

Primer konfiguriranja komponent strežnika OpenSSH za dostop prek lokalne vtičnice Unix (zagnan bo ločen primerek sshd z lastno konfiguracijsko datoteko):

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

/ itd / systemd / sistem /[e-pošta zaščitena]: [Enota] Opis=Demon strežnika OpenSSH na povezavo (vtičnica Unix) Dokumentacija=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: # Pusti samo preverjanje pristnosti ključa PermitRootLogin prohibit-password PasswordAuthentication ne PermitEmptyPasswords ne GSSAPIAuthentication ne # omejuje dostop izbranim uporabnikom AllowUsers root adminusername # Pusti samo uporabo .ssh/authorized_keys (brez .ssh/authorized_keys2 Avtor izedKeysFile .ssh /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktivirajte in zaženite enoto systemd: sudo systemctl daemon-reload sudo systemctl enable —now sshd-unix.socket

Dodajte svoj ključ SSH v /root/.ssh/authorized_keys

Nastavitev odjemalca SSH.

Namestite pripomoček socat: sudo dnf install socat

/.ssh/config dopolnimo tako, da določimo socat kot proxy za dostop prek vtičnice UNIX: Host host.local User root # Uporabite /run/host/run namesto /run za delo iz vsebnikov ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Pot do ključa SSH IdentityFile ~/.ssh/keys/localroot # Omogoči podporo TTY za interaktivno lupino RequestTTY da # Odstrani nepotreben izhod LogLevel QUIET

V trenutni obliki bo uporabnik adminusername zdaj lahko izvajal ukaze kot root brez vnosa gesla. Preverjanje delovanja: $ ssh host.local [root ~]#

Ustvarimo vzdevek sudohost v bash za zagon »ssh host.local«, podobno kot sudo: sudohost() { if [[ ${#} -eq 0 ]]; nato ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

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

Dodamo poverilnice in omogočimo dvostopenjsko avtentikacijo, ki omogoča korenski dostop le, ko je vstavljen žeton Yubikey USB.

Preverimo, katere algoritme podpira obstoječi Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Če je izhod 5.2.3 ali novejši, pri generiranju ključev uporabite ed25519-sk, sicer uporabite ecdsa-sk: ssh-keygen -t ed25519-sk ali ssh-keygen -t ecdsa-sk

Doda javni ključ v /root/.ssh/authorized_keys

Dodajte vezavo tipa ključa v konfiguracijo sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [e-pošta zaščitena],[e-pošta zaščitena]

Dostop do vtičnice Unix omejimo samo na uporabnika, ki ima lahko povišane privilegije (v našem primeru adminusername). V /etc/systemd/system/sshd-unix.socket dodajte: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Vir: opennet.ru

Dodaj komentar