Sèvi ak SSH sou yon priz UNIX olye pou yo sudo pou debarase m de dosye suid

Timothee Ravier ki soti nan Red Hat, yon moun ki responsab pwojè Fedora Silverblue ak Fedora Kinoite, te pwopoze yon fason pou evite itilize sèvis piblik sudo, ki sèvi ak bit suid pou ogmante privilèj yo. Olye pou yo sudo, pou yon itilizatè nòmal egzekite kòmandman ak dwa rasin, li pwopoze yo sèvi ak sèvis piblik la ssh ak yon koneksyon lokal nan menm sistèm nan atravè yon priz UNIX ak verifikasyon otorizasyon ki baze sou kle SSH.

Sèvi ak ssh olye de sudo pèmèt ou debarase m de pwogram suid sou sistèm nan epi pèmèt ekzekisyon kòmandman privilejye nan anviwònman an lame nan distribisyon ki itilize konpozan izolasyon veso, tankou Fedora Silverblue, Fedora Kinoite, Fedora Sericea ak Fedora Onyx. Pou mete restriksyon sou aksè, konfimasyon otorite lè l sèvi avèk yon siy USB (pa egzanp, Yubikey) ka itilize anplis.

Yon egzanp konfigirasyon konpozan sèvè OpenSSH pou aksè atravè yon priz lokal Unix (yon egzanp sshd separe pral lanse ak pwòp dosye konfigirasyon li yo):

/etc/systemd/system/sshd-unix.socket: [Inite] Deskripsyon=Dokimantasyon OpenSSH sèvè Unix Socket=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=wi [Enstale] WantedBy=sockets.target

/ elatriye / systemd / system /[imèl pwoteje]: [Inite] Deskripsyon=OpenSSH pou chak koneksyon sèvè demon (priz Unix) Dokimantasyon = 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=priz

/etc/ssh/sshd_config_unix: # Kite sèlman otantifikasyon kle PermitRootLogin prohibit-password PasswordAuthentication pa gen PermitEmptyPasswords pa gen okenn GSSAPIAuthentication pa gen okenn restriksyon sou aksè a itilizatè chwazi AllowUsers rasin adminusername # Kite sèlman itilizasyon .ssh/withoutthorized_keyssh/authorized_keys. ssh /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktive epi lanse inite systemd la: sudo systemctl daemon-reload sudo systemctl enable —kounye a sshd-unix.socket

Ajoute kle SSH ou a nan /root/.ssh/authorized_keys

Mete kanpe kliyan SSH la.

Enstale sèvis piblik la socat: sudo dnf enstale socat

Nou konplete /.ssh/config lè nou espesifye socat kòm yon prokurasyon pou aksè atravè yon priz UNIX: Host host.local Itilizatè rasin # Sèvi ak /run/host/run olye de /run pou travay nan resipyan ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Chemen ki mennen nan kle SSH IdentityFile ~/.ssh/keys/localroot # Pèmèt sipò TTY pou shell entèaktif RequestTTY wi # Retire pwodiksyon ki pa nesesè LogLevel QUIET

Nan fòm li ye kounye a, non itilizatè itilizatè a pral kounye a kapab egzekite kòmandman kòm rasin san yo pa antre nan yon modpas. Tcheke operasyon an: $ ssh host.local [rasin ~]#

Nou kreye yon alyas sudohost nan bash pou kouri "ssh host.local", menm jan ak sudo: sudohost() { if [[ ${#} -eq 0 ]]; Lè sa a, ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

Tcheke: $ sudohost id uid = 0 (rasin) gid = 0 (rasin) gwoup = 0 (rasin)

Nou ajoute kalifikasyon epi pèmèt otantifikasyon de faktè, ki pèmèt aksè rasin sèlman lè yo mete yon siy USB Yubikey.

Nou tcheke ki algoritm ki sipòte pa Yubikey ki egziste deja: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{enprime $2}'

Si pwodiksyon an se 5.2.3 oswa pi gran, sèvi ak ed25519-sk lè w ap jenere kle, otreman itilize ecdsa-sk: ssh-keygen -t ed25519-sk oswa ssh-keygen -t ecdsa-sk

Ajoute kle piblik la nan /root/.ssh/authorized_keys

Ajoute yon lyen kalite kle nan konfigirasyon sshd la: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [imèl pwoteje],[imèl pwoteje]

Nou mete restriksyon sou aksè nan priz Unix a sèlman itilizatè a ki ka gen privilèj elve (nan egzanp nou an, adminusername). Nan /etc/systemd/system/sshd-unix.socket ajoute: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Sous: opennet.ru

Add nouvo kòmantè