Tarkibga o'tish

Parol siyosatlari

Foydalanuvchi va guruh hisoblari maqolasida bitta akkaunt parolining amal qilish muddatini o'qish va o'rnatish vositasi — chage ko'rib chiqilgan edi. Bu har bir akkaunt uchun alohida mexanizm. U yangi parol haqiqatan kuchli ekanmi, bu akkaunt ikki oy oldin ishlatgan parol emasmi yoki bundan buyon yaratiladigan har bir akkaunt uchun tashkilot bo'yicha standart qiymat qanday bo'lishi kerakligi haqida hech narsa aytmaydi. Bu maqola chage dan yuqorida turadigan tizim bo'yicha siyosat qatlamini ko'rib chiqadi: parol o'rnatilayotgan paytda uning sifatini majburlash, parollar tarixini eslab qolish va har bir yangi akkaunt uchun kimdir chage ni to'g'ri ishga tushirishiga tayanmasdan, avtomatik qo'llaniladigan oqilona standart qiymatlarni o'rnatish.

Nimalarni o'rganasiz

Bu maqola oxirida siz quyidagilarni qila olasiz:

  • pam_pwquality bilan parol murakkabligi qoidalarini majburlash;
  • pam_pwhistory bilan parolni qayta ishlatishning oldini olish;
  • /etc/login.defs da tashkilot bo'yicha parol muddati standartlarini o'rnatish;
  • akkauntni bloklash, blokdan chiqarish va parolni darhol o'zgartirishga majburlash;
  • muvaffaqiyatsiz loginlardan keyin akkauntni bloklash (pam_faillock) parol kuchliligi bilan qanday bog'liq, lekin alohida himoya vositasi ekanini tushuntirish.

Parol siyosati aslida qayerda joylashadi

Linux’da parol siyosati uchta turli nuqtada amalga oshiriladi. Ularni chalkashtirish "siyosat o'rnatdim, lekin u ishlamadi" holatining keng tarqalgan sababi:

Nuqta U nimani boshqaradi Qayerda
Parol o'rnatilganda Yangi parol murakkablik talablariga javob beradimi pam_pwquality (password turidagi PAM moduli)
Parol qayta ishlatilganda U shu akkauntning oxirgi N ta parolidan biriga mos keladimi pam_pwhistory
Vaqt o'tishi bilan, mavjud parol uchun O'zgartirishga majburlanguncha u qancha muddat amal qiladi Har bir akkaunt uchun chage, tizim bo'yicha standart sifatida /etc/login.defs

/etc/login.defs dagi o'zgarish, mavjud akkauntlarga chage ham ishga tushirilmasa, faqat o'zgarishdan keyin yaratilgan akkauntlarga ta’sir qiladi. "Yangi" parol siyosati allaqachon mavjud bo'lgan akkauntlar uchun hech narsa qilmayotgandek ko'rinishining eng keng tarqalgan sababi aynan shu.

Murakkablikni majburlash: pam_pwquality

pam_pwquality (eski pam_cracklib ning vorisi) taklif qilingan parolni passwd uni o'rnatishga uringan paytda qoidalar to'plami bo'yicha tekshiradi: uzunlik, belgilar xilma-xilligi va teskari yozilgan foydalanuvchi nomi kabi oddiy shablonlarga chidamlilik.

sudo nano /etc/security/pwquality.conf
minlen = 12
minclass = 3
dcredit = 0
maxrepeat = 3
dictcheck = 1
  • minlen — minimal umumiy uzunlik;
  • minclass — to'rtta belgi sinfidan (katta harf, kichik harf, raqam, maxsus belgi) nechtasi bo'lishi shartligi;
  • dcredit — pam_cracklib dizaynidan qolgan "kredit" tizimi: bu yerdagi 0 raqamlar avtomatik uzunlik bonusini bermasligini anglatadi. Amalda bu minlen raqamlar bilan to'ldirish orqali emas, haqiqiy belgilar xilma-xilligi orqali bajarilishini talab qiladi;
  • maxrepeat — ketma-ket bundan ko'p bir xil belgisi bor parolni bloklaydi (maxrepeat = 3 da aaaa1234 o'tmaydi);
  • dictcheck — lug'at so'zlari ro'yxatida topilgan parollarni rad etadi (cracklib-runtime/libpwquality lug'ati o'rnatilgan bo'lishi kerak).

dcredit ortidagi kredit tizimini 0 holatidan tashqari ham tushunishga arziydi, chunki intervyularda bu ko'p chalkashlik tug'diradi. To'rtta sozlama — dcredit, ucredit, lcredit, ocredit (raqamlar, katta harflar, kichik harflar va "boshqa"/maxsus belgilar) — har biri ishorasiga qarab turlicha o'qiladigan qiymat oladi:

  • dcredit=1 kabi musbat qiymat uzunlik krediti beradi: har bir raqam minlen ga shuncha qo'shimcha belgi sifatida hisoblanadi. Shunda raqamlari bor, biroz qisqaroq parol ham uzunlik qoidasini qanoatlantira oladi;
  • dcredit=-1 kabi manfiy qiymat esa talab qo'yadi: uzunlikdan qat’i nazar, shu sinfdan kamida shuncha belgi bo'lishi kerak (dcredit=-1 "kamida bitta raqam majburiy" degani);
  • 0 ikkalasini ham o'chiradi — na uzunlik bonusi, na sinf bo'yicha talab bo'ladi. Shuning uchun yuqoridagi konfiguratsiya faqat minlen va minclass ga tayanadi.

Demak, kamida bitta katta harf va bitta raqamni to'g'ridan-to'g'ri talab qilish uchun kattaroq minclass emas, ucredit=-1 dcredit=-1 sozlamasi kerak. minclass faqat nechta sinf borligini sanaydi, aniq qaysi sinf bo'lishi kerakligini talab qilishga imkon bermaydi.

pam_pwquality ishlashi uchun u haqiqatan password stack’iga ulangan bo'lishi kerak:

grep pwquality /etc/pam.d/common-password
password  requisite  pam_pwquality.so retry=3

Bu yerdagi requisite sifat tekshiruvidan o'tmagan parol stack’ni darhol to'xtatishini anglatadi. Bu xuddi shu stack’da pastroqda turgan pam_unix.so uni saqlash imkoniyatiga ega bo'lishidan oldin sodir bo'ladi, shuning uchun rad etilgan parol hech qachon /etc/shadow ga yozilmaydi.

passwd testuser
New password:
BAD PASSWORD: The password contains less than 3 character classes
passwd: Authentication token manipulation error

root ataylab bundan mustasno

pam_pwquality tekshiruvlari passwd orqali o'z parolini o'zgartirayotgan akkauntga qo'llaniladi. root boshqa akkauntning parolini o'rnatayotganda bunday murakkablik tekshiruviga bo'ysunmaydi. Sababi shuki, unutilgan parolni tiklayotgan administrator buni vaqtinchalik, oddiy qiymat bilan ham qila olishi kerak — faqat akkaunt keyingi kirishda parolni o'zgartirishga majburlansa bas (quyida ko'rib chiqiladi).

Qayta ishlatishning oldini olish: pam_pwhistory

Murakkablik qoidalarining o'zi parolni o'zgartirishga majburlangan har safar kimdir ikkita parol o'rtasida almashib yurishini to'xtatmaydi. pam_pwhistory har bir akkaunt uchun sozlanadigan sondagi oldingi parol hash’larini eslab qoladi va moslik bo'lsa, rad etadi:

password  required  pam_pwhistory.so remember=5 use_authtok

remember=5 shu akkaunt ishlatgan oxirgi beshta paroldan istalganini rad etadi. use_authtok esa bu modulga parolni qayta so'ramasdan, stack’dagi oldingi qator allaqachon tekshirgan paroldan foydalanishni aytadi. pam_pwquality va pam_pwhistory birga stack qilinganda bu zarur, aks holda foydalanuvchidan bir xil yangi parolni ikki marta kiritish so'raladi.

Tarix hash’lar sifatida va faqat yoqilgan paytdan boshlab saqlanadi

pam_pwhistory u yoqilishidan oldin ishlatilgan parollarni orqaga qarab bila olmaydi — tarix modul stack’ga qo'shilgan paytdan boshlab to'plana boshlaydi. U /etc/security/opasswd da ochiq matnni emas, salt qo'shilgan hash’larni saqlaydi. Bu faylning o'zi ham /etc/shadow kabi qat’iy ruxsatlarga (600, egasi root) ega bo'lishi kerak, chunki unda oflayn buzib ochish (cracking) urinishi nishonga olishi mumkin bo'lgan ma’lumotlar saqlanadi.

Tizim bo'yicha muddat standartlari: /etc/login.defs

chage muddat qiymatlarini har bir akkaunt uchun alohida o'rnatadi. /etc/login.defs esa yangi yaratilgan akkaunt, unga hali hech kim chage ishga tushirmasdan oldin, standart holatda nimani olishini belgilaydi:

grep -E '^PASS_(MAX|MIN|WARN)' /etc/login.defs
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_WARN_AGE   7

Ubuntu’dagi PASS_MAX_DAYS 99999 standart qiymati amalda "hech qachon muddati tugamaydi" degani. Parollarni almashtirish tashkilot siyosatining bir qismi bo'lgan har qanday serverda bu qiymatni ongli ravishda o'zgartirishga arziydi:

PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_WARN_AGE   14
  • PASS_MAX_DAYS — akkaunt paroli shuncha kun ichida o'zgartirilishi kerak;
  • PASS_MIN_DAYS — o'zgartirishdan keyin parolni qancha vaqtdan so'ng yana o'zgartirish mumkinligi. U aynan kimdir pam_pwhistory eslab qolgan parollar bo'ylab darhol aylanib, asl paroliga qaytib kelishining oldini olish uchun 0 dan yuqori qilib o'rnatiladi;
  • PASS_WARN_AGE — muddat tugashidan necha kun oldin foydalanuvchi tizimga kirganda ogohlantirishni ko'ra boshlashi.

Yuqorida aytilganidek, bu fayl faqat o'zgarishdan keyin yaratilgan akkauntlarga ta’sir qiladi. Xuddi shu qiymatlarni allaqachon mavjud akkauntga qo'llash uchun vosita baribir chage — uning to'liq sintaksisi uchun Foydalanuvchi va guruh hisoblari ga qarang.

Parolni darhol o'zgartirishga majburlash va akkauntni bloklash

Amalda bir-biriga bog'liq, lekin alohida ikki akkaunt holati doimo uchrab turadi:

sudo passwd -e testuser
passwd: password expiry information changed.

-e joriy parolning muddatini darhol tugatadi va aynan keyingi kirishda uni o'zgartirishga majburlaydi. Bu administrator kimgadir vaqtinchalik parol o'rnatgandan keyin yoki akkauntning o'zi ishlatilishi mumkin bo'lib qolishi kerak bo'lgan, credential oshkor bo'lganidan shubha qilingan holatda standart qadam.

sudo passwd -l testuser
sudo usermod -L testuser

Ikkala buyruq ham /etc/shadow dagi parol hash’i oldiga ! qo'yish orqali akkauntni bloklaydi. Bu parolning o'zini o'chirmasdan parol bilan autentifikatsiyani muvaffaqiyatsiz qiladi va passwd -u yoki usermod -U bilan qaytariladi. Bu aynan parol autentifikatsiyasini bloklash. U o'z-o'zidan xuddi shu akkauntga SSH kalit orqali kirishni bloklamaydi. Shuning uchun "bu akkauntni butunlay o'chirib qo'yish"ning to'liqroq tartibi shell’ni ham /usr/sbin/nologin ga o'rnatadi yoki akkauntning authorized kalitlarini olib tashlaydi.

Bu pam_faillock bilan qanday bog'liq

Parol kuchliligi va muvaffaqiyatsiz urinishlardan keyin bloklash bir-birini takrorlamaydi, balki to'ldiradi. Hech qachon to'g'ri taxmin qilinmaydigan kuchli, noyob parol bloklashdan hech narsa yutmaydi. Zaif, lekin hali buzib kirilmagan parolli akkaunt esa ikkalasidan ham foyda ko'radi: kelajak uchun kuchliroq talabdan va brute-force urinishi uni hech qachon topib olmasligini ta’minlaydigan bloklashdan. Bloklash tomoni uchun javobgar modul — pam_faillock ni sozlash Root va sudo maqolasida ko'rib chiqilgan. Ikkalasi odatda muqobil sifatida emas, birga joriy qilinadi.

Amaliy vaziyat: yangi parol siyosatini joriy qilish

Muammo. Serverda hozir parol muddati ham, murakkablik talabi ham yo'q. Tashkilot quyidagini xohlaydi: kamida 3 ta belgi sinfi bilan minimal 12 belgi, oxirgi 5 ta parolni qayta ishlatmaslik va 90 kundan keyin muddat tugashi — faqat yangilariga emas, har bir akkauntga qo'llanilgan holda.

1-qadam — kelajakdagi akkauntlar uchun standartlarni o'rnatish:

sudo nano /etc/login.defs
PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_WARN_AGE   14

2-qadam — PAM darajasida sifat va tarixni majburlash:

sudo nano /etc/security/pwquality.conf
minlen = 12
minclass = 3
sudo nano /etc/pam.d/common-password
password  requisite  pam_pwquality.so retry=3
password  required   pam_pwhistory.so remember=5 use_authtok
password  [success=1 default=ignore]  pam_unix.so obscure use_authtok try_first_pass sha512

3-qadam — mavjud akkauntlarga muddatni alohida qo'llash (/etc/login.defs ning o'zi ularga tegmaydi):

sudo chage -M 90 -m 1 -W 14 existinguser

Tekshirish:

sudo chage -l existinguser
Last password change                                   : Jul 29, 2026
Password expires                                       : Oct 27, 2026
Password inactive                                       : never
Minimum number of days between password change         : 1
Maximum number of days between password change         : 90
Number of days of warning before password expires       : 14

Xulosa. Yangi siyosat parol o'zgartirishlari (sifat, tarix) uchun har bir akkauntga darhol qo'llaniladi, chunki PAM akkaunt qachon yaratilganidan qat’i nazar o'zgartirish paytida tekshiriladi. Muddat jadvalining o'zi esa mavjud akkauntlar bo'ylab alohida, aniq chage bilan o'tishni talab qildi, chunki /etc/login.defs faqat yangi akkauntlarga boshlang'ich qiymat beradi.

Keng tarqalgan xatolar

  • /etc/login.defs ni o'zgartirib, u mavjud akkauntlarga ham qo'llaniladi deb o'ylash. Yuqorida ko'rib chiqilganidek, u faqat yangi akkaunt yaratilishiga boshlang'ich qiymat beradi. Mavjud akkauntlarga chage ni aniq ishga tushirish kerak.
  • pam_pwhistory bilan birga PASS_MIN_DAYS ni 0 ga o'rnatish. Minimal muddat bo'lmasa, foydalanuvchi parolini ketma-ket besh marta o'zgartirib, darhol asl paroliga qaytishi va shu tariqa parollar tarixini chetlab o'tishi mumkin.
  • pam_faillock ni yoqmasdan qat’iy murakkablikni majburlash. Kuchli parol siyosati muvaffaqiyatli taxmin qilish ehtimolini kamaytiradi, lekin taxmin qilish urinishlarining o'zini sekinlashtirish uchun hech narsa qilmaydi.
  • root pam_pwquality ni chetlab o'tishini unutish. Kimgadir oddiy vaqtinchalik parol o'rnatib, passwd -e ni ham ishga tushirishni unutgan administrator akkauntni zaif, muddati tugamaydigan parol bilan qoldiradi.

Mashqlar

  1. Lab tizimida pwquality.conf da minlen = 12 va minclass = 3 ni o'rnating va juda qisqa ham, juda oddiy ham parolni passwd rad etishini tasdiqlang.
  2. pam_pwhistory ni remember=3 bilan yoqing, test akkauntining parolini uch marta o'zgartiring va birinchi parolni qayta ishlatishga to'rtinchi urinish rad etilishini tasdiqlang.
  3. Parollar tarixi samarali ishlashi uchun PASS_MIN_DAYS nega 0 dan katta bo'lishi kerakligini o'z so'zlaringiz bilan tushuntiring.
  4. Allaqachon mavjud akkaunt uchun /etc/login.defs da belgilangan siyosatga mos ravishda 90 kunlik maksimal muddat va 14 kunlik ogohlantirish davrini qo'llaydigan chage buyrug'ini yozing.

Xulosa

Parol siyosati uch qatlamdan iborat: pam_pwquality parol o'rnatilayotgan paytda uning kuchliligini majburlaydi, pam_pwhistory qayta ishlatishni bloklaydi, /etc/login.defs va har bir akkauntning chage qiymatlari esa vaqt o'tishi bilan muddat tugashini boshqaradi. Tizim bo'yicha standartlarni o'zgartirish mavjud akkauntlarga orqaga qarab qo'llanilmaydi. Parol kuchliligi va pam_faillock uslubidagi bloklash esa turli hujum shablonlariga qarshi qaratilgan, bir-birini to'ldiruvchi himoya vositalari. Keyingi maqola majburiy kirish nazoratiga — SELinux va AppArmor ga o'tadi. U siyosatni biror akkaunt paroli qanday ekanidan mustaqil ravishda majburlaydi.

Manbalar