Tarkibga o'tish

Foydalanuvchi va guruh hisoblari: passwd, shadow, useradd va guruhlar

Linux bir vaqtning o'zida bir nechta foydalanuvchining ishini bajarishga mo'ljallangan va har bir hisobning fayllari boshqalarnikidan alohida saqlanishi kerak. Bu ajratishni har bir hisobga biriktirilgan ikkita son ta’minlaydi: raqamli UID va raqamli GID. Bu modulda ko'riladigan barcha mexanizmlar — ruxsat bitlari, egalik, sudo va umask — shu hisoblar ustiga qurilgan. Shuning uchun modul aynan shu mavzudan boshlanadi.

Quyida hisob ma’lumotlari aslida qayerda saqlanishini, asosiy guruh qo'shimcha guruhdan qanday farq qilishini, tizim hisobi inson hisobidan nimasi bilan farqlanishini va useradd, usermod, groupadd hamda gpasswd buyruqlar oilasidan qanday xavfsiz foydalanishni ko'rib chiqamiz.

Warning

Quyidagi buyruqlardagi <username> va <group> kabi to'ldiriladigan joylar (placeholder) aynan yoziladigan qiymat emas — biror narsani ishga tushirishdan oldin ularni haqiqiy, tekshirilgan qiymat bilan almashtiring. < yoki > belgisi bor buyruqni shell’ga to'g'ridan-to'g'ri ko'chirib qo'ymang: bu belgilar shell’da yo'naltirish ma’nosini bildiradi. Hisob va guruh yaratish yoki o'chirish bo'yicha har bir misolni faqat bir martalik laboratoriya VM’ida bajaring.

Hisob nima va u qayerda saqlanadi

Har bir foydalanuvchi hisobi login nomi, yagona UID, asosiy guruh GID i, izoh maydoni, uy katalogi va login shell’dan iborat. Bu ma’lumotlar bir nechta oddiy matn fayllarida saqlanadi, ulardagi har bir qator ikki nuqta (:) bilan ajratilgan maydonlardan tuzilgan.

Bu fayllarni cat bilan to'g'ridan-to'g'ri o'qish o'rniga Name Service Switch (NSS) orqali ishlaydigan getent dan foydalaning. Hisob ma’lumotlari faqat lokal fayldan kelishi shart emas — ular LDAP yoki boshqa katalog xizmatidan ham kelishi mumkin. Shuning uchun lokal grep to'liq tekshiruv bo'la olmaydi.

/etc/passwd: hisobning asosiy yozuvi

getent passwd root
getent passwd "$(id -un)"

Namunaviy natija:

root:x:0:0:root:/root:/bin/bash
ali:x:1000:1000:Ali Valiyev:/home/ali:/bin/bash

Yettita maydonning ma’nosi:

# Maydon Ma’nosi
1 login nomi ls -l natijasida ko'rinadigan foydalanuvchi nomi
2 parol o'rnini egallovchi belgi x haqiqiy xesh /etc/shadow da turishini bildiradi
3 UID hisobning raqamli identifikatori
4 GID asosiy guruhning raqamli identifikatori
5 GECOS izoh, odatda to'liq ism yoki hisobning vazifasi
6 home login paytida kiriladigan katalog
7 shell login paytida ishga tushadigan dastur

Ikkinchi maydondagi x muhim tarixiy faktni eslatadi: /etc/passwd ni hamma o'qiy oladi, shuning uchun parol xeshini to'g'ridan-to'g'ri shu yerda saqlash ilgari haqiqiy xavf edi. Keyinchalik xesh faqat superuser o'qiy oladigan /etc/shadow ga ko'chirilgan.

Yettinchi maydon har doim ham interaktiv shell bo'lavermaydi. Xizmat hisoblarida u ko'pincha /usr/sbin/nologin yoki /bin/false qilib qo'yiladi. Bu shu hisob orqali interaktiv login qilishni to'sadi, lekin xizmatning shu identifikator ostida o'z jarayonini ishga tushirishiga xalaqit bermaydi.

/etc/shadow: parol va uning muddati haqidagi ma’lumotlar

/etc/shadow ni faqat root o'qiy oladi va unda parol xeshi hamda uning amal qilish muddati haqidagi ma’lumotlar saqlanadi:

sudo getent shadow "$(id -un)"

Qisqartirilgan namunaviy natija:

ali:$y$j9T$...:19950:0:99999:7:::

Ikkinchi maydon — parol xeshi. $6$ SHA-512 ni, $y$ esa yescrypt ni bildiradi; hozirgi Ubuntu va Debian yescrypt’ga o'tmoqda. Agar maydon ! yoki * bilan boshlansa, parol qulflangan va parol bilan login qilish o'chirilgan. Qolgan maydonlar oxirgi marta parol o'zgartirilgan sana, eng kam va eng ko'p muddat, ogohlantirish davri va amal qilish tugaydigan sanani o'z ichiga oladi. Ularni o'qish uchun chage qulayroq.

chage bilan parol muddatini o'qish va sozlash

/etc/shadow dagi kunlar sonini bildiruvchi xom maydonlarni qo'lda tahlil qilish xatoga moyil: ular kalendar sanasi emas, 1970-01-01 dan beri o'tgan kunlar soni sifatida saqlanadi. chage -l ularni o'qilishi oson hisobotga aylantiradi:

chage -l "$(id -un)"
Last password change                    : Jul 15, 2026
Password expires                        : never
Password inactive                       : never
Account expires                         : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

Oddiy foydalanuvchi o'z muddat ma’lumotlarini chage -l bilan o'qiy oladi; boshqa hisobnikini o'qish uchun root kerak. Siyosatni o'rnatish uchun esa sudo kerak:

sudo chage -M 90 -W 14 "$(id -un)"
sudo chage -l "$(id -un)"
  • -M 90 parolning eng uzoq amal qilish muddatini 90 kun qilib belgilaydi: shuncha kun davomida o'zgartirilmasa, parol muddati tugagan hisoblanadi.
  • -W 14 muddat tugashidan oldin 14 kunlik ogohlantirish davrini belgilaydi. Bu davrda foydalanuvchiga login paytida eslatiladi, lekin u odatdagidek tizimga kira oladi.
  • -E <YYYY-MM-DD> paroldan qat’i nazar, hisobning qat’iy tugash sanasini belgilaydi. Bu ma’lum sanadan keyin butunlay ishlamay qolishi kerak bo'lgan pudratchi yoki vaqtinchalik hisob uchun foydali — hatto parolning muddati hech qachon tugamagan bo'lsa ham.

Danger

Haqiqiy hisobning parol muddati siyosatini o'zgartirish, agar yangi -M qiymati oxirgi parol o'zgarishidan beri o'tgan vaqtdan qisqa bo'lsa, hisob egasini, jumladan administratorni ham tizimdan chiqarib qo'yishi mumkin. Avval chage -l ni tekshiring, siyosat o'zgarishini production hisobidan oldin test hisobida qo'llang va qulflanib qolishni sudo chage -M 99999 <username> bilan qaytarish kerak bo'lsa, ikkinchi autentifikatsiyalangan sessiya yoki konsolga kirish imkonini ochiq saqlang.

Login paytida foydalanuvchi aslida nimani ko'radi

Parol muddati tugagach (uning yoshi -M dan oshganda yoki hisobning o'zi -E dan o'tganda), qaysi chegaraga yetilganiga qarab xatti-harakat farq qiladi:

  • parol muddati tugagan (-M oshgan): keyingi muvaffaqiyatli autentifikatsiyada PAM sessiya davom etishidan oldin foydalanuvchini yangi parol o'rnatishga majbur qiladi. Login shunchaki xato bilan tugamaydi: "Your password has expired" xabari va parolni majburiy almashtirish so'rovi chiqadi.
  • hisob muddati tugagan (-E oshgan): login "Your account has expired" kabi xabar bilan to'g'ridan-to'g'ri rad etiladi va parol so'rovi umuman chiqmaydi. -E muddati — qat’iy to'xtash, foydalanuvchi uni o'zi hal qila olmaydi.

Bu farqning o'zi alohida intervyu savoli: "tizimga kira olmayapman" deb murojaat qilgan foydalanuvchi uchun administrator avval chage -l bilan ikkisidan qaysi biri yuz berganini tekshirishi kerak. Shundan keyingina yechim "unga yangi parol o'rnatishga ruxsat berish"mi yoki "avval hisobning o'zining tugash sanasini uzaytirish"mi ekanini hal qilish mumkin.

Danger

/etc/passwd, /etc/shadow yoki /etc/group ni oddiy matn muharririda qo'lda tahrirlamang. Bitta buzilgan qator barcha loginlarni bloklashi yoki sudo ni butunlay ishdan chiqarishi mumkin. Qo'lda tahrirlashdan qochib bo'lmasa, vipw va vigr dan foydalaning: ular faylni qulflaydi va saqlashda sintaksisini tekshiradi. Kundalik o'zgarishlar uchun esa quyida tasvirlangan useradd/usermod oilasidan foydalaning.

/etc/group va /etc/gshadow: guruhlar

getent group sudo
getent group "$(id -gn)"

Namunaviy natija:

sudo:x:27:ali,dilnoza
ali:x:1000:

To'rtta maydon: guruh nomi, parol o'rnini egallovchi belgi (x — gshadow ishlatilayotganini bildiradi), GID va vergul bilan ajratilgan a’zolar ro'yxati. E’tibor bering: ali guruhining a’zolar ro'yxati bo'sh, lekin ali hisobi baribir shu guruhda — chunki uning asosiy GID i /etc/passwd da 1000 deb yozilgan. Asosiy guruhga a’zolik a’zolar ro'yxatida takrorlanmaydi.

Asosiy va qo'shimcha guruhlar

Hisob bir vaqtda faqat bitta asosiy guruhga (primary group) va istalgancha qo'shimcha guruhlarga (supplementary group) tegishli bo'ladi. Farqni aniq ajrating:

  • Asosiy guruh /etc/passwd dagi GID maydonidan olinadi. Yangi yaratilgan fayl shu guruhga tegishli bo'ladi, faqat u setgid katalog ichida yaratilgan bo'lsa bundan mustasno.
  • Qo'shimcha guruhlar /etc/group dagi a’zolar ro'yxatidan olinadi. Ular kirish huquqini beradi, lekin yangi faylning guruhini o'zlari hal qilmaydi.

Buni bevosita ko'rish:

id
id -gn
id -Gn

Namunaviy natija:

uid=1000(ali) gid=1000(ali) groups=1000(ali),27(sudo),1004(reporters)
ali
ali sudo reporters

id -gn faqat asosiy guruhni (ali), id -Gn esa barcha guruhlarni ko'rsatadi. groups <username> ham xuddi shu ro'yxatni qaytaradi.

Note

Yangi guruhga qo'shilgan foydalanuvchi allaqachon ochiq turgan shell sessiyasida bu guruhni darhol olmaydi. Guruh a’zoligi login paytida hisoblanadi. Agar id <username> yangi guruhni ko'rsatsa-yu, joriy sessiyadagi id -Gn ko'rsatmasa, yangi login sessiyasini oching. Buni sudo chmod yoki kengroq ruxsat bilan yamab qo'ymang: haqiqiy sabab shunchaki a’zolik hali yuklanmaganida.

Agar faylni vaqtincha boshqa asosiy guruh ostida yaratish kerak bo'lsa, newgrp <group> shu guruhni asosiy qilib yangi shell ochadi; exit oldingi shell’ga qaytaradi. Bu doimiy o'zgarish emas.

Tizim hisoblari va inson hisoblari

Har bir hisob ham insonni ifodalamaydi. Veb-server, ma’lumotlar bazasi yoki boshqa ilova jarayoni o'z hisobi ostida ishlashi kerak — aks holda u root sifatida ishlaydi va hujum yuzasini keraksiz kengaytiradi. Tizim va inson hisoblari /etc/login.defs da sozlanadigan UID oralig'i bo'yicha ajratiladi:

grep -E '^(UID_MIN|UID_MAX|SYS_UID_MIN|SYS_UID_MAX|GID_MIN|GID_MAX)' /etc/login.defs

Namunaviy natija (Ubuntu/Debian):

UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN              100
SYS_UID_MAX             999
GID_MIN                  1000
GID_MAX                 60000

Inson hisoblari odatda UID 1000 dan boshlanadi; tizim hisoblari 100–999 oralig'iga tushadi. UID 0 har doim root. Bu chegara shunchaki kelishuv emas: bu useradd -r kabi vositalar qaysi oraliqdan raqam olishni hal qilish uchun o'qiydigan haqiqiy sozlama. RHEL oilasi ham xuddi shu tuzilmaga amal qiladi, lekin aniq sonlar farq qilishi mumkin, shuning uchun taxmin qilmasdan login.defs ni o'qing.

lslogins qulay umumiy ko'rinish beradi:

lslogins --user-accs
lslogins --system-accs

--user-accs inson hisoblarini, --system-accs esa tizim hisoblarini ro'yxatlaydi. lslogins util-linux paketi bilan keladi va odatda Ubuntu’da ham, RHEL oilasida ham mavjud.

Laboratoriya muhiti

Quyidagi buyruqlar tizim holatini o'zgartiradi: ular hisob va guruhlar yaratadi va o'chiradi. Ularni faqat bir martalik Ubuntu Server LTS VM’ida yoki konteynerda bajaring va keyin toza holatga qaytish uchun oldindan VM snapshot oling. Hisoblarni boshqarish superuser huquqini talab qilgani uchun bu buyruqlarga sudo kerak.

Avval boshlang'ich holatni tasdiqlang:

getent passwd deploy || echo 'deploy does not exist'
getent group reporters || echo 'reporters does not exist'

Ikkala nom ham bo'sh qaytsa, laboratoriya toza holatdan boshlanadi. Agar ulardan biri allaqachon band bo'lsa, quyidagi misollar uchun boshqa, ishlatilmagan nom tanlang.

useradd va adduser: qaysi biri va qachon

Ikki xil yondashuv bor va ularni adashtirmaslik kerak:

  • useradd: har bir distributivda mavjud past darajali buyruq. U interaktiv emas va opsiyalari aytganini aynan bajaradi — na ortiq, na kam. Skriptlar va avtomatlashtirish uchun mos.
  • adduser: Debian va Ubuntu’dagi interaktiv, yuqori darajali skript. U uy katalogini yaratadi, parol so'raydi, shaxsiy guruh sozlaydi va odatda inson hisobini qo'lda yaratish uchun qulayroq. RHEL oilasida adduser ko'pincha shunchaki useradd ga symlink bo'ladi, shuning uchun u yerda interaktiv emas.

Ikkalasi teng emas: useradd -m -s /bin/bash <name> va adduser <name> o'xshash natija berishi mumkin, lekin adduser o'zicha qo'shimcha sozlashlarni bajaradi. Ko'chma skriptda useradd dan foydalaning va qaysi xatti-harakatga tayanayotganingizni hujjatlashtiring.

useradd ning asosiy opsiyalari

Opsiya Vazifasi
-m uy katalogini yaratadi va /etc/skel shablonini nusxalaydi
-s <shell> login shell’ni belgilaydi
-c "<comment>" GECOS izohini belgilaydi
-g <group> asosiy guruhni belgilaydi
-G <g1,g2> qo'shimcha guruhlar ro'yxatini belgilaydi
-u <UID> muayyan UID ni so'raydi
-d <path> uy katalogi yo'lini belgilaydi
-r tizim hisobi sifatida yaratadi (UID tizim oralig'idan olinadi)

useradd sukut bo'yicha uy katalogini yaratmaydi, buning uchun -m kerak (ba’zi RHEL sozlamalarida CREATE_HOME sukut bo'yicha yoqilgan bo'lishi mumkin). -m bilan /etc/skel ostidagi shell konfiguratsiya fayllari yangi uy katalogiga nusxalanadi.

Inson hisobini yaratish

sudo useradd -m -s /bin/bash -c "Dilnoza Karimova" -G reporters dkarimova
getent passwd dkarimova
sudo passwd dkarimova

useradd hisobni parolsiz yaratadi, ya’ni parol bilan login qilish qulflangan holda qoladi. passwd <username> parolni o'rnatadi va parol bilan loginni ochadi. -G reporters foydalanuvchini reporters qo'shimcha guruhiga qo'shadi; bu guruh oldindan mavjud bo'lishi kerak (u quyida yaratiladi).

Tekshirish:

id dkarimova
sudo lslogins dkarimova

id UID ni hamda asosiy va qo'shimcha guruhlarni ko'rsatadi. Bu inson hisobi bo'lgani uchun UID 1000 dan katta bo'lishi kutiladi.

Tizim (xizmat) hisobini yaratish

Ilova hisobiga interaktiv login kerak emas va u tizim UID oralig'idan olinishi kerak:

sudo useradd -r -s /usr/sbin/nologin -d /var/lib/reportd -c "report daemon" reportd
getent passwd reportd

Namunaviy natija:

reportd:x:999:999:report daemon:/var/lib/reportd:/usr/sbin/nologin

-r UID ni tizim oralig'idan oladi, -s /usr/sbin/nologin esa interaktiv loginni bloklaydi. Bu yerda -m ataylab ishlatilmagan: ilova hisobiga /etc/skel dagi shell konfiguratsiya fayllari kerak emas. Agar runtime ma’lumotlari uchun katalog kerak bo'lsa, uni install -d bilan aniq egasi, guruhi va rejimini berib yarating — bu Egalik maqolasida ishlatilgan vositaning aynan o'zi.

usermod: mavjud hisobni o'zgartirish

usermod izoh, shell, asosiy guruh va qo'shimcha guruhlarni o'zgartiradi. Eng xavfli va eng ko'p noto'g'ri ishlatiladigan qismi — qo'shimcha guruhlarni o'zgartirish.

-aG: eng muhim tafsilot

sudo usermod -aG docker dkarimova
id dkarimova

-a (append — qo'shish) mavjud qo'shimcha guruhlarga qo'shadi. -a bo'lmasa, -G foydalanuvchining mavjud barcha qo'shimcha guruhlarini faqat ro'yxatda ko'rsatilganlari bilan almashtiradi. Bu kimnidir tasodifan sudo yoki boshqa muhim guruhdan chiqarib yuborishi mumkin.

Danger

Qo'shimcha guruh qo'shayotganda deyarli istisnosiz usermod -aG deb yozing. -a ni tushirib qoldirib, usermod -G docker <username> ni bajarish foydalanuvchini sudo guruhidan chiqarib, administrator huquqidan mahrum qilishi mumkin. O'zgarishdan oldin joriy guruhlarni id <username> bilan qayd eting va keyin yana tekshiring.

Boshqa foydali o'zgarishlar:

sudo usermod -c "Dilnoza K." dkarimova     # change the comment
sudo usermod -s /usr/sbin/nologin dkarimova # block the shell
sudo usermod -L dkarimova                    # lock login by password
sudo usermod -U dkarimova                    # unlock it

-L parol bilan loginni bloklash uchun parol xeshi oldiga ! qo'shadi, -U esa buni bekor qiladi. Bu SSH kalitlari yoki boshqa autentifikatsiya usullarini avtomatik yopmaydi. Maqsad hisobni butunlay o'chirib qo'yish bo'lsa, har bir kirish yo'lini alohida ko'rib chiqing.

userdel: hisobni o'chirish

sudo userdel dkarimova

Bu hisobni /etc/passwd, /etc/shadow va guruh ro'yxatlaridan olib tashlaydi, lekin uy katalogini joyida qoldiradi. Uy katalogi va pochta qutisini ham o'chirish uchun:

sudo userdel -r dkarimova

Warning

Hisobga tegishli, uy katalogidan tashqaridagi fayllar (masalan, /srv yoki /var ostidagilar) o'chirilmaydi va ularning UID i endi hech qanday nomga mos kelmaydi. Agar keyinroq shu UID boshqa hisobga berilsa, eski fayllar yangi hisobga tegishlidek ko'rinishi mumkin. Shu sababli hisobni o'chirishdan oldin uning fayllarini tekshiring: sudo find / -xdev -uid <UID> -printf '%p\n'. Uy katalogini -r bilan o'chirishdan oldin uning ichida muhim ma’lumot qolmaganini tasdiqlang — bu qadamni ortga qaytarib bo'lmaydi.

Guruhlarni boshqarish

Guruh buyruqlari hisob buyruqlariga o'xshaydi:

sudo groupadd reporters
sudo groupadd -g 2500 db
getent group reporters db

-g muayyan GID ni so'raydi; usiz groupadd navbatdagi bo'sh GID ni avtomatik tanlaydi. Guruh xususiyatlarini o'zgartirish:

sudo groupmod -n analysts reporters   # rename
sudo groupmod -g 2600 db              # change the GID

Guruhni o'chirish:

sudo groupdel db

Guruh hali biror foydalanuvchining asosiy guruhi bo'lib turgan paytda uni o'chirib bo'lmaydi — avval o'sha foydalanuvchining asosiy guruhini o'zgartiring.

gpasswd: a’zolikni aniq boshqarish

gpasswd guruh a’zolarini aniq boshqarish usuli:

sudo gpasswd -a dkarimova reporters   # add one user
sudo gpasswd -d dkarimova reporters   # remove one user
sudo gpasswd -M ali,dkarimova reporters # set the full member list
getent group reporters

gpasswd -a ham xuddi usermod -aG kabi bitta a’zolik qo'shadi, lekin u faqat bitta guruhga qaratilgani uchun, -a siz -G kabi boshqa guruhlarga tasodifan ta’sir qila olmaydi. gpasswd -M esa butun ro'yxatni almashtiradi — uni ishlatishdan oldin joriy a’zolarni getent group bilan qayd eting.

Amaliy vaziyat: xizmat hisobi va jamoa guruhi

Talab: reportd xizmati o'z hisobi ostida ishlaydi; reporters guruhidagi bir nechta inson hisobi hisobot fayllarini o'qiy va yoza oladi; yangi fayllar avtomatik ravishda reporters guruhini oladi va guruh ularga yoza oladi. Bu vaziyat useradd, groupadd, setgid va umask ni bitta amaliy vazifada birlashtiradi.

Buni faqat snapshot olingandan keyin, laboratoriya VM’ida bajaring.

1. Guruh va xizmat hisobini yarating

sudo groupadd reporters
sudo useradd -r -s /usr/sbin/nologin -d /var/lib/reportd -g reportd \
    -G reporters reportd 2>/dev/null || \
    sudo useradd -r -s /usr/sbin/nologin -d /var/lib/reportd \
    -G reporters reportd
getent group reporters
id reportd

Birinchi urinish asosiy guruh sifatida alohida reportd guruhini belgilaydi. Agar u hali mavjud bo'lmasa, useradd -r odatda foydalanuvchi uchun xuddi shu nomli guruhni avtomatik yaratadi — shuning uchun ikkinchi shakl zaxira variant sifatida qo'shilgan. Har ikki holatda ham reportd reporters qo'shimcha guruhiga tushadi.

2. setgid bilan umumiy katalog

sudo install -d -o root -g reporters -m 2775 /srv/reports
stat -c '%A %a %U:%G %n' /srv/reports

install -d katalogni aniq egasi, guruhi va rejimi bilan yaratadi. 2775 dagi 2 — setgid: yangi fayllar reporters guruhini meros qilib oladi. 775 esa guruh a’zolariga yozish huquqini beradi. setgid va guruhning yozish huquqi o'rtasidagi farq Maxsus ruxsatlar maqolasida ko'rib chiqilgan.

3. Guruhning yozish huquqini umask bilan kafolatlash

setgid guruhni meros qilib beradi, lekin yangi faylga guruh haqiqatan yoza oladimi-yo'qmi, umask ga bog'liq. Guruh a’zolari ham, xizmat ham umask 0002 bilan ishlashi kerak. Inson a’zolari uchun bu ko'pincha allaqachon sukut bo'yicha shunday; xizmat uchun esa uni unit faylida belgilang:

sudo systemctl edit reportd.service

Muharrirga quyidagini qo'shing:

[Service]
UMask=0002

umask va setgid qanday birga ishlashi umask maqolasida batafsil ko'rib chiqilgan.

4. Tekshirish

sudo -u reportd -- sh -c 'umask; : > /srv/reports/probe.txt'
stat -c '%A %a %U:%G %n' /srv/reports/probe.txt
sudo rm -i -- /srv/reports/probe.txt

probe.txt reporters guruhida va 0664 rejimida bo'lishi kutiladi: guruhni setgid berdi, umask 0002 esa guruhning yozish huquqini joyida qoldirdi. Bu tekshiruv fayl mazmunini emas, faqat metama’lumotlarni ko'radi.

5. Rollback

Laboratoriyada eng ishonchli rollback — VM snapshot’ga qaytish. Qo'lda tozalash uchun:

sudo userdel -r reportd
sudo groupdel reporters
sudo rm -rI -- /srv/reports

Avval userdel -r ni, keyin guruhni o'chiring. /srv/reports ni o'chirishdan oldin stat bilan u faqat laboratoriya katalogi ekanini tasdiqlang.

Keng tarqalgan xatolar

usermod -G dan -a ni tushirib qoldirish

usermod -G <group> mavjud qo'shimcha guruhlarni almashtiradi. Guruh qo'shayotganda usermod -aG deb yozing, aks holda foydalanuvchini sudo yoki boshqa muhim guruhdan chiqarib yuborish xavfi bor.

passwd faylini qo'lda tahrirlash

Oddiy matn muharriridagi bitta xato login yoki sudo ni butunlay buzishi mumkin. useradd/usermod oilasidan yoki faylni qulflaydigan vipw/vigr vositalaridan foydalaning.

Hisobni o'chirib, uning fayllarini unutish

userdel uy katalogidan tashqaridagi fayllarni joyida qoldiradi va agar UID qayta ishlatilsa, ular yangi hisobga tegishlidek ko'rinishi mumkin. O'chirishdan oldin find -uid <UID> bilan tekshiring.

Tizim va inson hisoblarini aralashtirish

Ilova hisobiga interaktiv shell va parol berish keraksiz hujum yuzasini ochadi. Xizmatlar uchun -r va nologin dan foydalaning; inson hisoblariga esa mos shell va parol bering.

Asosiy va qo'shimcha guruhlarni adashtirish

Yangi faylning guruhi qo'shimcha guruhdan emas, asosiy guruhdan (yoki setgid katalogdan) olinadi. Qo'shimcha guruh qo'shish "fayllar noto'g'ri guruhda yaratilyapti" muammosini hal qilmaydi.

Guruh a’zoligi darhol kuchga kiradi deb kutish

Yangi guruh allaqachon ochiq turgan sessiyaga ta’sir qilmaydi. Agar id yangi a’zolikni ko'rsatsa-yu, joriy shell ko'rsatmasa, yangi login sessiyasini oching — buni sudo yoki kengroq ruxsat bilan aylanib o'tmang.

Raqamli UID/GID ga nomini tekshirmasdan ishonish

UID 1001 bir hostda ali, boshqasida deploy bo'lishi mumkin. Hisob yoki guruh yaratishdan yoki chown ni bajarishdan oldin, Egalik maqolasida ko'rsatilganidek, moslikni getent bilan tekshiring.

Mashqlar

  1. getent passwd "$(id -un)" va getent group "$(id -gn)" dagi har bir maydonni ro'yxatlang va har biri nimani anglatishini yozing.
  2. id, id -gn va id -Gn natijalaridan asosiy guruhni qo'shimcha guruhlardan ajrating. Yangi faylning guruhini qaysi biri hal qilishini tushuntiring.
  3. Laboratoriya VM’ida bitta inson hisobi va bitta xizmat hisobi yarating. getent passwd yordamida UID oralig'i, uy katalogi va shell’ni solishtiring.
  4. Foydalanuvchini usermod -aG bilan qo'shimcha guruhga qo'shing, so'ng gpasswd -d bilan chiqaring. Har bir qadamdan keyin id va getent group natijasini qayd eting. -a siz -G ni haqiqiy hisobda sinab ko'rmang.
  5. setgid katalog, reporters guruhi va umask 0002 ni birlashtirib, yangi fayl reporters guruhida 0664 rejimi bilan yaratilishini isbotlang. Har bir komponent — asosiy guruh, setgid, umask — natijaga qanday hissa qo'shganini alohida ko'rsating.

Mashqni bajardim deyish uchun: har bir javobda faqat nomni emas, UID/GID raqamini ko'rsating, asosiy guruhni qo'shimcha guruhdan ajrating va faylning guruhi aynan qayerdan kelganini aniqlang.

Laboratoriyani tugatgach, VM snapshot’ga qayting yoki yaratilgan hisob va guruhlarni yuqoridagi rollback qadamlari bilan tozalang. Tozalashdan oldin maqsadni tekshiring:

getent passwd reportd
getent group reporters

Manbalar

  • Linux man-pages: passwd(5): https://man7.org/linux/man-pages/man5/passwd.5.html
  • Linux man-pages: shadow(5): https://man7.org/linux/man-pages/man5/shadow.5.html
  • Linux man-pages: group(5): https://man7.org/linux/man-pages/man5/group.5.html
  • Linux man-pages: login.defs(5): https://man7.org/linux/man-pages/man5/login.defs.5.html
  • Linux man-pages: useradd(8): https://man7.org/linux/man-pages/man8/useradd.8.html
  • Linux man-pages: usermod(8): https://man7.org/linux/man-pages/man8/usermod.8.html
  • Linux man-pages: userdel(8): https://man7.org/linux/man-pages/man8/userdel.8.html
  • Linux man-pages: groupadd(8): https://man7.org/linux/man-pages/man8/groupadd.8.html
  • Linux man-pages: gpasswd(1): https://man7.org/linux/man-pages/man1/gpasswd.1.html
  • Debian qo'llanmasi: adduser(8): https://manpages.debian.org/stable/adduser/adduser.8.en.html
  • Linux man-pages: chage(1): https://man7.org/linux/man-pages/man1/chage.1.html