Timothee Ravier a Red Hat-től, a Fedora Silverblue és Fedora Kinoite projektek karbantartója javasolta a sudo használatának elkerülését, amely a suid bitek használatával emeli a jogosultságokat. A sudo helyett a javasolt megoldás, hogy az átlagos felhasználó root jogosultságú parancsokat az SSH helyi, UNIX socket-kapcsolaton keresztül történő elérésével hajtson végre, SSH-kulcsok alapú jogosultság-ellenőrzés mellett.
Az ssh sudo helyett történő használata megszünteti a suid programok jelenlétét a rendszerben, és lehetővé teszi a privilégiumokkal rendelkező parancsok végrehajtását a konténerizációt alkalmazó disztribúciók, mint például Fedora Silverblue, Fedora Kinoite, Fedora Sericea és Fedora Onyx host-környezetében. A hozzáférés korlátozására USB-token (például Yubikey) használatával is megerősíthetjük a jogosultságokat.
Példa az OpenSSH szerverkomponensek beállítására a helyi UNIX socketen való hozzáféréshez (külön példányban futó sshd külön konfigurációs fájljaival):
/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
Aktiváljuk és indítjuk a systemd egységet: sudo systemctl daemon-reload sudo systemctl enable --now sshd-unix.socket
Hozzáadjuk saját SSH-kulcsunkat a /root/.ssh/authorized_keys fájlhoz
Beállítjuk az SSH-ügyfél működését.
Telepítjük a socat eszközt: sudo dnf install socat
Kiegészítjük a /.ssh/config fájlt, ahol a socat-ot proxy-ként használjuk a UNIX socket eléréséhez: Host host.local User root # A konténerekből való működéshez /run/host/run helyett /run-ot használunk ProxyCommand socat -- UNIX-CLIENT:/run/host/run/sshd.sock # Az SSH-kulcs elérési útja IdentityFile ~/ .ssh/keys/localroot # TTY támogatás engedélyezése interaktív shellhez RequestTTY yes # Felesleges kimenet eltávolítása LogLevel QUIET
Jelen állapotában az adminusername felhasználó most már jelszó megadása nélkül futtathat parancsokat root jogosultsággal. Ellenőrizzük a működést: $ ssh host.local [root ~]#
A bash környezetben létrehozunk egy sudohost álnévparancsot, amely a 'ssh host.local' parancsot indítja el a sudo analógiájára: sudohost() { if [[ ${#} -eq 0 ]]; then ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \"${@}\"" fi }
Ellenőrizzük: $ sudohost id uid=0(root) gid=0(root) groups=0(root)
Hozzáadjuk a jogosultságok ellenőrzését és engedélyezzük a kétfaktoros hitelesítést, amely lehetővé teszi a root-hozzáférést a Yubikey USB-token csatlakoztatásakor.
Ellenőrizzük, hogy milyen algoritmusokat támogat a meglévő Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'
Ha 5.2.3 vagy annál nagyobb érték jelenik meg, ed25519-sk-t használunk a kulcsok generálásához, különben ecdsa-sk-t: ssh-keygen -t ed25519-sk vagy ssh-keygen -t ecdsa-sk
Hozzáadja a nyilvános kulcsot a /root/.ssh/authorized_keys fájlhoz
Hozzáadjuk a kulcstípusra vonatkozó kötelmet az sshd konfigurációhoz: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes sk-ecdsa-sha2-nistp256@openssh.com,sk-ssh-ed25519@openssh.com
Korlátozzuk a hozzáférést a Unix-szokethez csak arra a felhasználóra, aki jogosultságot kapott (példánkban — adminusername). A /etc/systemd/system/sshd-unix.socket fájlba hozzátehetjük: [Socket] … SocketUser=adminusername SocketGroup=adminusername SocketMode=0660
Forrás: opennet.ru
