Korištenje SSH preko UNIX utičnice umjesto sudo da biste se riješili suid datoteka

Timothee Ravier iz Red Hata, održavatelj projekata Fedora Silverblue i Fedora Kinoite, predložio je način izbjegavanja korištenja uslužnog programa sudo, koji koristi bit suid za povećanje privilegija. Umjesto sudoa, za normalnog korisnika za izvršavanje naredbi s root pravima, predlaže se korištenje uslužnog programa ssh s lokalnom vezom na isti sustav putem UNIX utičnice i provjerom dopuštenja na temelju SSH ključeva.

Korištenje ssh umjesto sudo omogućuje vam da se riješite suid programa na sustavu i omogućite izvršavanje privilegiranih naredbi u glavnom okruženju distribucija koje koriste komponente za izolaciju spremnika, kao što su Fedora Silverblue, Fedora Kinoite, Fedora Sericea i Fedora Onyx. Za ograničavanje pristupa dodatno se može koristiti potvrda ovlasti pomoću USB tokena (npr. Yubikey).

Primjer konfiguracije komponenti OpenSSH poslužitelja za pristup putem lokalne Unix utičnice (posebna sshd instanca bit će pokrenuta s vlastitom konfiguracijskom datotekom):

/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 [Instaliraj] WantedBy=sockets.target

/ etc / systemd / system /[e-pošta zaštićena]: [Jedinica] Opis=Demon poslužitelja OpenSSH po vezi (Unix utičnica) 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 Standardni ulaz=utičnica

/etc/ssh/sshd_config_unix: # Ostavlja samo provjeru autentičnosti ključa PermitRootLogin prohibit-password PasswordAuthentication ne PermitEmptyPasswords ne GSSAPIAuthentication ne # ograničava pristup odabranim korisnicima AllowUsers root adminusername # Ostavlja samo korištenje .ssh/authorized_keys (bez .ssh/authorized_keys2 Autor izedKeysFile .ssh /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktivirajte i pokrenite jedinicu systemd: sudo systemctl daemon-reload sudo systemctl enable —now sshd-unix.socket

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

Postavljanje SSH klijenta.

Instalirajte uslužni program socat: sudo dnf install socat

Dopunjujemo /.ssh/config navodeći socat kao proxy za pristup putem UNIX utičnice: Host host.local User root # Koristite /run/host/run umjesto /run za rad iz spremnika ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Put do SSH ključa IdentityFile ~/.ssh/keys/localroot # Omogući TTY podršku za interaktivnu ljusku RequestTTY da # Ukloni nepotrebni izlaz LogLevel QUIET

U svom trenutnom obliku, korisnik adminusername sada će moći izvršavati naredbe kao root bez unosa lozinke. Provjera operacije: $ ssh host.local [root ~]#

Stvaramo pseudonim sudohosta u bashu za pokretanje “ssh host.local”, slično sudo: sudohost() { if [[ ${#} -eq 0 ]]; zatim ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

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

Dodajemo vjerodajnice i omogućujemo dvofaktorsku autentifikaciju, dopuštajući root pristup samo kada je umetnut Yubikey USB token.

Provjeravamo koje algoritme podržava postojeći Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Ako je izlaz 5.2.3 ili noviji, koristite ed25519-sk pri generiranju ključeva, inače koristite ecdsa-sk: ssh-keygen -t ed25519-sk ili ssh-keygen -t ecdsa-sk

Dodaje javni ključ u /root/.ssh/authorized_keys

Dodajte vezanje tipa ključa u sshd konfiguraciju: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [e-pošta zaštićena],[e-pošta zaštićena]

Ograničavamo pristup Unix utičnici samo na korisnika koji može imati povišene privilegije (u našem primjeru, adminusername). U /etc/systemd/system/sshd-unix.socket dodajte: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Izvor: opennet.ru

Dodajte komentar