5-bo‘lim

Egalik va maxsus bitlar

chown, chgrp va uchta maxsus bit - setuid, setgid va sticky - ular nima uchun kerak va qachon xavfli.

🕑 18 daqiqa o‘qish 📄 1 204 so‘z 👁 1 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Har faylning egasi va guruhi bor
  2. chown va chgrp
  3. Veb-sayt uchun to'g'ri egalik
  4. Uchta maxsus bit
  5. setuid - passwd sirining javobi
  6. setgid katalogda - guruh merosi
  7. sticky bit - /tmp ning siri
  8. To'rt raqamli oktal
  9. Xulosa

Oldingi bo'limda qanday ruxsat borligini ko'rdik. Endi kimga tegishli ekanini ko'ramiz - va uchta maxsus bitni, ular ruxsat tizimining qoidalarini o'zgartiradi.

Har faylning egasi va guruhi bor #

Terminal
mkdir -p sayt/yuklamalar
echo "<h1>Salom</h1>" > sayt/index.html
echo "parol=maxfiy" > sayt/.env
chown -R root:root sayt
chmod 755 sayt sayt/yuklamalar
chmod 644 sayt/index.html
chmod 600 sayt/.env
Terminal
stat -c "%U:%G %a %n" sayt sayt/index.html sayt/.env
Natija
root:root 755 sayt
root:root 644 sayt/index.html
root:root 600 sayt/.env

Linux ruxsatni tekshirganda birinchi mos keladigan guruhni oladi va boshqasiga qaramaydi:

Yadro ruxsatni qanday tekshiradi So'rov: faylni ochish UID fayl egasiga tengmi? ha EGA bitlarini qo'lla yo'q GID guruhlaringiz orasidami? ha GURUH bitlarini qo'lla yo'q BOSHQALAR bitlarini qo'lla Tekshiruv birinchi moslikda TO'XTAYDI - keyingi bosqichga o'tmaydi
Ega bo'lsangiz, guruh ruxsati sizga umuman qo'llanmaydi
Ega bo'lish - ba'zan kamroq huquq degani

Faraz qiling, fayl ----rwx--- (070) ruxsatiga ega va siz uning egasisiz, hamda guruhida ham turibsiz.

Faylni o'qiy olasizmi? Yo'q.

Chunki yadro sizni ega deb topdi va ega bitlariga qaradi - ular esa bo'sh. Guruh bitlariga u umuman qaramaydi.

Bu qoida g'alati tuyuladi, lekin u tezlik uchun: yadro har so'rovda bir necha marta tekshirish o'rniga bittasini bajaradi.

Amaliy xulosa: egadan ruxsatni olib tashlamang. chmod 077 kabi qiymatlar deyarli har doim xato.

chown va chgrp #

Terminal
chown www-data:www-data sayt/index.html
stat -c "%U:%G %n" sayt/index.html
Natija
www-data:www-data sayt/index.html
BuyruqNima o'zgaradi
chown husanboy faylFaqat egasi
chown husanboy:dasturchilar faylEgasi va guruhi
chown :dasturchilar faylFaqat guruhi
chgrp dasturchilar faylFaqat guruhi (bir xil)
chown -R ...Butun katalog daraxti
Terminal
chgrp www-data sayt/.env
stat -c "%U:%G %a %n" sayt/.env
Natija
root:www-data 600 sayt/.env
chown faqat root uchun

Oddiy foydalanuvchi o'z faylini boshqa odamga hadya qila olmaydi. Buni faqat root bajaradi.

Sabab - disk kvotasidan qochishning oldini olish: aks holda har kim o'z fayllarini boshqaning nomiga o'tkazib, cheksiz joy egallardi.

Guruhni o'zgartirish esa mumkin - agar siz o'sha guruh a'zosi bo'lsangiz.

Veb-sayt uchun to'g'ri egalik #

Bu eng ko'p uchraydigan amaliy vazifa. Uchta ishtirokchi bor: siz (fayllarni tahrirlaysiz), veb-server (www-data, fayllarni o'qiydi) va boshqalar (hech nima ko'rmasligi kerak).

Terminal
chown -R root:www-data sayt
find sayt -type d -exec chmod 750 {} +
find sayt -type f -exec chmod 640 {} +
chmod 660 sayt/yuklamalar 2>/dev/null; chmod 770 sayt/yuklamalar
stat -c "%U:%G %a %n" sayt sayt/index.html sayt/yuklamalar
Natija
root:www-data 750 sayt
root:www-data 640 sayt/index.html
root:www-data 770 sayt/yuklamalar
Ob'ektRuxsatNima uchun
Kataloglar750www-data kiradi, boshqalar yo'q
Fayllar640www-data o'qiydi, yozmaydi
Yuklamalar katalogi770www-data yozishi kerak
.env640 yoki 600Iloji bo'lsa - 600
Nima uchun veb-server fayllarga yoza olmasligi kerak

Agar www-data sayt fayllariga yoza olsa, saytdagi bitta zaiflik hujumchiga kodni o'zgartirish imkonini beradi.

640 bilan esa hujumchi eng ko'pi bilan o'qiy oladi - bu ham yomon, lekin ancha kam yomon.

Faqat yuklamalar katalogiga yozish huquqini bering, va u yerda PHP ni ishga tushirishni Nginx darajasida taqiqlang (17-bo'lim).

Uchta maxsus bit #

Ruxsat aslida uch emas, to'rt raqamdan iborat. Birinchisi - maxsus bitlar.

BitQiymatFayldaKatalogda
setuid4Egasi huquqida ishlaydi(ta'sir yo'q)
setgid2Guruhi huquqida ishlaydiGuruh meros bo'ladi
sticky1(ta'sir yo'q)Faqat egasi o'chiradi

setuid - passwd sirining javobi #

Terminal
stat -c "%A %U:%G %n" /usr/bin/passwd
Natija
-rwsr-xr-x root:root /usr/bin/passwd

Egasi bitlarida x o'rniga s turibdi. Bu setuid.

passwd parolni /etc/shadow ga yozadi, u fayl esa faqat root uchun ochiq. Oddiy foydalanuvchi qanday qilib parolini o'zgartiradi? setuid tufayli: dastur ishga tushganda egasining (root ning) huquqini oladi.

setuid - hujumchining birinchi qidiradigan narsasi

Agar setuid root dastur zaiflikka ega bo'lsa, hujumchi root huquqini oladi.

Shu sababli:

QoidaSabab
Hech qachon o'z skriptingizga setuid qo'ymangSkriptlarda bu ishlamaydi va xavfli
Yangi setuid fayl paydo bo'lsa - tekshiringBu buzilish belgisi
Kerak bo'lmasa - sudo ishlatingsudo jurnalga yozadi va cheklanadi

Tizimdagi barcha setuid fayllarni sanash:

Terminal
find /usr/bin -perm -4000 -type f -printf "%f
" | sort | head -4
Natija
chfn
chsh
fusermount3
gpasswd

Ubuntu Server da bunday fayllar odatda o'ntacha bo'ladi. Tekshiruv tizimimizda (Kali) ancha ko'p - 24 ta, chunki unda tarmoq vositalari o'rnatilgan.

Muhimi son emas, o'zgarish: bu ro'yxatni birinchi kuni saqlang va keyingi tekshiruvda diff bilan solishtiring. Yangi setuid fayl paydo bo'lishi - nima uchun ekanini bilishingiz kerak bo'lgan hodisa.

setgid katalogda - guruh merosi #

Bu jamoaviy ish uchun eng foydali bit.

Terminal
mkdir -p jamoa
chgrp www-data jamoa
chmod 2775 jamoa
touch jamoa/hisobot.txt
stat -c "%a %U:%G %n" jamoa jamoa/hisobot.txt
Natija
2775 root:www-data jamoa
644 root:www-data jamoa/hisobot.txt

hisobot.txt ni root yaratdi, lekin uning guruhi root emas, www-data bo'ldi - u katalogdan meros oldi.

setgid siz jamoaviy katalog ishlamaydi

setgid bo'lmasa, har kim o'z asosiy guruhi bilan fayl yaratadi:

Kim yaratdisetgid siz guruhsetgid bilan
husanboyhusanboydasturchilar
malikamalikadasturchilar

Birinchi holatda Malika Husanboyning faylini o'qiy olmaydi - guruh mos kelmaydi.

Shuning uchun umumiy loyiha katalogi uchun ibora shunday:

Terminal
chgrp -R dasturchilar /srv/loyiha
chmod -R g+w /srv/loyiha
find /srv/loyiha -type d -exec chmod g+s {} +

Oxirgi satr - barcha kataloglarga setgid qo'yadi, shunda kelajakda yaratiladigan fayllar ham guruhni meros oladi.

sticky bit - /tmp ning siri #

Terminal
stat -c "%a %A %U:%G %n" /tmp
Natija
1777 drwxrwxrwt root:root /tmp

Oxirgi belgi x emas, t. Bu sticky bit.

/tmp 777 - ya'ni hamma yozadi. Oldingi bo'limda o'rgangan qoidaga ko'ra, katalogga yozish huquqi bo'lgan har kim ichidagi istalgan faylni o'chira oladi.

Sticky bit aynan shuni to'xtatadi: t qo'yilgan katalogda faylni faqat uning egasi (yoki katalog egasi, yoki root) o'chira oladi.

Terminal
mkdir -p umumiy && chmod 1777 umumiy
stat -c "%a %A %n" umumiy
Natija
1777 drwxrwxrwt umumiy
t va T, s va S

Agar x bit ham bo'lsa - kichik harf (s, t). Agar x bit bo'lmasa - katta harf (S, T).

Terminal
mkdir -p sinov_S && chmod 2755 sinov_S && chmod g-x sinov_S
stat -c "%a %A %n" sinov_S
Natija
2745 drwxr-Sr-x sinov_S

Katta S - "setgid qo'yilgan, lekin x yo'q". Bu deyarli har doim xato belgisi: setgid katalogda x siz ishlamaydi.

Shuning uchun ls -l chiqishida katta S yoki T ko'rsangiz - to'xtab tekshiring.

To'rt raqamli oktal #

Terminal
mkdir -p t1 t2 t3
chmod 4755 t1; chmod 2755 t2; chmod 1777 t3
stat -c "%04a %A %n" t1 t2 t3
Natija
4755 drwsr-xr-x t1
2755 drwxr-sr-x t2
1777 drwxrwxrwt t3
OktalBitOdatda qayerda
4755setuid/usr/bin/passwd, /usr/bin/sudo
2775setgidJamoaviy loyiha katalogi
1777sticky/tmp, /var/tmp
0644hech biriOddiy fayl
Maxsus bitlarni tekshirishni odat qiling

Serverda muntazam bajariladigan tekshiruv:

BuyruqNima qidiradi
find / -perm -4000 -type f 2>/dev/nullBarcha setuid fayllar
find / -perm -2000 -type f 2>/dev/nullBarcha setgid fayllar
find / -perm -0002 -type f 2>/dev/nullHamma yoza oladigan fayllar
find / -nouser -o -nogroup 2>/dev/nullEgasiz fayllar

Oxirgi ikkitasi ayniqsa muhim: "hamma yoza oladigan" fayl - bu ochiq eshik, "egasiz" fayl esa o'chirilgan foydalanuvchidan qolgan iz.

Bu buyruqlarni birinchi kuni ishga tushiring va natijani saqlang. Keyingi tekshiruvlarda diff bilan solishtirasiz.

Amaliy topshiriq
  1. stat -c "%U:%G" bilan bir necha faylning egasini ko'ring.
  2. chown va chgrp farqini amalda sinang.
  3. Veb-sayt katalogiga 750/640 naqshini qo'llang.
  4. find ... -exec chmod bilan fayl va katalogni ajratib sozlang.
  5. /usr/bin/passwd dagi s ni toping va nima uchun kerakligini tushuntiring.
  6. Tizimdagi barcha setuid fayllarni sanang va ro'yxatini saqlang.
  7. setgid katalog yarating va guruh merosini tekshiring.
  8. /tmp dagi t ni toping va sticky bit vazifasini tushuntiring.
  9. chmod 2755 keyin g-x qiling - S ni ko'ring va sababini ayting.
  10. "Hamma yoza oladigan" fayllarni qidiring.

Xulosa #

  • Yadro birinchi mos keladigan toifada to'xtaydi: ega → guruh → boshqalar.
  • Egadan ruxsat olib tashlash - deyarli har doim xato.
  • chown faqat root uchun; guruhni a'zo bo'lsangiz o'zgartira olasiz.
  • Sayt uchun naqsh: katalog 750, fayl 640, egasi root:www-data.
  • Veb-server sayt fayllariga yozmasligi kerak.
  • setuid (s) - dastur egasi huquqida ishlaydi; passwd shunday ishlaydi.
  • setuid ro'yxatini saqlang - yangisi paydo bo'lishi buzilish belgisi.
  • setgid katalogda - yangi fayllar guruhni meros oladi.
  • sticky (t) - /tmp da har kim yozadi, lekin faqat o'zinikini o'chiradi.
  • Katta S yoki T - x yo'qligini bildiradi, odatda xato.

Keyingi bo'limda foydalanuvchi va guruhlarni yaratamiz - /etc/passwd, /etc/shadow va useradd.

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.