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

Timothee Ravier nga Red Hat, mirmbajtësi i projekteve Fedora Silverblue dhe Fedora Kinoite, ofroi një mënyrë për të shmangur përdorimin e utilitetit 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 si një përdorues i zakonshëm, propozohet përdorimi i utilitetit ssh me lidhje lokale në të njëjtin sistem përmes një soketi UNIX dhe verifikimin e privilegjeve në bazë të çelësave SSH.

Përdorimi i ssh në vend të sudo lejon heqjen e programeve suid në sistem dhe organizimin e ekzekutimit të komandave me privilegje në ambientin e pritësve të distribuimeve që përdorin izolimin e komponentëve në konteiner, siç janë Fedora Silverblue, Fedora Kinoite, Fedora Sericea dhe Fedora Onyx. Për të kufizuar aksesin, gjithashtu mund të përdoret një konfirmim privilegjesh me ndihmën e një tokeni USB (p.sh., Yubikey).

Shembulli i konfigurimit të komponenteve serverike OpenSSH për qasje përmes soketës lokale Unix (do të niset një instancë e veçantë e sshd me skedarin e vet 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

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

Shtojmë çelësin tonë SSH në /root/.ssh/authorized_keys

Konfigurojmë punën e klientit SSH.

Instalojmë utilitetin socat: sudo dnf install socat

Plotësojmë /.ssh/config, duke caktuar socat si një proxy për qasje përmes soketës UNIX: Host host.local User root # Përdorim /run/host/run në vend të /run për të punuar nga konteinerët ProxyCommand socat — UNIX-CLIENT:/run/host/run/sshd.sock # Rrugë për çelësin SSH IdentityFile ~/.ssh/keys/localroot # Aktivizojmë mbështetje TTY për shell interaktive RequestTTY yes # Heqim daljet e panevojshme LogLevel QUIET

Në formatin aktual, përdoruesi adminusername tani mund të ekzekutojë komanda me privilegje root pa futur fjalëkalimin. Kontrollojmë funksionimin: $ ssh host.local [root ~]#

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

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

Shtojmë një kontroll të privilegjeve dhe aktivizojmë autentifikimin me dy faktorë, i cili lejon qasje në root vetëm me futjen e një tokeni USB Yubikey.

Kontrollojmë cilat algoritme mbështetet nga Yubikey aktual: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Nëse dëgjuar 5.2.3 ose një vlerë më të lartë, përdorim ed25519-sk gjatë gjenerimit të çelësave, nd otherwise — 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 sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes sk-ecdsa-sha2-nistp256@openssh.com,sk-ssh-ed25519@openssh.com

Kufizojmë qasjen në soketën Unix vetëm për përdoruesin e 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

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster