Použití SSH přes soket UNIX místo sudo k odstranění souborů suid

Timothee Ravier z Red Hatu, správce projektů Fedora Silverblue a Fedora Kinoite, navrhl způsob, jak se vyhnout použití nástroje sudo, který používá bit suid k eskalaci oprávnění. Místo sudo se pro běžného uživatele pro spouštění příkazů s právy root navrhuje použít utilitu ssh s lokálním připojením ke stejnému systému přes UNIX socket a ověřením oprávnění na základě SSH klíčů.

Použití ssh místo sudo vám umožní zbavit se suid programů v systému a umožnit provádění privilegovaných příkazů v hostitelském prostředí distribucí, které používají komponenty pro izolaci kontejnerů, jako jsou Fedora Silverblue, Fedora Kinoite, Fedora Sericea a Fedora Onyx. Pro omezení přístupu lze dodatečně použít potvrzení autority pomocí USB tokenu (například Yubikey).

Příklad konfigurace komponent serveru OpenSSH pro přístup přes místní soket Unix (spustí se samostatná instance sshd s vlastním konfiguračním souborem):

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

/ etc / systemd / system /[chráněno e-mailem]: [Jednotka] Description=OpenSSH per-connection server daemon (Unix socket) Documentation=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ává pouze ověřování pomocí klíče PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # omezuje přístup vybraným uživatelům AllowUsers root adminusername # Ponechává pouze použití .skeyssh/authorized.authorized. ssh /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktivujte a spusťte jednotku systemd: sudo systemctl daemon-reload sudo systemctl enable —nyní sshd-unix.socket

Přidejte svůj klíč SSH do /root/.ssh/authorized_keys

Nastavení klienta SSH.

Nainstalujte nástroj socat: sudo dnf install socat

Doplňujeme /.ssh/config zadáním socat jako proxy pro přístup přes UNIXový soket: Host host.local Uživatelský root # Pro práci z kontejnerů použijte /run/host/run místo /run ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Cesta ke klíči SSH IdentityFile ~/.ssh/keys/localroot # Povolit podporu TTY pro interaktivní shell RequestTTY ano # Odebrat nepotřebný výstup LogLevel QUIET

Ve své aktuální podobě bude nyní uživatel adminusername moci spouštět příkazy jako root bez zadávání hesla. Kontrola operace: $ ssh host.local [root ~]#

V bash vytvoříme alias sudohost pro spuštění „ssh host.local“, podobně jako sudo: sudohost() { if [[ ${#} -eq 0 ]]; potom ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

Zkontrolujte: $ sudohost id uid=0(kořen) gid=0(kořen) skupiny=0(kořen)

Přidáváme přihlašovací údaje a povolujeme dvoufaktorovou autentizaci, která umožňuje přístup root pouze po vložení tokenu Yubikey USB.

Zkontrolujeme, které algoritmy podporuje stávající Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Pokud je výstup 5.2.3 nebo vyšší, použijte při generování klíčů ed25519-sk, jinak použijte ecdsa-sk: ssh-keygen -t ed25519-sk nebo ssh-keygen -t ecdsa-sk

Přidá veřejný klíč do /root/.ssh/authorized_keys

Přidejte vazbu typu klíče do konfigurace sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [chráněno e-mailem],[chráněno e-mailem]

Omezujeme přístup k Unixovému socketu pouze na uživatele, který může mít zvýšená oprávnění (v našem příkladu adminusername). V /etc/systemd/system/sshd-unix.socket přidejte: [Socket] ... SocketUser=jméno správce SocketGroup=jméno správce SocketMode=0660

Zdroj: opennet.ru

Přidat komentář