SSH izmantošana UNIX ligzdā, nevis sudo, lai atbrīvotos no suid failiem

Timotijs Raviers no Red Hat, Fedora Silverblue un Fedora Kinoite projektu uzturētājs, ierosināja veidu, kā izvairīties no sudo utilīta izmantošanas, kas izmanto suid bitu, lai palielinātu privilēģijas. Sudo vietā parastam lietotājam, lai izpildītu komandas ar root tiesībām, tiek piedāvāts izmantot ssh utilītu ar lokālu savienojumu ar to pašu sistēmu, izmantojot UNIX ligzdu un atļauju pārbaudi, pamatojoties uz SSH atslēgām.

Izmantojot ssh, nevis sudo, varat atbrīvoties no suid programmām sistēmā un iespējot priviliģēto komandu izpildi tādu izplatījumu saimniekdatora vidē, kuros tiek izmantoti konteineru izolācijas komponenti, piemēram, Fedora Silverblue, Fedora Kinoite, Fedora Sericea un Fedora Onyx. Lai ierobežotu piekļuvi, var papildus izmantot pilnvaru apstiprināšanu, izmantojot USB marķieri (piemēram, Yubikey).

Piemērs OpenSSH servera komponentu konfigurēšanai piekļuvei, izmantojot vietējo Unix ligzdu (tiks palaista atsevišķa sshd instance ar savu konfigurācijas 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 [Instalēt] WantedBy=sockets.target

/ etc / systemd / system /[e-pasts aizsargāts]: [Unit] Description=OpenSSH katra savienojuma servera dēmons (Unix ligzda) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Pakalpojums] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Atstāj tikai atslēgas autentifikāciju PermitRootLogin Aizliegts-paroles Paroles autentifikācija nav PermitEmptyPasswords nav GSSAPIAutentifikācijas nav # ierobežo piekļuvi atlasītajiem lietotājiem AllowUsers root adminusername # Atstāj tikai .sauts le .ssh /authorized_ keys # enable sftp apakšsistēma sftp /usr/libexec/openssh/sftp-server

Aktivizējiet un palaidiet sistēmas vienību: sudo systemctl daemon-reload sudo systemctl enable — tagad sshd-unix.socket

Pievienojiet savu SSH atslēgu mapē /root/.ssh/authorized_keys

SSH klienta iestatīšana.

Instalējiet socat utilītu: sudo dnf instalējiet socat

Mēs papildinām /.ssh/config, norādot socat kā starpniekserveri piekļuvei, izmantojot UNIX ligzdu: Host host.local Lietotāja sakne # Izmantojiet /run/host/run, nevis /run, lai strādātu no konteineriem ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Ceļš uz SSH atslēgu IdentityFile ~/.ssh/keys/localroot # Iespējot TTY atbalstu interaktīvajam apvalkam RequestTTY jā # Noņemt nevajadzīgo izvadi LogLevel QUIET

Pašreizējā formā lietotāja adminusername tagad varēs izpildīt komandas kā root, neievadot paroli. Pārbauda darbību: $ ssh host.local [root ~]#

Mēs izveidojam sudohost aizstājvārdu programmā bash, lai palaistu “ssh host.local”, līdzīgi kā sudo: sudohost() { if [[ ${#} -eq 0 ]]; tad ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; izpildīt \»${@}\»» fi }

Pārbaudiet: $ sudohost id uid=0(sakne) gid=0(saknes) grupas=0(sakne)

Mēs pievienojam akreditācijas datus un iespējojam divu faktoru autentifikāciju, ļaujot root piekļuvi tikai tad, kad ir ievietots Yubikey USB marķieris.

Mēs pārbaudām, kurus algoritmus atbalsta esošais Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Ja izvade ir 5.2.3 vai jaunāka, ģenerējot atslēgas, izmantojiet ed25519-sk, pretējā gadījumā izmantojiet ecdsa-sk: ssh-keygen -t ed25519-sk vai ssh-keygen -t ecdsa-sk

Pievieno publisko atslēgu /root/.ssh/authorized_keys

Pievienojiet atslēgas veida saistīšanu sshd konfigurācijai: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [e-pasts aizsargāts],[e-pasts aizsargāts]

Mēs ierobežojam piekļuvi Unix ligzdai tikai tiem lietotājiem, kuriem var būt paaugstinātas privilēģijas (mūsu piemērā adminusername). Mapē /etc/systemd/system/sshd-unix.socket pievienojiet: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Avots: opennet.ru

Pievieno komentāru