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

Timothee Ravier iz Red Hat-a, održavatelj projekata Fedora Silverblue i Fedora Kinoite, predložio je način da se izbjegne korištenje sudo uslužnog programa, koji koristi suid bit za eskalaciju privilegija. Umjesto sudo, za normalnog korisnika za izvršavanje komandi s root pravima, predlaže se korištenje ssh uslužnog programa sa lokalnom vezom na isti sistem preko UNIX utičnice i provjerom dozvola na osnovu SSH ključeva.

Korištenje ssh umjesto sudo omogućava vam da se riješite suid programa na sistemu i omogućite izvršavanje privilegovanih komandi u okruženju domaćina distribucija koje koriste komponente za izolaciju kontejnera, kao što su Fedora Silverblue, Fedora Kinoite, Fedora Sericea i Fedora Onyx. Za ograničavanje pristupa može se dodatno koristiti potvrda ovlaštenja pomoću USB tokena (na primjer, Yubikey).

Primjer konfiguriranja komponenti OpenSSH servera za pristup preko lokalne Unix utičnice (posebna sshd instanca će biti pokrenuta s vlastitom konfiguracijskom datotekom):

/etc/systemd/system/sshd-unix.socket: [Jedinica] Opis=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 /[email zaštićen]: [Jedinica] Opis=OpenSSH po-vezni server daemon (Unix socket) 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=utičnica

/etc/ssh/sshd_config_unix: # Ostavlja samo autentifikaciju ključa PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # ograničava pristup odabranim korisnicima AllowUsers root adminusername # Ostavlja samo upotrebu .shoruthyshorized/authorized. izedKeysFile .ssh /authorized_ keys # omogući sftp podsistem sftp /usr/libexec/openssh/sftp-server

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

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

Postavljanje SSH klijenta.

Instalirajte uslužni program socat: sudo dnf install socat

Dopunjavamo /.ssh/config tako što navedemo socat kao proxy za pristup preko UNIX utičnice: Host host.local User root # Koristite /run/host/run umjesto /run za rad iz kontejnera 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 nepotreban izlaz LogLevel QUIET

U svom trenutnom obliku, korisnik adminusername će sada moći da izvršava komande kao root bez unošenja lozinke. Provjera operacije: $ ssh host.local [root ~]#

Mi kreiramo sudohost alias u bash-u da pokrenemo “ssh host.local”, slično kao 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)

Dodamo vjerodajnice i omogućavamo dvofaktornu autentifikaciju, dozvoljavajuć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 veći, koristite ed25519-sk kada generirate ključeve, u suprotnom koristite ecdsa-sk: ssh-keygen -t ed25519-sk ili ssh-keygen -t ecdsa-sk

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

Dodajte vezu tipa ključa u sshd konfiguraciju: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [email zaštićen],[email zaštićen]

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