Përdorimi i SSH mbi një UNIX socket në vend të sudo për të eliminuar skedarët suid

Timothee Ravier nga kompania Red Hat, mjaftues i projekteve Fedora Silverblue dhe Fedora Kinoite, propozon një mënyrë për të shmangur përdorimin e utilitarit sudo, i cili përdor bitin suid për të rritur privilegjet. Në vend të sudo, për të ekzekutuar komanda me të drejta root nga një përdorues i zakonshëm, propozohet përdorimi i utilitarit ssh me një lidhje lokale në të njëjtin sistem përmes një Unix socket dhe verifikimit të autorizimeve bazuar në çelësat SSH.

Përdorimi i ssh në vend të sudo lejon shlyerjen e programeve suid nga sistemi dhe organizimin e ekzekutimit të komanda privilegjuara në ambientin host të shpërndarjeve që përdorin izolimin e komponentëve përmes kontejnerëve, siç janë Fedora Silverblue, Fedora Kinoite, Fedora Sericea dhe Fedora Onyx. Për të kufizuar aksesin, gjithashtu mund të përdoret konfirmimi i autorizimeve përmes një tokeni USB (për shembull, Yubikey).

Shembull i konfigurimit të komponentëve server OpenSSH për akses përmes një Unix socket lokal (do të startohet një instancë e veçantë sshd me skedarin e saj të konfigurimit):

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

/etc/systemd/system/sshd-unix@.service: [Unit] Description=OpenSSH per-connection server daemon (Unix socket) Documentation=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=socket

/etc/ssh/sshd_config_unix: # Оставляет только аутентификацию по ключам PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # ограничиваем доступ выбранным пользователям AllowUsers root adminusername # Оставляем только использование .ssh/authorized_keys (без .ssh/authorized_keys2 AuthorizedKeysFile .ssh/authorized_keys # включаем sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktivizoni dhe filloni njësinë systemd: sudo systemctl daemon-reload sudo systemctl enable —now sshd-unix.socket

Shtoni çelësin tuaj SSH në /root/.ssh/authorized_keys

Konfiguroni funksionimin e klientit SSH.

Instaloni utilitarin socat: sudo dnf install socat

Plotësoni .ssh/config, duke caktuar socat si proxy për aksesin përmes Unix socket: Host host.local User root # Përdorim /run/host/run në vend të /run për të punuar nga kontejnerët ProxyCommand socat — UNIX-CLIENT:/run/host/run/sshd.sock # Rruga për çelësin SSH IdentityFile ~/ .ssh/keys/localroot # Aktivizoni mbështetje për TTY për shell interaktiv RequestTTY yes # Hiqni daljet e tepërta LogLevel QUIET

Në formën aktuale, përdoruesi adminusername tani mund të ekzekutojë komanda me të drejta root pa futur fjalëkalimin. Kontrolloni funksionimin: $ ssh host.local [root ~]#

Krijoni një pseudonim në bash sudohost për të nisur "ssh host.local" në analogji me sudo: sudohost() { if [[ ${#} -eq 0 ]]; then ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" —login" else ssh host.local "cd \"${PWD}\"; exec \"${@}\"" fi }

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

Shtoni një kontroll të autorizimeve dhe aktivizoni dy faktorët e autentifikimit, duke lejuar aksesin në root vetëm me futjen e një tokeni USB Yubikey.

Kontrolloni se cilat algoritme mbështet Yubikey ekzistues: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Nëse keni dalë në 5.2.3 ose një vlerë më të madhe, përdorni ed25519-sk gjatë gjenerimit të çelësave, përndryshe — ecdsa-sk: ssh-keygen -t ed25519-sk ose ssh-keygen -t ecdsa-sk

Shton çelësin publik në \/root\/.ssh\/authorized_keys

Shtojmë lidhjen me llojin e çelësit në konfigurimin e sshd: \/etc\/ssh\/sshd_config_unix: PubkeyAcceptedKeyTypes sk-ecdsa-sha2-nistp256@openssh.com,sk-ssh-ed25519@openssh.com

Kufizojmë aksesin në Unix-soket vetëm për përdoruesin, i cili mund të rrisë privilegjet (në shembullin tonë — adminusername). Në \/etc\/systemd\/system\/sshd-unix.socket shtojmë: [Socket] … SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Burimi: opennet.ru

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster