Utilizà SSH sopra un socket UNIX invece di sudo per sbarazzarsi di i fugliali suid

Timothee Ravier da Red Hat, un mantenitore di i prughjetti Fedora Silverblue è Fedora Kinoite, hà prupostu un modu per evitari l'usu di l'utilità sudo, chì usa u suid bit per scalate privilegi. Invece di sudo, per un utilizatore normale per eseguisce cumandamenti cù diritti di root, hè prupostu di utilizà l'utilità ssh cù una cunnessione locale à u stessu sistema via un socket UNIX è verificazione di permessi basati nantu à e chjave SSH.

Utilizà ssh invece di sudo permette di sbarazzà di i prugrammi suid in u sistema è permette l'esekzione di cumandamenti privilegiati in l'ambienti d'ospiti di distribuzioni chì utilizanu cumpunenti di isolamentu di u containeru, cum'è Fedora Silverblue, Fedora Kinoite, Fedora Sericea è Fedora Onyx. Per limità l'accessu, a cunferma di l'autorità cù un token USB (per esempiu, Yubikey) pò esse aduprata in più.

Un esempiu di cunfigurà cumpunenti di u servitore OpenSSH per accessu via un socket Unix locale (una istanza sshd separata serà lanciata cù u so propiu schedariu di cunfigurazione):

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

/ etc / systemd / system /[email prutettu]: [Unità] Description = OpenSSH daemon per u servitore di cunnessione (socket Unix) Documentazione = man:sshd (8) man:sshd_config (5) Wants = sshd-keygen.target After = sshd-keygen.target [Serviziu] ExecStart =- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Lascia solu l'autenticazione chjave PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # restringe l'accessu à l'utilizatori selezziunati AllowUsers root adminusername # Lascia solu l'usu di .ssh/withauthorized_keysssh/authorized_authorized_keys. ssh /authorized_keys # attivà sftp Sottosistema sftp /usr/libexec/openssh/sftp-server

Attivate è lanciate l'unità systemd: sudo systemctl daemon-reload sudo systemctl enable - avà sshd-unix.socket

Aghjunghjite a vostra chjave SSH à /root/.ssh/authorized_keys

Configurazione di u cliente SSH.

Installa l'utilità socat: sudo dnf install socat

Suppletemu /.ssh/config specificendu socat cum'è un proxy per l'accessu via un socket UNIX: Host host.local User root # Aduprate /run/host/run invece di /run per travaglià da cuntenituri ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Path to the SSH key IdentityFile ~/.ssh/keys/localroot # Abilita u supportu TTY per a shell interattiva RequestTTY yes # Elimina l'output inutile LogLevel QUIET

In a so forma attuale, l'utente adminusername serà avà capaci di eseguisce cumandamenti cum'è root senza inserisce una password. Verificate l'operazione: $ ssh host.local [root ~]#

Creemu un alias sudohost in bash per eseguisce "ssh host.local", simile à sudo: sudohost () { if [[ ${#} -eq 0 ]]; poi ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

Verificate: $ sudohost id uid=0(root) gid=0(root) gruppi=0(root)

Aghjunghjemu credenziali è attivate l'autenticazione à dui fattori, chì permettenu l'accessu radicali solu quandu un token USB Yubikey hè inseritu.

Cuntrollamu chì algoritmi sò supportati da u Yubikey esistenti: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Se l'output hè 5.2.3 o più grande, utilizate ed25519-sk quandu generate chjave, altrimenti utilizate ecdsa-sk: ssh-keygen -t ed25519-sk o ssh-keygen -t ecdsa-sk

Aghjunghje a chjave publica à /root/.ssh/authorized_keys

Aghjunghjite un ligame di tipu chjave à a cunfigurazione sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [email prutettu],[email prutettu]

Limitemu l'accessu à u socket Unix à solu l'utilizatori chì ponu avè privilegi elevati (in u nostru esempiu, adminusername). In /etc/systemd/system/sshd-unix.socket aghjunghje: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Source: opennet.ru

Add a comment