5-bo‘lim
Egalik va maxsus bitlar
chown, chgrp va uchta maxsus bit - setuid, setgid va sticky - ular nima uchun kerak va qachon xavfli.
Ushbu bo‘lim mundarijasi
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 #
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
stat -c "%U:%G %a %n" sayt sayt/index.html sayt/.env
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:
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 #
chown www-data:www-data sayt/index.html
stat -c "%U:%G %n" sayt/index.html
www-data:www-data sayt/index.html
| Buyruq | Nima o'zgaradi |
|---|---|
chown husanboy fayl | Faqat egasi |
chown husanboy:dasturchilar fayl | Egasi va guruhi |
chown :dasturchilar fayl | Faqat guruhi |
chgrp dasturchilar fayl | Faqat guruhi (bir xil) |
chown -R ... | Butun katalog daraxti |
chgrp www-data sayt/.env
stat -c "%U:%G %a %n" sayt/.env
root:www-data 600 sayt/.env
chown faqat root uchunOddiy 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).
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
root:www-data 750 sayt
root:www-data 640 sayt/index.html
root:www-data 770 sayt/yuklamalar
| Ob'ekt | Ruxsat | Nima uchun |
|---|---|---|
| Kataloglar | 750 | www-data kiradi, boshqalar yo'q |
| Fayllar | 640 | www-data o'qiydi, yozmaydi |
| Yuklamalar katalogi | 770 | www-data yozishi kerak |
.env | 640 yoki 600 | Iloji bo'lsa - 600 |
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.
| Bit | Qiymat | Faylda | Katalogda |
|---|---|---|---|
setuid | 4 | Egasi huquqida ishlaydi | (ta'sir yo'q) |
setgid | 2 | Guruhi huquqida ishlaydi | Guruh meros bo'ladi |
sticky | 1 | (ta'sir yo'q) | Faqat egasi o'chiradi |
setuid - passwd sirining javobi #
stat -c "%A %U:%G %n" /usr/bin/passwd
-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 narsasiAgar setuid root dastur zaiflikka ega bo'lsa, hujumchi
root huquqini oladi.
Shu sababli:
| Qoida | Sabab |
|---|---|
Hech qachon o'z skriptingizga setuid qo'ymang | Skriptlarda bu ishlamaydi va xavfli |
Yangi setuid fayl paydo bo'lsa - tekshiring | Bu buzilish belgisi |
Kerak bo'lmasa - sudo ishlating | sudo jurnalga yozadi va cheklanadi |
Tizimdagi barcha setuid fayllarni sanash:
find /usr/bin -perm -4000 -type f -printf "%f
" | sort | head -4
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.
mkdir -p jamoa
chgrp www-data jamoa
chmod 2775 jamoa
touch jamoa/hisobot.txt
stat -c "%a %U:%G %n" jamoa jamoa/hisobot.txt
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 ishlamaydisetgid bo'lmasa, har kim o'z asosiy guruhi bilan fayl
yaratadi:
| Kim yaratdi | setgid siz guruh | setgid bilan |
|---|---|---|
| husanboy | husanboy | dasturchilar |
| malika | malika | dasturchilar |
Birinchi holatda Malika Husanboyning faylini o'qiy olmaydi - guruh mos kelmaydi.
Shuning uchun umumiy loyiha katalogi uchun ibora shunday:
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 #
stat -c "%a %A %U:%G %n" /tmp
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.
mkdir -p umumiy && chmod 1777 umumiy
stat -c "%a %A %n" umumiy
1777 drwxrwxrwt umumiy
t va T, s va SAgar x bit ham bo'lsa - kichik harf (s, t).
Agar x bit bo'lmasa - katta harf (S, T).
mkdir -p sinov_S && chmod 2755 sinov_S && chmod g-x sinov_S
stat -c "%a %A %n" sinov_S
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 #
mkdir -p t1 t2 t3
chmod 4755 t1; chmod 2755 t2; chmod 1777 t3
stat -c "%04a %A %n" t1 t2 t3
4755 drwsr-xr-x t1
2755 drwxr-sr-x t2
1777 drwxrwxrwt t3
| Oktal | Bit | Odatda qayerda |
|---|---|---|
4755 | setuid | /usr/bin/passwd, /usr/bin/sudo |
2775 | setgid | Jamoaviy loyiha katalogi |
1777 | sticky | /tmp, /var/tmp |
0644 | hech biri | Oddiy fayl |
Serverda muntazam bajariladigan tekshiruv:
| Buyruq | Nima qidiradi |
|---|---|
find / -perm -4000 -type f 2>/dev/null | Barcha setuid fayllar |
find / -perm -2000 -type f 2>/dev/null | Barcha setgid fayllar |
find / -perm -0002 -type f 2>/dev/null | Hamma yoza oladigan fayllar |
find / -nouser -o -nogroup 2>/dev/null | Egasiz 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.
stat -c "%U:%G"bilan bir necha faylning egasini ko'ring.chownvachgrpfarqini amalda sinang.- Veb-sayt katalogiga
750/640naqshini qo'llang. find ... -exec chmodbilan fayl va katalogni ajratib sozlang./usr/bin/passwddagisni toping va nima uchun kerakligini tushuntiring.- Tizimdagi barcha
setuidfayllarni sanang va ro'yxatini saqlang. setgidkatalog yarating va guruh merosini tekshiring./tmpdagitni toping va sticky bit vazifasini tushuntiring.chmod 2755keying-xqiling -Sni ko'ring va sababini ayting.- "Hamma yoza oladigan" fayllarni qidiring.
Xulosa #
- Yadro birinchi mos keladigan toifada to'xtaydi: ega → guruh → boshqalar.
- Egadan ruxsat olib tashlash - deyarli har doim xato.
chownfaqat root uchun; guruhni a'zo bo'lsangiz o'zgartira olasiz.- Sayt uchun naqsh: katalog
750, fayl640, egasiroot:www-data. - Veb-server sayt fayllariga yozmasligi kerak.
setuid(s) - dastur egasi huquqida ishlaydi;passwdshunday ishlaydi.setuidro'yxatini saqlang - yangisi paydo bo'lishi buzilish belgisi.setgidkatalogda - yangi fayllar guruhni meros oladi.sticky(t) -/tmpda har kim yozadi, lekin faqat o'zinikini o'chiradi.- Katta
SyokiT-xyo'qligini bildiradi, odatda xato.
Keyingi bo'limda foydalanuvchi va guruhlarni yaratamiz -
/etc/passwd, /etc/shadow va useradd.
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.