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.

🕑 17 daqiqa o‘qish 📄 1 124 so‘z 👁 1 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. ls -l ning birinchi ustuni
  2. Oktal yozuv
  3. chmod - ruxsatni o'zgartirish
  4. umask - yangi fayllarning boshlang'ich ruxsati
  5. Katalogdagi x - eng ko'p chalkashtiradigan joy
  6. Fayl o'chirish huquqi qayerda
  7. 777 nima uchun yomon
  8. Xulosa

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 #

Terminal
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
Terminal
ls -l sayt
Natija
total 4
-rw-r--r-- 1 husanboy husanboy 15 Sep  1 09:00 index.html

Birinchi ustun - -rw-r--r-- - o'nta belgidan iborat:

-rw-r--r-- qanday o'qiladi - rw- r-- r-- tur egasi (u) guruh (g) boshqalar (o) - fayl, d katalog husanboy husanboy guruhi hamma qolgan FAYL uchun r mazmunini o'qish w mazmunini o'zgartirish x dastur sifatida ishga tushirish Faylni o'chirish huquqi faylda emas, uni saqlagan KATALOGda. KATALOG uchun - butunlay boshqa r ichidagi NOMLAR ro'yxatini olish w fayl yaratish va O'CHIRISH x ichiga KIRISH (cd), yo'ldan o'tish x siz katalogga kira olmaysiz - hatto ichidagi faylning to'liq nomini bilsangiz ham.
Bir xil harflar, lekin fayl va katalogda turli ma'no

Oktal yozuv #

Har ruxsat - bitta bit. Uchtasi birgalikda 0 dan 7 gacha son beradi.

RuxsatQiymat
r4
w2
x1
OktalHarflarMa'no
7rwx4+2+1
6rw-4+2
5r-x4+1
4r--4
0---hech nima
Terminal
stat -c "%a %A %n" sayt sayt/index.html sayt/.env
Natija
755 drwxr-xr-x sayt
644 -rw-r--r-- sayt/index.html
600 -rw------- sayt/.env
Serverda faqat to'rtta raqamni yodlang
OktalNimaga
644Oddiy fayl - egasi yozadi, hamma o'qiydi
600Maxfiy fayl - .env, SSH kaliti, parol
755Katalog yoki skript - hamma kiradi/ishga tushiradi
700Maxfiy 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.

Terminal
chmod 640 sayt/index.html
stat -c "%a %A" sayt/index.html
Natija
640 -rw-r-----

Ramziy yozuv o'zgartirishni qo'shadi yoki ayiradi:

Terminal
chmod 640 sayt/index.html
chmod u+x,g-r sayt/index.html
stat -c "%a %A" sayt/index.html
Natija
700 -rwx------
ElementVariantlar
Kimu egasi, g guruh, o boshqalar, a hammasi
Amal+ qo'shish, - olib tashlash, = aniq o'rnatish
Nimar, w, x, X
X (katta) - kataloglar uchun aqlli x

Katta X x ni faqat kataloglarga va allaqachon bajariladigan fayllarga qo'yadi.

Bu chmod -R da hal qiluvchi ahamiyatga ega:

Terminal
mkdir -p loyiha/ichki && touch loyiha/hujjat.txt
chmod -R a=,u+rwX loyiha
stat -c "%a %n" loyiha loyiha/ichki loyiha/hujjat.txt
Natija
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.

Terminal
umask
umask -S
Natija
0022
u=rwx,g=rx,o=rx
Ob'ektBoshlang'ichumask 022Natija
Fayl666-022644
Katalog777-022755

Nima uchun fayl 666 dan boshlanadi, 777 dan emas? Chunki yangi fayl hech qachon avtomatik bajariladigan bo'lmasligi kerak - bu xavfsizlik qarori.

Terminal
touch yangi.txt
mkdir yangi_katalog
stat -c "%a %n" yangi.txt yangi_katalog
Natija
644 yangi.txt
755 yangi_katalog

umask ni o'zgartirsak, natija ham o'zgaradi:

Terminal
(umask 077; touch maxfiy.txt; mkdir maxfiy_kat; stat -c "%a %n" maxfiy.txt maxfiy_kat)
Natija
600 maxfiy.txt
700 maxfiy_kat
Zaxira skriptida umask 077 yozing

Zaxira 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:

Terminal
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.

Terminal
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
Natija
hujjat.txt
cat: sinov/hujjat.txt: Permission denied

Nomlar ro'yxatini oldik, lekin faylni ocha olmadik.

Endi teskarisi - x bor, r yo'q:

Terminal
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
Natija
hujjat.txt
maxfiy matn
Yuqoridagi natija egaga tegishli

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:

RuxsatBoshqalar ls qila oladimiFaylni ocha oladimi
755 (r-x)HaHa (fayl ruxsati ruxsat bersa)
711 (--x)Yo'qHa - agar to'liq nomni bilsa
744 (r--)HaYo'q
700Yo'qYo'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 #

Terminal
mkdir -p qulf && echo "matn" > qulf/fayl.txt
chmod 444 qulf/fayl.txt
rm -f qulf/fayl.txt
ls qulf | wc -l
Natija
0

Fayl 444 - ya'ni hech kim yoza olmaydi. Lekin u o'chirildi.

O'chirish huquqi katalogda, faylda emas

rm faylning mazmuniga tegmaydi - u katalogdagi yozuvni o'chiradi. Shuning uchun tekshiriladigan ruxsat - katalogning w biti.

Bu shuni anglatadi:

  • Faylni chmod 000 qilsangiz ham, katalogga yozish huquqi bo'lgan har kim uni o'chira oladi;
  • Faylga to'liq rwx bersangiz ham, katalog r-x bo'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.

XavfNatija
Har bir foydalanuvchi yozadiBoshqa hisob buzilsa - saytingiz ham buzildi
Fayllar bajariladigan bo'ladiYuklangan .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 kerakBuyruq
Fayllar veb-serverga tegishli bo'lsinchown -R www-data:www-data /var/www/sayt
Kataloglar 755, fayllar 644find /var/www/sayt -type d -exec chmod 755 {} +
find /var/www/sayt -type f -exec chmod 644 {} +
Sirlar faqat egagachmod 600 /var/www/sayt/.env

Ruxsat muammosi deyarli har doim egalik muammosi bo'lib chiqadi.

Amaliy topshiriq
  1. ls -l chiqishidagi o'nta belgini nomlab bering.
  2. 644, 600, 755, 700 ni harflarga aylantiring.
  3. chmod ni oktal va ramziy yozuvda ishlatib solishtiring.
  4. chmod -R a=,u+rwX bilan katalog daraxtini tozalang.
  5. umask ni ko'ring va uni 077 ga o'zgartirib fayl yarating.
  6. Katalogdan x ni olib tashlang va cd qilib ko'ring.
  7. Katalogdan r ni olib tashlang va ls qilib ko'ring.
  8. 444 faylni o'chirib ko'ring - nega o'chdi?
  9. find ... -exec chmod bilan fayl va katalogga turli ruxsat bering.
  10. 777 ning 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.
  • x siz katalogdagi faylni to'liq nomi bilan ham ocholmaysiz... r siz esa - ocholasiz.
  • chmod -R da katta X ishlating - u matn fayllarini bajariladigan qilmaydi.
  • umask olib tashlanadigan bitlarni belgilaydi: fayl 666, katalog 777 dan boshlanadi.
  • Zaxira skriptlarida umask 077.
  • Faylni o'chirish huquqi - katalogning w biti.
  • 777 muammoni 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.

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.