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