Paggamit ng SSH sa isang UNIX socket sa halip na sudo upang maalis ang mga suid file

Si Timothee Ravier mula sa Red Hat, isang maintainer ng mga proyekto ng Fedora Silverblue at Fedora Kinoite, ay nagmungkahi ng isang paraan upang maiwasan ang paggamit ng sudo utility, na gumagamit ng suid bit upang palakihin ang mga pribilehiyo. Sa halip na sudo, para sa isang normal na user na magsagawa ng mga utos na may mga karapatan sa ugat, iminungkahi na gamitin ang ssh utility na may lokal na koneksyon sa parehong sistema sa pamamagitan ng UNIX socket at pag-verify ng mga pahintulot batay sa mga SSH key.

Ang paggamit ng ssh sa halip na sudo ay nagbibigay-daan sa iyong alisin ang mga suid program sa system at paganahin ang pagpapatupad ng mga privileged command sa host environment ng mga distribusyon na gumagamit ng container isolation component, gaya ng Fedora Silverblue, Fedora Kinoite, Fedora Sericea at Fedora Onyx. Upang paghigpitan ang pag-access, ang kumpirmasyon ng awtoridad gamit ang isang USB token (halimbawa, Yubikey) ay maaaring dagdag na gamitin.

Isang halimbawa ng pag-configure ng mga bahagi ng OpenSSH server para sa pag-access sa pamamagitan ng lokal na Unix socket (isang hiwalay na sshd instance ay ilulunsad kasama ang sarili nitong configuration file):

/etc/systemd/system/sshd-unix.socket: [Yunit] Paglalarawan=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=yes [I-install] WantedBy=sockets.target

/ etc / systemd / system /[protektado ng email]: [Yunit] Paglalarawan=OpenSSH per-connection server daemon (Unix socket) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Serbisyo] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Nag-iiwan lang ng key authentication PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords walang GSSAPIAuthentication no # nililimitahan ang access sa mga napiling user AllowUsers root adminusername # Nag-iiwan lamang ng paggamit ng .ssh/withoutthorized_keyssh. /authorized_ keys # paganahin ang sftp Subsystem sftp /usr/libexec/openssh/sftp-server

I-activate at ilunsad ang systemd unit: sudo systemctl daemon-reload sudo systemctl enable β€”ngayon sshd-unix.socket

Idagdag ang iyong SSH key sa /root/.ssh/authorized_keys

Pagse-set up ng SSH client.

I-install ang socat utility: sudo dnf install socat

Dinadagdagan namin ang /.ssh/config sa pamamagitan ng pagtukoy sa socat bilang proxy para sa pag-access sa pamamagitan ng UNIX socket: Host host.local User root # Gamitin ang /run/host/run sa halip na /run para gumana mula sa mga container ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Path sa SSH key IdentityFile ~/.ssh/keys/localroot # Paganahin ang suporta ng TTY para sa interactive na shell na RequestTTY yes # Alisin ang hindi kinakailangang output LogLevel QUIET

Sa kasalukuyang anyo nito, ang user adminusername ay magagawa na ngayong magsagawa ng mga command bilang root nang hindi naglalagay ng password. Sinusuri ang operasyon: $ ssh host.local [root ~]#

Lumilikha kami ng sudohost alias sa bash upang patakbuhin ang "ssh host.local", katulad ng sudo: sudohost() { if [[ ${#} -eq 0 ]]; pagkatapos ay ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

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

Nagdaragdag kami ng mga kredensyal at pinapagana ang two-factor authentication, na nagbibigay-daan sa root access lamang kapag may inilagay na Yubikey USB token.

Sinusuri namin kung aling mga algorithm ang sinusuportahan ng umiiral na Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Kung ang output ay 5.2.3 o mas mataas, gamitin ang ed25519-sk kapag bumubuo ng mga key, kung hindi, gamitin ang ecdsa-sk: ssh-keygen -t ed25519-sk o ssh-keygen -t ecdsa-sk

Idinaragdag ang pampublikong key sa /root/.ssh/authorized_keys

Magdagdag ng key type na nagbubuklod sa sshd configuration: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [protektado ng email],[protektado ng email]

Pinaghihigpitan namin ang pag-access sa Unix socket sa user lamang na maaaring magkaroon ng mga pribilehiyo na nakataas (sa aming halimbawa, adminusername). Sa /etc/systemd/system/sshd-unix.socket idagdag ang: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Pinagmulan: opennet.ru

Magdagdag ng komento