Uzante SSH super UNIX-ingo anstataŭ sudo por forigi suid-dosierojn

Timothee Ravier de Red Hat, prizorganto de la projektoj Fedora Silverblue kaj Fedora Kinoite, proponis manieron eviti uzi la sudo-servaĵon, kiu uzas la suid bit por pligrandigi privilegiojn. Anstataŭ sudo, por normala uzanto ekzekuti komandojn kun radikrajtoj, estas proponite uzi la ssh-servaĵon kun loka konekto al la sama sistemo per UNIX-ingo kaj konfirmo de permesoj bazitaj sur SSH-ŝlosiloj.

Uzi ssh anstataŭ sudo ebligas vin forigi suid-programojn en la sistemo kaj ebligi la ekzekuton de privilegiitaj komandoj en la gastiga medio de distribuoj, kiuj uzas ujajn izoligajn komponantojn, kiel Fedora Silverblue, Fedora Kinoite, Fedora Sericea kaj Fedora Onyx. Por limigi aliron, konfirmo de aŭtoritato per USB-ĵetono (ekzemple, Yubikey) povas esti aldone uzata.

Ekzemplo de agordo de OpenSSH-servilkomponentoj por aliro per loka Unikso-simila ingo (aparta sshd-instanco estos lanĉita kun sia propra agorda dosiero):

/etc/systemd/system/sshd-unix.socket: [Unuo] Priskribo=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=jes [Instali] WantedBy=sockets.target

/ ktp / systemd / system /[retpoŝte protektita]: [Unuo] Priskribo=OpenSSH per-koneksa servila demono (Uniksa socket) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Servo] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Lasas nur ŝlosilan aŭtentikigon PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # limigas aliron al elektitaj uzantoj AllowUsers root adminusername # Lasas nur la uzon de .ssh/authorized_keys.authorized. ssh /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktivigu kaj lanĉu la systemd-unuon: sudo systemctl daemon-reload sudo systemctl enable —nun sshd-unix.socket

Aldonu vian SSH-ŝlosilon al /root/.ssh/authorized_keys

Agordi la SSH-klienton.

Instalu la ilon socat: sudo dnf install socat

Ni kompletigas /.ssh/config per specifado de socat kiel prokurilo por aliro per UNIX-socket: Host host.local Uzanto-radiko # Uzu /run/host/run anstataŭ /run por labori el ujoj ProxyCommand socat - UNIX-KLIENTO: / run/host/run/sshd.sock # Vojo al la SSH-ŝlosilo IdentityFile ~/.ssh/keys/localroot # Ebligu TTY-subtenon por la interaga ŝelo RequestTTY jes # Forigu nenecesan eligon LogLevel QUIET

En ĝia nuna formo, la uzantadministrantonomo nun povos efektivigi komandojn kiel radiko sen enigi pasvorton. Kontrolante la operacion: $ ssh host.local [radiko ~]#

Ni kreas sudohost-alison en bash por ruli “ssh host.local”, simile al sudo: sudohost() { if [[ ${#} -eq 0 ]]; tiam ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

Kontrolu: $ sudohost id uid=0(radiko) gid=0(radiko) grupoj=0(radiko)

Ni aldonas akreditaĵojn kaj ebligas dufaktoran aŭtentigon, permesante radikan aliron nur kiam Yubikey USB-ĵetono estas enmetita.

Ni kontrolas, kiuj algoritmoj estas subtenataj de la ekzistanta Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Se la eligo estas 5.2.3 aŭ pli granda, uzu ed25519-sk dum generado de ŝlosiloj, alie uzu ecdsa-sk: ssh-keygen -t ed25519-sk aŭ ssh-keygen -t ecdsa-sk

Aldonas la publikan ŝlosilon al /root/.ssh/authorized_keys

Aldonu ŝlosiltipan ligon al la sshd-agordo: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [retpoŝte protektita],[retpoŝte protektita]

Ni limigas aliron al la Unix-ingo nur al la uzanto, kiu povas havi privilegiojn plialtigitaj (en nia ekzemplo, administrantonomo). En /etc/systemd/system/sshd-unix.socket aldonu: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

fonto: opennet.ru

Aldoni komenton