Použitie SSH cez soket UNIX namiesto sudo na odstránenie súborov suid

Timothee Ravier z Red Hat, správca projektov Fedora Silverblue a Fedora Kinoite, navrhol spôsob, ako sa vyhnúť používaniu nástroja sudo, ktorý používa bit suid na eskaláciu privilégií. Namiesto sudo sa pre bežného užívateľa na vykonávanie príkazov s právami root navrhuje použiť utilitu ssh s lokálnym pripojením k rovnakému systému cez UNIX socket a overením oprávnení na základe SSH kľúčov.

Použitie ssh namiesto sudo vám umožňuje zbaviť sa suid programov v systéme a povoliť vykonávanie privilegovaných príkazov v hostiteľskom prostredí distribúcií, ktoré používajú komponenty na izoláciu kontajnerov, ako sú Fedora Silverblue, Fedora Kinoite, Fedora Sericea a Fedora Onyx. Na obmedzenie prístupu možno dodatočne použiť potvrdenie oprávnenia pomocou tokenu USB (napríklad Yubikey).

Príklad konfigurácie komponentov servera OpenSSH pre prístup cez lokálny soket Unix (spustí sa samostatná inštancia sshd s vlastným konfiguračným súborom):

/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 [Inštalovať] WantedBy=sockets.target

/ Etc / systemd / system /[chránené e-mailom]: [Jednotka] Popis=Démon servera OpenSSH na pripojenie (zásuvka Unix) Dokumentácia=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Služba] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Ponecháva iba autentifikáciu kľúčom PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # obmedzuje prístup vybraným používateľom AllowUsers root adminusername # Ponecháva iba použitie .skeyssh/authorized.authorized. ssh /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktivujte a spustite jednotku systemd: sudo systemctl daemon-reload sudo systemctl enable —teraz sshd-unix.socket

Pridajte svoj kľúč SSH do /root/.ssh/authorized_keys

Nastavenie klienta SSH.

Nainštalujte nástroj socat: sudo dnf nainštalujte socat

Dopĺňame /.ssh/config špecifikovaním socat ako proxy pre prístup cez soket UNIX: Host host.local Užívateľský root # Na prácu z kontajnerov použite /run/host/run namiesto /run ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Cesta ku kľúču SSH IdentityFile ~/.ssh/keys/localroot # Povoliť podporu TTY pre interaktívny shell RequestTTY yes # Odstrániť nepotrebný výstup LogLevel QUIET

Vo svojej aktuálnej podobe bude teraz používateľ adminusername môcť vykonávať príkazy ako root bez zadávania hesla. Kontrola operácie: $ ssh host.local [root ~]#

V bash vytvoríme alias sudohost na spustenie „ssh host.local“, podobne ako sudo: sudohost() { if [[ ${#} -eq 0 ]]; potom ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

Skontrolujte: $ sudohost id uid=0(koreň) gid=0(koreň) skupiny=0(koreň)

Pridávame prihlasovacie údaje a umožňujeme dvojfaktorovú autentifikáciu, ktorá umožňuje prístup root iba vtedy, keď je vložený token Yubikey USB.

Skontrolujeme, ktoré algoritmy sú podporované existujúcim Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Ak je výstup 5.2.3 alebo vyšší, pri generovaní kľúčov použite ed25519-sk, inak použite ecdsa-sk: ssh-keygen -t ed25519-sk alebo ssh-keygen -t ecdsa-sk

Pridá verejný kľúč do /root/.ssh/authorized_keys

Pridajte väzbu typu kľúča do konfigurácie sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [chránené e-mailom],[chránené e-mailom]

Prístup k Unixovému socketu obmedzujeme iba na používateľa, ktorý môže mať zvýšené privilégiá (v našom príklade adminusername). V /etc/systemd/system/sshd-unix.socket pridajte: [Socket] ... SocketUser=meno správcu SocketGroup=meno správcu SocketMode=0660

Zdroj: opennet.ru

Pridať komentár