PAM orqali autentifikatsiya mijozni qo'lda ishga tushirganda muvaffaqiyatli bo'lishi va systemd xuddi shu profilni ishga tushirganda AUTH_FAILED bilan muvaffaqiyatsiz bo'lishi mumkin. Parol bu ishga tushirishlar orasida o'zgarmaydi; o'zgaradigan narsa PAMga savol beruvchi jarayon atrofidagi cheklovlar to'plamidir. PAM o'z hisob ma'lumotlarini o'zgartirish qobiliyati mustahkamlangan unit aynan olib tashlaydigan narsa bo'lgan yordamchi orqali javob beradi. Imkoniyatlar ro'yxatiga tegishdan oldin o'sha yordamchini va unga kerak bo'lgan chegarani toping.

unix_chkpwd - PAM savoliga javob beradigan binar fayl

Mahalliy parol autentifikatsiyasida pam_unix hash faylini kamdan-kam o'zi o'qiydi. U unix_chkpwd ni ishga tushiradi, distributivlar uni setuid root yoki setgid shadow sifatida o'rnatadi, shunda bitta parolni /etc/shadow ni o'qishga haqi bo'lmagan jarayon nomidan tekshirish mumkin. Bu identifikatsiyani olish qobiliyatini olib tashlang, yordamchi tekshiruvni yakunlay olmaydi, shuning uchun modul oddiy autentifikatsiya xatosini qaytaradi.

Keyin xatolik mijoz ko'radigan har bir jurnalda hisob ma'lumotlari muammosi kabi ko'rinadi. Bu tuzoq: mijoz PAM unga aytgan narsani xabar qiladi, PAM esa faqat stek yo'q dedi, deb xabar beradi. Yordamchini root sifatida qo'lda ishga tushirish ham hech narsani isbotlamaydi, chunki u xizmat hech qachon ishlatmaydigan imtiyoz yo'lini sinab ko'radi. systemd haqiqatda yuklagan unitni o'qing, so'ngra qilingan urinish uchun tizim jurnalini o'qing. Bu ikki ko'rinish sandbox muammosini noto'g'ri parol muammosidan ajratadi.

Parol jurnalini o'qishdan oldin unitni o'qing

Paketlangan unit siz yozmagan drop-in ni olib yurishi mumkin, amalda ishlaydigan konfiguratsiya esa birlashtirilgan natijadir. Unitni systemd ko'rgan ko'rinishda, yordamchi o'zini ko'tara oladimi yoki yo'qmi degan sandbox sozlamalari bilan birga chop eting. Bu bosqichda faqat o'qish uchun tekshiruv yetarli.

systemctl cat [email protected]
systemctl show [email protected] -p User -p Group -p CapabilityBoundingSet -p AmbientCapabilities -p NoNewPrivileges
journalctl -u [email protected] -b

Birinchi buyruq unit va uning drop-in lari qayerdan kelishini ko'rsatadi, bu muhim, chunki bir necha oy oldin qo'shilgan bekor qilish nima uchun mavjudligi xotirasidan uzoq yashaydi. Ikkinchisi keyingi ikki bo'lim tayanadigan sandbox qiymatlarini chop etadi.

Ko'rganlaringizni xuddi shu distributiv va versiyadagi ishlaydigan xost bilan solishtiring. User, CapabilityBoundingSet yoki NoNewPrivileges dagi farq aniq iz; nasr izohlaridagi farq esa emas. Biror narsani o'zgartirishdan oldin qiymatlarni yozib qo'ying, chunki harakatlanuvchi nishonga qarshi keyingi taqqoslash hech narsani isbotlamaydi. Agar xizmat imtiyozsiz hisob va bo'sh chegaralovchi to'plam bilan ishlasa, yordamchining ishlash uchun deyarli hech narsasi qolmaydi.

Hisob ma'lumotlari o'zgarishi, faylga kirish va siyosat uchta chegara

exec vaqtida nima bo'lishidan boshlang. setuid binar yoki file capabilities tashuvchi fayl hisob ma'lumotlari o'zgarishini keltirib chiqaradi, shuning uchun hosil bo'lgan identifikatsiya chaqiruvchining davomi emas. Chegaralovchi to'plam bunday binar nima olishi mumkinligini cheklaydi, NoNewPrivileges esa setuid, setgid va file capabilities olishni butunlay bloklaydi. Shu uchtadan birortasi yordamchini to'xtatib, xizmatning qolgan barcha funksiyalarini daxlsiz qoldirishi mumkin.

Keyin keng diskretsion chetlanishni tor o'qish kirishidan ajrating. CAP_DAC_OVERRIDE diskretsion tekshiruvlarni deyarli hamma joyda chetlab o'tadi, CAP_DAC_READ_SEARCH esa o'qish va katalog bo'ylab yurishni o'zining qo'shimcha vakolatlari bilan qamrab oladi. Ular turli ta'sir doirasiga ega turli vositalar va ikkalasi ham PAM shadow faylini o'qisin deb yozishning usuli emas.

Nihoyat, majburiy siyosat bu harakatga umuman ruxsat beradimi, deb so'rang. Linux imkoniyati SELinuxni bekor qilmaydi va unga ega bo'lish turini majburlash qoidasi haqida hech narsani isbotlamaydi. Faylga kirishni rad etish va imkoniyatni rad etishni turli dalillar sifatida ko'ring, chunki ular turli tuzatishlarni va ko'pincha turli egalarni nomlaydi. Yozuvning har bir maydonini yakka denied so'zi o'rniga o'qing. Qaysi bajariladigan fayl harakatni qildi, u qaysi domenda ishladi, qanday turdagi nishonga tegdi, qaysi obyekt sinfi ishtirok etdi va siyosat qaysi ruxsatni rad etdi - bularning har biri javobni boshqacha toraytiradi.

Rad etishni audit jurnalidan chiqaring

enforcing rejimidagi xostda audit izi rad etishni qayd etadigan yagona joydir. So'nggi hodisalarni so'rang va ularni tekshiruvni boshlagan vaqtingizga emas, muvaffaqiyatsiz kirish vaqt tamg'asiga qarab o'qing.

ausearch -m AVC,USER_AVC -ts recent

Bo'sh natija begunohlik dalili emas. Bu audit yig'mayotganini yoki oynangiz urinishni o'tkazib yuborganini bildiradi va siyosatni istisno qilishdan oldin ikkala ehtimol ham istisno qilinishi kerak.

Red Hatning SELinux muammolarini bartaraf etish qo'llanmasi yorliq va konfiguratsiya tekshiruvlarini ruxsat qoidalarini yaratishdan oldin qo'yadi, bu ham bu muammo uchun to'g'ri tartibdir. Noto'g'ri yorliqlangan yordamchi binar va siyosatdagi bo'shliq o'xshash rad etishlarni keltirib chiqaradi, lekin turli tuzatishlarni talab qiladi. Yorliq xatosi uchun ruxsat qoidasini yaratish nuqsonni yashiradi va keyingi paket yangilanishi uni qaytadan kiritishiga yo'l qo'yadi. Har qanday siyosat yozishdan oldin o'rnatilgan yordamchidagi yorliqni tasdiqlang.

O'zgarishni bitta qabul qilingan va bitta rad etilgan kirish bilan isbotlang

Faqat ko'rsatgan chegarangizni o'zgartiring, so'ngra ikkala natijani sinab ko'ring. Autentifikatsiya qilishi kerak bo'lgan hisob muvaffaqiyatli bo'lishi, noto'g'ri parolli hisob esa hanuz muvaffaqiyatsiz bo'lishi kerak. Har bir urinishni muvaffaqiyatli qiladigan o'zgarish autentifikatsiyani tuzatish o'rniga olib tashlagan.

Haqiqiy ulanish urinishini bajaring va darhol jurnalni o'qing. Tuzatishni isbotlaydigan satr o'sha urinish uchun pam_unix(openvpn:auth) yozuvidir: u autentifikatsiya muvaffaqiyati deb yozishi kerak va hech qanday AVC yozuvi xuddi shu soniyani olib yurmasligi kerak.

journalctl -u [email protected] -n 30 --no-pager
ss -tnp | grep openvpn

Ishlaydigan tunnel qayta ulanishni ham talab qiladi, chunki sandbox o'zgarishlari ikkinchi ulanishni birinchisidan ko'proq buzadi. Qayta ulangandan keyin o'rnatilgan socketni tekshiring va o'sha unit hanuz unga xizmat qilayotganini tasdiqlang.

O'xshash maqolalar