6-bo‘lim

Foydalanuvchilar va guruhlar

/etc/passwd, /etc/shadow, /etc/group va ularni to'g'ri o'zgartiruvchi buyruqlar.

🕑 23 daqiqa o‘qish 📄 1 440 so‘z 👁 1 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Foydalanuvchi - bu raqam
  2. /etc/passwd - ochiq ma'lumot
  3. /etc/shadow - parollar
  4. Guruhlar
  5. Foydalanuvchi yaratish
  6. Xizmat foydalanuvchisi
  7. Foydalanuvchini o'chirish
  8. Xulosa

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.

Terminal
# 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
Terminal
id malika
Natija
uid=1101(malika) gid=1200(dasturchilar) groups=1200(dasturchilar)
QismMa'no
uid=1101Foydalanuvchi raqami
gid=1200Asosiy guruh - yangi fayllar shu guruhga tegishli
groups=...Barcha guruhlar (asosiy + qo'shimcha)
Terminal
id nodira
Natija
uid=1102(nodira) gid=1200(dasturchilar) groups=1200(dasturchilar),1201(muharrirlar)

Nodira ikkita guruhda: dasturchilar (asosiy) va muharrirlar (qo'shimcha).

UID diapazonlari - kim qayerda yashaydi 0 root Barcha tekshiruvlar chetlab o'tiladi - cheklov yo'q 1-999 tizim www-data, mysql, sshd - kirish huquqisiz xizmatlar 1000+ odamlar husanboy, malika, nodira - haqiqiy foydalanuvchilar 65534 nobody Hech qanday huquqi bo'lmasligi kerak bo'lgan jarayonlar Nima uchun har xizmat alohida foydalanuvchi Nginx buzilsa - hujumchi www-data bo'ladi, root emas. U MySQL ma'lumotiga ham, boshqa foydalanuvchi fayllariga ham yeta olmaydi. Bu - "eng kam imtiyoz" (least privilege) tamoyili.
UID raqami foydalanuvchining turini ham aytadi
UID 0 - bu root, nomi qanday bo'lishidan qat'i nazar

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:

Terminal
awk -F: '$3 == 0 {print $1}' /etc/passwd
Natija
root

Natijada faqat root bo'lishi kerak. Boshqa nom chiqsa - server buzilgan.

/etc/passwd - ochiq ma'lumot #

Terminal
getent passwd malika
Natija
malika:x:1101:1200:Malika Yusupova:/home/malika:/bin/bash

Yettita maydon, : bilan ajratilgan:

MaydonQiymat
1Nommalika
2Parolx - shadow faylida
3UID1101
4GID1200
5Izoh (GECOS)Malika Yusupova
6Uy katalogi/home/malika
7Qobiq/bin/bash
Terminal
getent passwd malika | cut -d: -f1,3,7
Natija
malika:1101:/bin/bash
Nima uchun cut bu yerda to'g'ri vosita

3-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 tahrirlamang

Fayl hamma uchun o'qish mumkin, lekin uni qo'lda o'zgartirish xavfli: bitta ortiqcha : butun tizimga kirishni buzadi.

To'g'ri vositalar:

VazifaBuyruq
Foydalanuvchi qo'shishuseradd / adduser
O'zgartirishusermod
O'chirishuserdel
Faylni xavfsiz tahrirlashvipw (qulflaydi va tekshiradi)
Guruh faylini tahrirlashvigr

vipw chiqishda sintaksisni tekshiradi va xato bo'lsa saqlamaydi. Agar hech iloji bo'lmasa - faqat shuni ishlating.

/etc/shadow - parollar #

Terminal
stat -c "%a %U:%G %n" /etc/shadow
Natija
640 root:shadow /etc/shadow

Ruxsat 640 va guruh shadow - ya'ni oddiy foydalanuvchi uni umuman o'qiy olmaydi.

Terminal
getent shadow malika | cut -d: -f1,2
Natija
malika:!

! - "parol o'rnatilmagan, parol bilan kirish taqiqlangan". Bu yangi yaratilgan hisobning normal holati.

BelgiMa'no
$y$... yoki $6$...Haqiqiy parol xeshi
!Parol bilan kirish bloklangan
*Parol hech qachon o'rnatilmagan (xizmat hisobi)
(bo'sh)Parolsiz kirish - juda xavfli
Bo'sh parol maydoni - eshik ochiq

Ikkinchi maydon bo'sh bo'lsa, foydalanuvchi hech qanday parolsiz kira oladi.

Buni muntazam tekshiring:

Terminal
awk -F: '$2 == "" {print $1}' /etc/shadow | wc -l
Natija
0

Natija 0 bo'lishi shart. Boshqa son chiqsa - o'sha hisobni darhol bloklang:

VazifaBuyruq
Parolni bloklashpasswd -l foydalanuvchi
Hisobni butunlay o'chirishusermod -L -e 1 foydalanuvchi
Holatni ko'rishpasswd -S foydalanuvchi
Terminal
passwd -S malika | awk '{print $1, $2, $4, $5, $6, $7}'
Natija
malika L 0 99999 7 -1
UstunMa'no
LBloklangan (P - parol bor, NP - parolsiz)
(3-ustun)Parol oxirgi marta o'zgartirilgan sana - yuqorida chiqarilmadi
0Minimal kunlar (0 - istagan payt o'zgartirish mumkin)
99999Maksimal kunlar (amalda - muddatsiz)
7Ogohlantirish kunlari
-1Nofaollik muddati (-1 - yo'q)

Guruhlar #

Terminal
getent group dasturchilar muharrirlar
Natija
dasturchilar:x:1200:
muharrirlar:x:1201:nodira
Asosiy guruh a'zolar ro'yxatida ko'rinmaydi

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:

Terminal
getent group dasturchilar | cut -d: -f4
awk -F: '$4 == 1200 {print $1}' /etc/passwd | sort
Natija

malika
nodira

Birinchi satr bo'sh - qo'shimcha a'zo yo'q. Keyingi ikkitasi - asosiy guruhi 1200 bo'lganlar.

BuyruqVazifa
groupadd nomGuruh yaratish
usermod -aG guruh foydQo'shimcha guruhga qo'shish
usermod -g guruh foydAsosiy guruhni o'zgartirish
gpasswd -d foyd guruhGuruhdan chiqarish
groups foydFoydalanuvchi guruhlari
usermod -G va usermod -aG - bitta harf, katta farq
Terminal
usermod -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 #

Terminal
useradd -u 1103 -m -s /bin/bash -c "Aziza Tosheva" -G dasturchilar aziza
id aziza
getent passwd aziza | cut -d: -f6
Natija
uid=1103(aziza) gid=1103(aziza) groups=1103(aziza),1200(dasturchilar)
/home/aziza
BayroqVazifa
-mUy katalogini yaratadi (-m siz - yaratmaydi)
-sQobiq
-cIzoh (to'liq ism)
-gAsosiy guruh
-GQo'shimcha guruhlar
-uAniq UID
-rTizim foydalanuvchisi (UID < 1000, uy katalogisiz)
adduser - odam uchun, useradd - skript uchun

Debian va Ubuntuda ikkita buyruq bor:

BuyruqXususiyati
useraddPast darajali, hech nima so'ramaydi, -m siz uy katalogi ham yaratmaydi
adduserInteraktiv, 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.

Terminal
useradd --system --no-create-home --shell /usr/sbin/nologin ilova
Terminal
getent passwd ilova | cut -d: -f7
getent passwd ilova | awk -F: '{print ($3 < 1000) ? "UID 1000 dan kichik" : "UID 1000 dan katta"}'
Natija
/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.

Terminal
su ilova -c "echo salom" 2>&1 | head -1
Natija
This account is currently not available.
nologin va /bin/false farqi
QobiqKirishga urinilganda
/usr/sbin/nologinTushunarli xabar chiqaradi va chiqadi
/bin/falseJimgina 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:

Terminal
runuser -u ilova -- echo salom
Natija
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 #

BuyruqNatija
userdel malikaHisob o'chadi, uy katalogi qoladi
userdel -r malikaUy katalogi va pochta ham o'chadi
usermod -L malikaBloklanadi, fayllari va hisobi qoladi
Xodim ketganda: o'chirish emas, bloklash

Hisobni darhol o'chirish ikkita muammo yaratadi:

  1. Uning fayllari egasiz qoladi (find / -nouser);
  2. UID qayta ishlatilsa, yangi xodim eski fayllarning egasi bo'lib qoladi.

To'g'ri tartib:

QadamBuyruq
1. Kirishni to'xtatishusermod -L -e 1 malika
2. SSH kalitlarini olib tashlashrm ~malika/.ssh/authorized_keys
3. Fayllarini ko'chirishchown -R yangi_egasi /home/malika
4. Zaxira nusxa olishtar -czf malika.tar.gz /home/malika
5. Bir necha oydan keyin o'chirishuserdel -r malika

Ikkinchi qadamni unutmang: bloklangan hisobga ham SSH kaliti bilan kirish mumkin bo'lib qolishi mumkin (8-bo'lim).

Terminal
userdel -r aziza 2>/dev/null; userdel ilova 2>/dev/null
getent passwd aziza | wc -l
Natija
0
Amaliy topshiriq
  1. id bilan o'zingizning UID va guruhlaringizni ko'ring.
  2. UID 0 bo'lgan barcha hisoblarni toping - faqat root bo'lsin.
  3. /etc/passwd ning yettita maydonini nomlab bering.
  4. /etc/shadow ruxsatini tekshiring - nima uchun 640?
  5. Bo'sh parolli hisoblarni qidiring.
  6. Ikkita guruh yarating va foydalanuvchini ikkalasiga qo'shing.
  7. getent group da asosiy guruh a'zolari nega ko'rinmasligini tushuntiring.
  8. usermod -G va -aG farqini xavfsiz muhitda sinab ko'ring.
  9. nologin qobiqli xizmat foydalanuvchisi yarating.
  10. 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-999 tizim xizmatlari, 1000+ odamlar.
  • Har xizmatga alohida foydalanuvchi - eng kam imtiyoz tamoyili.
  • /etc/passwd ochiq, /etc/shadow faqat root uchun (640).
  • ! - parol bloklangan; bo'sh maydon - eshik ochiq.
  • Asosiy guruh /etc/group da ko'rinmaydi - u /etc/passwd da.
  • usermod -aG qo'shadi, -G almashtiradi - bu xato qimmatga tushadi.
  • Xizmat hisobiga --system va nologin.
  • Xodim ketganda: avval bloklang, keyin o'chiring.

Keyingi bo'limda sudo ni ko'ramiz - root huquqini cheklangan va jurnalga yozilgan shaklda berish usuli.

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.