4-bo‘lim
Ruxsatlar - rwx va oktal yozuv
Kim o'qiy oladi, kim yoza oladi, kim ishga tushira oladi - va nima uchun katalogdagi x butunlay boshqa narsa.
Ushbu bo‘lim mundarijasi
Serverda bir necha foydalanuvchi va bir necha xizmat yashaydi. Ruxsatlar tizimi ularning bir-birining fayllariga tegishini cheklaydi. Bu Linux xavfsizligining birinchi qatlami.
ls -l ning birinchi ustuni #
mkdir -p sayt
echo "<h1>Salom</h1>" > sayt/index.html
echo "parol=maxfiy" > sayt/.env
chmod 644 sayt/index.html
chmod 600 sayt/.env
chmod 755 sayt
touch -d "2026-09-01 09:00:00" sayt sayt/index.html sayt/.env
ls -l sayt
total 4
-rw-r--r-- 1 husanboy husanboy 15 Sep 1 09:00 index.html
Birinchi ustun - -rw-r--r-- - o'nta belgidan iborat:
Oktal yozuv #
Har ruxsat - bitta bit. Uchtasi birgalikda 0 dan 7 gacha son beradi.
| Ruxsat | Qiymat |
|---|---|
r | 4 |
w | 2 |
x | 1 |
| Oktal | Harflar | Ma'no |
|---|---|---|
7 | rwx | 4+2+1 |
6 | rw- | 4+2 |
5 | r-x | 4+1 |
4 | r-- | 4 |
0 | --- | hech nima |
stat -c "%a %A %n" sayt sayt/index.html sayt/.env
755 drwxr-xr-x sayt
644 -rw-r--r-- sayt/index.html
600 -rw------- sayt/.env
| Oktal | Nimaga |
|---|---|
644 | Oddiy fayl - egasi yozadi, hamma o'qiydi |
600 | Maxfiy fayl - .env, SSH kaliti, parol |
755 | Katalog yoki skript - hamma kiradi/ishga tushiradi |
700 | Maxfiy katalog - ~/.ssh |
Boshqa qiymatlar kamdan-kam kerak bo'ladi. Agar sizga 777
kerak bo'lib qolsa - bu deyarli har doim muammoni noto'g'ri
hal qilish belgisi (pastda).
chmod - ruxsatni o'zgartirish #
Ikkita yozuv usuli bor: oktal va ramziy.
chmod 640 sayt/index.html
stat -c "%a %A" sayt/index.html
640 -rw-r-----
Ramziy yozuv o'zgartirishni qo'shadi yoki ayiradi:
chmod 640 sayt/index.html
chmod u+x,g-r sayt/index.html
stat -c "%a %A" sayt/index.html
700 -rwx------
| Element | Variantlar |
|---|---|
| Kim | u egasi, g guruh, o boshqalar, a hammasi |
| Amal | + qo'shish, - olib tashlash, = aniq o'rnatish |
| Nima | r, w, x, X |
X (katta) - kataloglar uchun aqlli xKatta X x ni faqat kataloglarga va allaqachon
bajariladigan fayllarga qo'yadi.
Bu chmod -R da hal qiluvchi ahamiyatga ega:
mkdir -p loyiha/ichki && touch loyiha/hujjat.txt
chmod -R a=,u+rwX loyiha
stat -c "%a %n" loyiha loyiha/ichki loyiha/hujjat.txt
700 loyiha
700 loyiha/ichki
600 loyiha/hujjat.txt
Kataloglar 700, oddiy fayl esa 600 bo'ldi - aynan
kerakligidek.
Agar X o'rniga kichik x yozganingizda, hujjat.txt ham
700 bo'lardi, ya'ni matn fayli bajariladigan deb
belgilanardi. Bu xavfsizlik nuqtai nazaridan yomon odat.
umask - yangi fayllarning boshlang'ich ruxsati #
Yangi fayl qaysi ruxsat bilan yaratilishini umask belgilaydi.
U olib tashlanadigan bitlarni ko'rsatadi.
umask
umask -S
0022
u=rwx,g=rx,o=rx
| Ob'ekt | Boshlang'ich | umask 022 | Natija |
|---|---|---|---|
| Fayl | 666 | -022 | 644 |
| Katalog | 777 | -022 | 755 |
Nima uchun fayl 666 dan boshlanadi, 777 dan emas? Chunki
yangi fayl hech qachon avtomatik bajariladigan bo'lmasligi
kerak - bu xavfsizlik qarori.
touch yangi.txt
mkdir yangi_katalog
stat -c "%a %n" yangi.txt yangi_katalog
644 yangi.txt
755 yangi_katalog
umask ni o'zgartirsak, natija ham o'zgaradi:
(umask 077; touch maxfiy.txt; mkdir maxfiy_kat; stat -c "%a %n" maxfiy.txt maxfiy_kat)
600 maxfiy.txt
700 maxfiy_kat
umask 077 yozingZaxira nusxa ichida ma'lumotlar bazasi paroli, foydalanuvchi ma'lumoti va boshqa maxfiy narsalar bo'lishi mumkin.
Standart umask 022 bilan arxiv 644 ruxsat bilan yaratiladi
- ya'ni serverdagi har bir foydalanuvchi uni o'qiy oladi.
Skript boshida bitta satr buni hal qiladi:
umask 077
19-bo'limda zaxira skriptini yozganda buni ishlatamiz.
Katalogdagi x - eng ko'p chalkashtiradigan joy #
Katalogda r va x turli narsalarni beradi. Buni tajribada
ko'rish eng ishonchli usul.
mkdir -p sinov && echo "maxfiy matn" > sinov/hujjat.txt
chmod 644 sinov # r-- lekin x YO'Q
ls sinov 2>&1
cat sinov/hujjat.txt 2>&1 | head -1
hujjat.txt
cat: sinov/hujjat.txt: Permission denied
Nomlar ro'yxatini oldik, lekin faylni ocha olmadik.
Endi teskarisi - x bor, r yo'q:
mkdir -p sinov && echo "maxfiy matn" > sinov/hujjat.txt
chmod 711 sinov # --x lekin r YO'Q
ls sinov 2>&1
cat sinov/hujjat.txt 2>&1 | head -1
hujjat.txt
maxfiy matn
Biz sinov katalogining egasimiz, shuning uchun 711 da
ham egasi uchun rwx amal qiladi va ls ishlaydi.
711 ning haqiqiy ma'nosi boshqalar uchun ochiladi:
| Ruxsat | Boshqalar ls qila oladimi | Faylni ocha oladimi |
|---|---|---|
755 (r-x) | Ha | Ha (fayl ruxsati ruxsat bersa) |
711 (--x) | Yo'q | Ha - agar to'liq nomni bilsa |
744 (r--) | Ha | Yo'q |
700 | Yo'q | Yo'q |
711 - haqiqiy va foydali naqsh: /home/husanboy odatda shunday
bo'ladi. Veb-server ~/public_html/index.html ni o'qiy oladi,
lekin uy katalogingizdagi fayllar ro'yxatini ko'ra olmaydi.
Fayl o'chirish huquqi qayerda #
mkdir -p qulf && echo "matn" > qulf/fayl.txt
chmod 444 qulf/fayl.txt
rm -f qulf/fayl.txt
ls qulf | wc -l
0
Fayl 444 - ya'ni hech kim yoza olmaydi. Lekin u
o'chirildi.
rm faylning mazmuniga tegmaydi - u katalogdagi yozuvni
o'chiradi. Shuning uchun tekshiriladigan ruxsat - katalogning
w biti.
Bu shuni anglatadi:
- Faylni
chmod 000qilsangiz ham, katalogga yozish huquqi bo'lgan har kim uni o'chira oladi; - Faylga to'liq
rwxbersangiz ham, katalogr-xbo'lsa, uni o'chira olmaysiz.
/tmp bunga qanday yechim topgan? U yerda hamma yozadi, lekin
hech kim boshqaning faylini o'chira olmaydi. Buni sticky bit
hal qiladi - keyingi bo'limda ko'ramiz.
777 nima uchun yomon #
chmod -R 777 - eng qimmat "yechim"Sayt ishlamayotganda internetdagi maslahat ko'pincha shunday
bo'ladi: chmod -R 777 /var/www. U muammoni yashiradi,
lekin uchta yangi muammo yaratadi.
| Xavf | Natija |
|---|---|
| Har bir foydalanuvchi yozadi | Boshqa hisob buzilsa - saytingiz ham buzildi |
| Fayllar bajariladigan bo'ladi | Yuklangan .php fayl kod sifatida ishlashi mumkin |
| Sozlama fayllari ochiq | .env dagi ma'lumotlar bazasi paroli hammaga ko'rinadi |
To'g'ri yechim - egalikni to'g'rilash (5-bo'lim):
| Nima kerak | Buyruq |
|---|---|
| Fayllar veb-serverga tegishli bo'lsin | chown -R www-data:www-data /var/www/sayt |
Kataloglar 755, fayllar 644 | find /var/www/sayt -type d -exec chmod 755 {} + |
find /var/www/sayt -type f -exec chmod 644 {} + | |
| Sirlar faqat egaga | chmod 600 /var/www/sayt/.env |
Ruxsat muammosi deyarli har doim egalik muammosi bo'lib chiqadi.
ls -lchiqishidagi o'nta belgini nomlab bering.644,600,755,700ni harflarga aylantiring.chmodni oktal va ramziy yozuvda ishlatib solishtiring.chmod -R a=,u+rwXbilan katalog daraxtini tozalang.umaskni ko'ring va uni077ga o'zgartirib fayl yarating.- Katalogdan
xni olib tashlang vacdqilib ko'ring. - Katalogdan
rni olib tashlang valsqilib ko'ring. 444faylni o'chirib ko'ring - nega o'chdi?find ... -exec chmodbilan fayl va katalogga turli ruxsat bering.777ning uchta xavfini o'z so'zlaringiz bilan yozing.
Xulosa #
- Ruxsat satri: tur + egasi + guruh + boshqalar.
r=4,w=2,x=1; yod olish kerak bo'lgan qiymatlar -644,600,755,700.- Katalogda
r- nomlar ro'yxati,x- ichiga kirish. xsiz katalogdagi faylni to'liq nomi bilan ham ocholmaysiz...rsiz esa - ocholasiz.chmod -Rda kattaXishlating - u matn fayllarini bajariladigan qilmaydi.umaskolib tashlanadigan bitlarni belgilaydi: fayl666, katalog777dan boshlanadi.- Zaxira skriptlarida
umask 077. - Faylni o'chirish huquqi - katalogning
wbiti. 777muammoni yashiradi, uchta yangisini yaratadi.- Ruxsat muammosi odatda egalik muammosi.
Keyingi bo'limda egalik va maxsus bitlarni ko'ramiz: chown,
setuid, setgid va /tmp ni himoya qiluvchi sticky bit.
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.