Suid fayllaridan xalos bo'lish uchun sudo o'rniga UNIX soketi orqali SSH dan foydalanish

Red Hat'dan Timoti Ravier, Fedora Silverblue va Fedora Kinoite loyihalarini qo'llab-quvvatlovchi, imtiyozlarni oshirish uchun suid bitidan foydalanadigan sudo yordam dasturidan foydalanishdan qochish usulini taklif qildi. Sudo o'rniga oddiy foydalanuvchi ildiz huquqlariga ega buyruqlarni bajarishi uchun UNIX rozetkasi orqali bir xil tizimga mahalliy ulanish va SSH kalitlari asosida ruxsatlarni tekshirish bilan ssh yordam dasturidan foydalanish taklif etiladi.

Sudo o'rniga ssh dan foydalanish tizimdagi suid dasturlardan xalos bo'lish va Fedora Silverblue, Fedora Kinoite, Fedora Sericea va Fedora Onyx kabi konteyner izolyatsiyasi komponentlarini ishlatadigan tarqatishlarning xost muhitida imtiyozli buyruqlarni bajarishni yoqish imkonini beradi. Kirishni cheklash uchun qo'shimcha ravishda USB tokeni (masalan, Yubikey) yordamida vakolatni tasdiqlashdan foydalanish mumkin.

Mahalliy Unix soketi orqali kirish uchun OpenSSH server komponentlarini sozlash misoli (alohida sshd nusxasi o'z konfiguratsiya fayli bilan ishga tushiriladi):

/etc/systemd/system/sshd-unix.socket: [Unit] Tavsif=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=ha [O'rnatish] WantedBy=sockets.target

/ etc / systemd / system /[elektron pochta bilan himoyalangan]: [Birlik] Tavsif=OpenSSH har bir ulanish serveri demoni (Unix soket) Hujjatlar=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Xizmat] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=soket

/etc/ssh/sshd_config_unix: # Faqat kalit autentifikatsiyasini qoldiradi PermitRootLogin prohibit-password PasswordAuthentication yo'q PermitEmptyPasswords yo'q GSSAPIAutentifikatsiya no # tanlangan foydalanuvchilarga kirishni cheklaydi AllowUsers root adminusername # Faqat foydalanishni qoldiradi. AuthorizedKeysFile .ssh / avtorizatsiyalangan_ kalitlar # sftp quyi tizimini yoqish sftp /usr/libexec/openssh/sftp-server

Systemd blokini faollashtiring va ishga tushiring: sudo systemctl daemon-qayta yuklash sudo systemctl enable — endi sshd-unix.socket

SSH kalitingizni /root/.ssh/authorized_keys-ga qo'shing

SSH mijozini sozlash.

Socat yordam dasturini o'rnating: sudo dnf install socat

Biz /.ssh/config ni UNIX rozetkasi orqali kirish uchun proksi-server sifatida socat-ni ko'rsatib, to'ldiramiz: Host host.local User root # ProxyCommand socat konteynerlaridan ishlash uchun /run o'rniga /run/host/run dan foydalaning - UNIX-CLIENT: / run/ host/run/sshd.sock # SSH kalitiga yo'l IdentityFile ~/.ssh/keys/localroot # Interfaol qobiq uchun TTY qo'llab-quvvatlashni yoqing RequestTTY ha # LogLevel JK keraksiz chiqishini olib tashlang

Joriy shaklda foydalanuvchi adminusername endi parol kiritmasdan buyruqlarni root sifatida bajarishi mumkin bo'ladi. Amaliyot tekshirilmoqda: $ ssh host.local [root ~]#

Sudoga o'xshash “ssh host.local” ni ishga tushirish uchun bashda sudohost taxallus yaratamiz: sudohost() { if [[ ${#} -eq 0 ]]; keyin ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

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

Biz hisobga olish ma'lumotlarini qo'shamiz va ikki faktorli autentifikatsiyani yoqamiz, faqat Yubikey USB tokeni kiritilganda ildizga kirishga ruxsat beramiz.

Mavjud Yubikey tomonidan qaysi algoritmlar qo'llab-quvvatlanishini tekshiramiz: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{2$ chop etish'

Agar chiqish 5.2.3 yoki undan katta bo'lsa, kalitlarni yaratishda ed25519-sk dan foydalaning, aks holda ecdsa-sk dan foydalaning: ssh-keygen -t ed25519-sk yoki ssh-keygen -t ecdsa-sk

Ochiq kalitni /root/.ssh/authorized_keys-ga qo'shadi

Sshd konfiguratsiyasiga bog'lovchi kalit turini qo'shing: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [elektron pochta bilan himoyalangan],[elektron pochta bilan himoyalangan]

Biz Unix soketiga kirishni faqat imtiyozlarga ega bo'lgan foydalanuvchiga cheklab qo'yamiz (bizning misolimizda adminusername). /etc/systemd/system/sshd-unix.socket da qo'shing: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Manba: opennet.ru

a Izoh qo'shish