6-bo‘lim
Foydalanuvchilar va guruhlar
/etc/passwd, /etc/shadow, /etc/group va ularni to'g'ri o'zgartiruvchi buyruqlar.
Ushbu bo‘lim mundarijasi
Serverda har bir odam va har bir xizmat - alohida foydalanuvchi. Bu tasodifiy emas: buzilgan xizmat faqat o'z foydalanuvchisining huquqini oladi, butun serverni emas.
Foydalanuvchi - bu raqam #
Linux uchun foydalanuvchi nomi - qulaylik. Yadro faqat UID (User ID) raqamini biladi.
# Bo'limni bir necha marta bajarish uchun avval tozalaymiz
for u in malika nodira aziza ilova; do userdel -r "$u"; done 2>/dev/null
for g in dasturchilar muharrirlar; do groupdel "$g"; done 2>/dev/null
groupadd -g 1200 dasturchilar
groupadd -g 1201 muharrirlar
useradd -u 1101 -m -s /bin/bash -c "Malika Yusupova" -g dasturchilar malika
useradd -u 1102 -m -s /bin/bash -c "Nodira Karimova" -g dasturchilar nodira
usermod -aG muharrirlar nodira
useradd --system --no-create-home --shell /usr/sbin/nologin ilova
id malika
uid=1101(malika) gid=1200(dasturchilar) groups=1200(dasturchilar)
| Qism | Ma'no |
|---|---|
uid=1101 | Foydalanuvchi raqami |
gid=1200 | Asosiy guruh - yangi fayllar shu guruhga tegishli |
groups=... | Barcha guruhlar (asosiy + qo'shimcha) |
id nodira
uid=1102(nodira) gid=1200(dasturchilar) groups=1200(dasturchilar),1201(muharrirlar)
Nodira ikkita guruhda: dasturchilar (asosiy) va muharrirlar
(qo'shimcha).
Root ni "root" nomi emas, UID 0 qiladi.
Agar /etc/passwd da UID 0 bilan ikkinchi yozuv paydo bo'lsa -
u ham to'liq root huquqiga ega bo'ladi, nomi backup yoki
support bo'lsa ham.
Bu klassik orqa eshik. Muntazam tekshiring:
awk -F: '$3 == 0 {print $1}' /etc/passwd
root
Natijada faqat root bo'lishi kerak. Boshqa nom chiqsa -
server buzilgan.
/etc/passwd - ochiq ma'lumot #
getent passwd malika
malika:x:1101:1200:Malika Yusupova:/home/malika:/bin/bash
Yettita maydon, : bilan ajratilgan:
| № | Maydon | Qiymat |
|---|---|---|
| 1 | Nom | malika |
| 2 | Parol | x - shadow faylida |
| 3 | UID | 1101 |
| 4 | GID | 1200 |
| 5 | Izoh (GECOS) | Malika Yusupova |
| 6 | Uy katalogi | /home/malika |
| 7 | Qobiq | /bin/bash |
getent passwd malika | cut -d: -f1,3,7
malika:1101:/bin/bash
cut bu yerda to'g'ri vosita3-bo'limda cut jurnal faylida buzilgandi - u yerda ajratgich
bo'shliq edi va ularning soni o'zgarardi.
/etc/passwd da esa ajratgich qat'iy : va maydonlar
soni doim ettita. Bu aynan cut uchun yaratilgan format.
Qoida esa o'sha: ajratgich qat'iy bo'lsa - cut, tekislangan
ustunlar bo'lsa - awk.
/etc/passwd ni matn muharririda tahrirlamangFayl hamma uchun o'qish mumkin, lekin uni qo'lda o'zgartirish
xavfli: bitta ortiqcha : butun tizimga kirishni buzadi.
To'g'ri vositalar:
| Vazifa | Buyruq |
|---|---|
| Foydalanuvchi qo'shish | useradd / adduser |
| O'zgartirish | usermod |
| O'chirish | userdel |
| Faylni xavfsiz tahrirlash | vipw (qulflaydi va tekshiradi) |
| Guruh faylini tahrirlash | vigr |
vipw chiqishda sintaksisni tekshiradi va xato bo'lsa
saqlamaydi. Agar hech iloji bo'lmasa - faqat shuni ishlating.
/etc/shadow - parollar #
stat -c "%a %U:%G %n" /etc/shadow
640 root:shadow /etc/shadow
Ruxsat 640 va guruh shadow - ya'ni oddiy foydalanuvchi
uni umuman o'qiy olmaydi.
getent shadow malika | cut -d: -f1,2
malika:!
! - "parol o'rnatilmagan, parol bilan kirish taqiqlangan".
Bu yangi yaratilgan hisobning normal holati.
| Belgi | Ma'no |
|---|---|
$y$... yoki $6$... | Haqiqiy parol xeshi |
! | Parol bilan kirish bloklangan |
* | Parol hech qachon o'rnatilmagan (xizmat hisobi) |
| (bo'sh) | Parolsiz kirish - juda xavfli |
Ikkinchi maydon bo'sh bo'lsa, foydalanuvchi hech qanday parolsiz kira oladi.
Buni muntazam tekshiring:
awk -F: '$2 == "" {print $1}' /etc/shadow | wc -l
0
Natija 0 bo'lishi shart. Boshqa son chiqsa - o'sha hisobni
darhol bloklang:
| Vazifa | Buyruq |
|---|---|
| Parolni bloklash | passwd -l foydalanuvchi |
| Hisobni butunlay o'chirish | usermod -L -e 1 foydalanuvchi |
| Holatni ko'rish | passwd -S foydalanuvchi |
passwd -S malika | awk '{print $1, $2, $4, $5, $6, $7}'
malika L 0 99999 7 -1
| Ustun | Ma'no |
|---|---|
L | Bloklangan (P - parol bor, NP - parolsiz) |
| (3-ustun) | Parol oxirgi marta o'zgartirilgan sana - yuqorida chiqarilmadi |
0 | Minimal kunlar (0 - istagan payt o'zgartirish mumkin) |
99999 | Maksimal kunlar (amalda - muddatsiz) |
7 | Ogohlantirish kunlari |
-1 | Nofaollik muddati (-1 - yo'q) |
Guruhlar #
getent group dasturchilar muharrirlar
dasturchilar:x:1200:
muharrirlar:x:1201:nodira
dasturchilar guruhi bo'sh ko'rinadi, garchi Malika va Nodira
ikkalasi ham unda bo'lsa.
Sabab: asosiy guruh /etc/passwd ning 4-maydonida
saqlanadi, /etc/group ning a'zolar ro'yxatida emas. Faqat
qo'shimcha a'zolik u yerga yoziladi.
Shuning uchun "guruhda kim bor?" degan savolga to'liq javob
/etc/group da yo'q. To'g'ri usul:
getent group dasturchilar | cut -d: -f4
awk -F: '$4 == 1200 {print $1}' /etc/passwd | sort
malika
nodira
Birinchi satr bo'sh - qo'shimcha a'zo yo'q. Keyingi ikkitasi -
asosiy guruhi 1200 bo'lganlar.
| Buyruq | Vazifa |
|---|---|
groupadd nom | Guruh yaratish |
usermod -aG guruh foyd | Qo'shimcha guruhga qo'shish |
usermod -g guruh foyd | Asosiy guruhni o'zgartirish |
gpasswd -d foyd guruh | Guruhdan chiqarish |
groups foyd | Foydalanuvchi guruhlari |
usermod -G va usermod -aG - bitta harf, katta farqusermod -aG muharrirlar nodira # QO'SHADI
usermod -G muharrirlar nodira # ALMASHTIRADI
Ikkinchisi Nodirani boshqa barcha qo'shimcha guruhlardan
chiqaradi. Agar u sudo guruhida bo'lgan bo'lsa - endi
emas.
Bu server administratorlarining klassik xatosi: bitta -a
tushib qolgani uchun odam o'zini sudo dan mahrum qiladi
va serverga kira olmay qoladi.
Qoida: guruh qo'shayotganda doim -aG. -G ni faqat
"ushbu ro'yxatning aynan o'zi bo'lsin" deganda ishlating.
Foydalanuvchi yaratish #
useradd -u 1103 -m -s /bin/bash -c "Aziza Tosheva" -G dasturchilar aziza
id aziza
getent passwd aziza | cut -d: -f6
uid=1103(aziza) gid=1103(aziza) groups=1103(aziza),1200(dasturchilar)
/home/aziza
| Bayroq | Vazifa |
|---|---|
-m | Uy katalogini yaratadi (-m siz - yaratmaydi) |
-s | Qobiq |
-c | Izoh (to'liq ism) |
-g | Asosiy guruh |
-G | Qo'shimcha guruhlar |
-u | Aniq UID |
-r | Tizim foydalanuvchisi (UID < 1000, uy katalogisiz) |
adduser - odam uchun, useradd - skript uchunDebian va Ubuntuda ikkita buyruq bor:
| Buyruq | Xususiyati |
|---|---|
useradd | Past darajali, hech nima so'ramaydi, -m siz uy katalogi ham yaratmaydi |
adduser | Interaktiv, parol so'raydi, uy katalogini va guruhni o'zi yaratadi |
Qo'lda ishlaganda adduser xavfsizroq - u standart qiymatlarni
to'g'ri qo'yadi. Skriptda esa useradd kerak, chunki u savol
bermaydi.
adduser faqat Debian oilasida bor. RHEL da faqat useradd.
Xizmat foydalanuvchisi #
Ilova uchun alohida foydalanuvchi yaratish - to'g'ri odat.
useradd --system --no-create-home --shell /usr/sbin/nologin ilova
getent passwd ilova | cut -d: -f7
getent passwd ilova | awk -F: '{print ($3 < 1000) ? "UID 1000 dan kichik" : "UID 1000 dan katta"}'
/usr/sbin/nologin
UID 1000 dan kichik
--system bayrog'i UID ni 1000 dan pastdagi bo'sh
raqamlardan tanladi (odatda 999 dan pastga qarab), qobiq esa
/usr/sbin/nologin bo'ldi.
Aniq raqam tizimda qaysi hisoblar bor-yo'qligiga bog'liq - shuning uchun uni yodda tutish shart emas, diapazon muhim.
su ilova -c "echo salom" 2>&1 | head -1
This account is currently not available.
nologin va /bin/false farqi| Qobiq | Kirishga urinilganda |
|---|---|
/usr/sbin/nologin | Tushunarli xabar chiqaradi va chiqadi |
/bin/false | Jimgina chiqadi (kod 1) |
Ikkalasi ham interaktiv kirishni to'xtatadi. nologin afzalroq,
chunki jurnalda nima bo'lganini tushunish oson.
Muhim: nologin faqat qobiq orqali kirishni to'xtatadi.
Qobiqni chetlab o'tadigan yo'llar qoladi:
runuser -u ilova -- echo salom
salom
Ya'ni root (yoki mos sudo qoidasiga ega foydalanuvchi) baribir
o'sha hisob nomidan buyruq bajara oladi - va bu kerak ham,
xizmat aynan shunday ishga tushiriladi (12-bo'lim).
nologin ning vazifasi - hisobga interaktiv kirishni
to'xtatish, ya'ni parol yoki SSH kaliti bilan sessiya ochishni.
Foydalanuvchini o'chirish #
| Buyruq | Natija |
|---|---|
userdel malika | Hisob o'chadi, uy katalogi qoladi |
userdel -r malika | Uy katalogi va pochta ham o'chadi |
usermod -L malika | Bloklanadi, fayllari va hisobi qoladi |
Hisobni darhol o'chirish ikkita muammo yaratadi:
- Uning fayllari egasiz qoladi (
find / -nouser); - UID qayta ishlatilsa, yangi xodim eski fayllarning egasi bo'lib qoladi.
To'g'ri tartib:
| Qadam | Buyruq |
|---|---|
| 1. Kirishni to'xtatish | usermod -L -e 1 malika |
| 2. SSH kalitlarini olib tashlash | rm ~malika/.ssh/authorized_keys |
| 3. Fayllarini ko'chirish | chown -R yangi_egasi /home/malika |
| 4. Zaxira nusxa olish | tar -czf malika.tar.gz /home/malika |
| 5. Bir necha oydan keyin o'chirish | userdel -r malika |
Ikkinchi qadamni unutmang: bloklangan hisobga ham SSH kaliti bilan kirish mumkin bo'lib qolishi mumkin (8-bo'lim).
userdel -r aziza 2>/dev/null; userdel ilova 2>/dev/null
getent passwd aziza | wc -l
0
idbilan o'zingizning UID va guruhlaringizni ko'ring.- UID 0 bo'lgan barcha hisoblarni toping - faqat
rootbo'lsin. /etc/passwdning yettita maydonini nomlab bering./etc/shadowruxsatini tekshiring - nima uchun640?- Bo'sh parolli hisoblarni qidiring.
- Ikkita guruh yarating va foydalanuvchini ikkalasiga qo'shing.
getent groupda asosiy guruh a'zolari nega ko'rinmasligini tushuntiring.usermod -Gva-aGfarqini xavfsiz muhitda sinab ko'ring.nologinqobiqli xizmat foydalanuvchisi yarating.- Xodim ketganda bajariladigan besh qadamni yozing.
Xulosa #
- Yadro uchun foydalanuvchi - bu UID raqami, nom emas.
- UID 0 = root, nomi qanday bo'lishidan qat'i nazar.
1-999tizim xizmatlari,1000+odamlar.- Har xizmatga alohida foydalanuvchi - eng kam imtiyoz tamoyili.
/etc/passwdochiq,/etc/shadowfaqat root uchun (640).!- parol bloklangan; bo'sh maydon - eshik ochiq.- Asosiy guruh
/etc/groupda ko'rinmaydi - u/etc/passwdda. usermod -aGqo'shadi,-Galmashtiradi - bu xato qimmatga tushadi.- Xizmat hisobiga
--systemvanologin. - Xodim ketganda: avval bloklang, keyin o'chiring.
Keyingi bo'limda sudo ni ko'ramiz - root huquqini cheklangan
va jurnalga yozilgan shaklda berish usuli.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.