SSH naudojimas per UNIX lizdą, o ne sudo, norint atsikratyti suid failų

Timothee Ravier iš Red Hat, Fedora Silverblue ir Fedora Kinoite projektų prižiūrėtojas, pasiūlė būdą, kaip vengti naudoti sudo įrankį, kuris naudoja suid bitą privilegijoms padidinti. Vietoj sudo, kad įprastas vartotojas vykdytų komandas su root teisėmis, siūloma naudoti ssh įrankį su vietiniu prisijungimu prie tos pačios sistemos per UNIX lizdą ir leidimų patikrinimą pagal SSH raktus.

Naudojant ssh vietoj sudo, sistemoje galima atsikratyti suid programų ir įgalinti privilegijuotų komandų vykdymą paskirstymų, kuriuose naudojami konteinerio izoliavimo komponentai, pvz., Fedora Silverblue, Fedora Kinoite, Fedora Sericea ir Fedora Onyx, pagrindinėje aplinkoje. Norint apriboti prieigą, papildomai galima naudoti įgaliojimo patvirtinimą naudojant USB prieigos raktą (pavyzdžiui, Yubikey).

OpenSSH serverio komponentų konfigūravimo prieigai per vietinį Unix lizdą pavyzdys (bus paleistas atskiras sshd egzempliorius su savo konfigūracijos failu):

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

/ etc / systemd / system /[apsaugotas el. paštu]: [Unit] Description=OpenSSH serverio demonas vienam ryšiui (Unix lizdas) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Paslauga] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Palieka tik rakto autentifikavimą PermitRootLogin draudžiamas slaptažodis SlaptažodisAuthentication nėra PermitEmptyPasswords nėra GSSAPIAutentifikavimas Nr # apriboja prieigą prie pasirinktų vartotojų AllowUsers root adminusername # Palieka tik .ssh. le .ssh /authorized_ keys # įgalinti sftp posistemį sftp /usr/libexec/openssh/sftp-server

Suaktyvinkite ir paleiskite sistemos bloką: sudo systemctl daemon-reload sudo systemctl enable – dabar sshd-unix.socket

Pridėkite savo SSH raktą prie /root/.ssh/authorized_keys

SSH kliento nustatymas.

Įdiekite socat paslaugų programą: sudo dnf install socat

Mes papildome /.ssh/config nurodydami socat kaip tarpinį serverį prieigai per UNIX lizdą: Host host.local Vartotojo šaknis # Naudokite /run/host/run, o ne /run, kad dirbtumėte iš konteinerių ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # SSH rakto kelias IdentityFile ~/.ssh/keys/localroot # Įjungti TTY palaikymą interaktyviam apvalkalui RequestTTY taip # Pašalinti nereikalingą išvestį LogLevel QUIET

Dabartinėje formoje naudotojo administratoriaus vardas dabar galės vykdyti komandas kaip root neįvesdamas slaptažodžio. Tikrinama operacija: $ ssh host.local [root ~]#

Mes sukuriame sudohost slapyvardį bash, kad paleistume "ssh host.local", panašiai kaip sudo: sudohost() { if [[ ${#} -eq 0 ]]; tada ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; vykdyti \»${@}\»» fi }

Patikrinkite: $ sudohost id uid=0(šaknis) gid=0(root) group=0(root)

Pridedame kredencialus ir įjungiame dviejų veiksnių autentifikavimą, leidžiantį root prieigą tik tada, kai įdėtas Yubikey USB prieigos raktas.

Mes patikriname, kuriuos algoritmus palaiko esamas Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Jei išvestis yra 5.2.3 ar naujesnė, generuodami raktus naudokite ed25519-sk, kitu atveju naudokite ecdsa-sk: ssh-keygen -t ed25519-sk arba ssh-keygen -t ecdsa-sk

Prideda viešąjį raktą prie /root/.ssh/authorized_keys

Pridėkite rakto tipo susiejimą prie sshd konfigūracijos: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [apsaugotas el. paštu],[apsaugotas el. paštu]

Prieigą prie „Unix“ lizdo apribojame tik vartotojui, kurio privilegijos gali būti padidintos (mūsų pavyzdyje – administratoriaus vardas). Į /etc/systemd/system/sshd-unix.socket pridėkite: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Šaltinis: opennet.ru

Добавить комментарий