IlmHamroh
JavaScript Full-stack/1-qism. Kompyuter, fayllar va terminal14/40-dars14 daqiqa
Mundarija (25)

Fayl ruxsatlari va foydalanuvchilar

Qisqacha: Linux va macOS'da har faylda uchta toifa uchun ruxsat yozilgan: egasi, guruhi va boshqalar. Har toifa uchta huquqqa ega bo'lishi mumkin: r — o'qish, w — yozish, x — ishga tushirish. Raqamda r = 4, w = 2, x = 1, shuning uchun chmod 755 — egasiga hammasi, boshqalarga o'qish va ishga tushirish. Tizimni o'zgartiradigan ishlar uchun esa sudo (Linux) yoki administrator huquqi (Windows) kerak.

Bu darsda

  • Foydalanuvchi, guruh va superuser (root) nima ekanini tushuntira olasiz.
  • -rwxr-xr-x kabi ruxsat qatorini o'qiy olasiz.
  • Harfli ruxsatni raqamga (755, 644, 600) va aksincha o'gira olasiz.
  • chmod, chown va sudo nima qilishini bilasiz.
  • Permission denied xatosining sababini topa olasiz va chmod 777 nega xavfli ekanini tushuntirasiz.

Oldin bilishingiz kerak: Operatsion tizim nima, Fayl tizimi, O'n oltilik va sakkizlik sanoq sistemalari.

1. Nega bu kerak?

Kompyuteringizda siz yolg'iz ishlayotgandek tuyuladi. Aslida unda o'nlab "foydalanuvchi" bor: tizim xizmatlari, antivirus, yangilanish dasturi. Serverda esa bir vaqtda veb-server, baza va bir nechta dasturchi ishlaydi.

Agar har biri istalgan faylni o'qiy va o'zgartira olsa nima bo'ladi?

  • Saytdagi kichik xatodan foydalangan hujumchi bazaning parolini o'qib oladi.
  • Tasodifiy xato buyruq tizim fayllarini o'chirib, serverni ishdan chiqaradi.

Shuning uchun OS har bir faylga "kim nima qila oladi" degan yozuvni biriktiradi. Kernel har bir fayl so'rovida shu yozuvni tekshiradi — Operatsion tizim darsidagi system call'ni eslang. Serverda birinchi marta Permission denied ("ruxsat berilmadi") ko'rganingizda, bu dars aynan kerak bo'ladi.

2. Foydalanuvchilar va guruhlar

Foydalanuvchi (user) — tizimdagi hisob: nomi va raqami bor. Siz kompyuterga kirganda ma'lum bir foydalanuvchi bo'lib kirasiz. Siz ishga tushirgan har bir jarayon ham shu foydalanuvchi nomidan ishlaydi.

Foydalanuvchilar odamlar uchun ham, dasturlar uchun ham ochiladi. Masalan, Linux serverda veb-server ko'pincha alohida www-data foydalanuvchisi nomidan ishlaydi. U buzilsa ham, faqat o'z huquqlari doirasida zarar yetkaza oladi.

Guruh (group) — foydalanuvchilar to'plami. Guruhga ruxsat bersangiz, uning barcha a'zolari o'sha ruxsatni oladi. Masalan, dasturchilar guruhidagi Ali, Malika va Jasur loyiha fayllarini tahrirlay oladi.

Har tizimda cheklovsiz bitta hisob bor:

  • Linux va macOS'da — root (superuser, "eng yuqori foydalanuvchi").
  • Windows'da — administratorlar guruhi (Administrators).

Ular istalgan faylni o'qiy, o'zgartira va o'chira oladi.

Tekshirib ko'ring: Nega veb-server root nomidan emas, alohida www-data foydalanuvchisi nomidan ishlaydi?

Javob

Veb-server internetdan keladigan so'rovlarni qabul qiladi, demak hujumga birinchi bo'lib uchraydi. U root bo'lsa, hujumchi butun serverni boshqarib oladi. Alohida foydalanuvchi bo'lsa, hujumchi faqat shu foydalanuvchiga ruxsat berilgan fayllarga yetadi.

3. Uch toifa va uch huquq

3.1 Kimga: egasi, guruh, boshqalar

Linux va macOS'da har faylning ruxsati uch toifa uchun alohida yoziladi:

Toifa Harfi Kim
Egasi (owner) u (user) faylni yaratgan yoki unga egalik qiladigan foydalanuvchi
Guruh (group) g faylga biriktirilgan guruh a'zolari
Boshqalar (others) o qolgan hamma

O'xshatish: sizning uyingiz. Egasi — siz, hamma xonaga kirasiz va istagan narsani o'zgartirasiz. Guruh — oila a'zolari: yashaydi, foydalanadi, lekin ba'zi javonlarni ochmaydi. Boshqalar — mehmonlar: faqat mehmonxonada o'tirib, qarab turishi mumkin.

3.2 Nima: o'qish, yozish, ishga tushirish

Huquq Harfi Faylda Papkada
O'qish (read) r ichini ko'rish ichidagi nomlar ro'yxatini ko'rish
Yozish (write) w ichini o'zgartirish ichida fayl yaratish, o'chirish, nomini o'zgartirish
Ishga tushirish (execute) x dastur sifatida ishga tushirish papkaning ichiga kirish

Sakkizlik sanoq sistemasi darsida x ni "bajarish" deb atagan edik — "ishga tushirish" bilan bir narsa.

Papka ustuniga diqqat qiling. Faylni o'chirish — papkaning w huquqiga bog'liq, faylning o'ziga emas. Chunki o'chirish — papkadagi ro'yxatdan bir nomni olib tashlash.

Tekshirib ko'ring: Papkada sizda r bor, lekin x yo'q. Nima qila olasiz?

Javob

Papka ichidagi fayllarning nomlarini ko'ra olasiz, lekin ichiga kira olmaysiz va fayllarni ocha olmaysiz. Ichkariga kirish uchun x kerak. Shuning uchun papkalarga odatda r va x birga beriladi.

4. Ruxsat qatorini o'qish

Linux terminalida papkadagi fayllarni ruxsatlari bilan ko'rsatadigan buyruq bor (ls -l). Terminalni kursda keyinroq o'rganamiz. Hozir faqat uning natijasini o'qishni o'rganamiz:

text
-rwxr-xr-x 1 ali dasturchilar 2048 Sep 27 10:00 deploy.sh
drwxr-x--- 2 ali dasturchilar 4096 Sep 27 10:00 rasmlar
-rw------- 1 ali ali           220 Sep 27 10:00 .env

Birinchi qatorni bo'laklaymiz:

Qism Ma'nosi
- tur: - — oddiy fayl, d — papka (directory)
rwx egasi: o'qish, yozish, ishga tushirish — hammasi bor
r-x guruh: o'qish va ishga tushirish, yozish yo'q (-)
r-x boshqalar: o'qish va ishga tushirish
ali fayl egasi
dasturchilar fayl guruhi

Keyin fayl hajmi (baytda), o'zgartirilgan sana va nomi keladi. - belgisi har doim "shu huquq yo'q" degani. Huquqlarning tartibi o'zgarmaydi: avval r, keyin w, keyin x.

Endi ikkinchi qatorni siz o'qing: drwxr-x---. Bu papka. Guruh a'zolari unga nima qila oladi? r-x — ro'yxatni ko'radi va kiradi, lekin yoza olmaydi. Boshqalarda esa ---, ya'ni hech qanday huquq yo'q. Uchinchi qatorda .env faylini egasidan boshqa kim o'qiy oladi? Javob:

OS ruxsatni qanday tekshiradi:

flowchart TD
  A["Jarayon faylni ochmoqchi"] --> B{"root mi?"}
  B -->|Ha| OK["Ruxsat beriladi"]
  B -->|Yo'q| C{"Fayl egasimi?"}
  C -->|Ha| U["Egasi uchun rwx tekshiriladi"]
  C -->|Yo'q| D{"Fayl guruhidami?"}
  D -->|Ha| G["Guruh uchun rwx tekshiriladi"]
  D -->|Yo'q| O["Boshqalar uchun rwx tekshiriladi"]

Muhim: OS faqat bitta mos toifaga qaraydi. Siz fayl egasi bo'lsangiz, guruh va boshqalar ustunlari sizga ta'sir qilmaydi.

Tekshirib ko'ring: -rw-r--r-- faylida boshqalar faylni o'zgartira oladimi?

Javob

Yo'q. Boshqalar uchun uchlik — r--: faqat o'qish. Yozish (w) faqat egasida bor. Bu HTML, CSS va rasm fayllari uchun odatiy ruxsat.

5. Raqamli yozuv: 4, 2, 1

Har uchlikni bitta raqam bilan yozish mumkin. Har huquqning o'z "qiymati" bor:

  • r = 4
  • w = 2
  • x = 1

Qiymatlar qo'shiladi. Ikkilik sanoq sistemasi darsini eslang: rwx — aslida uchta bit, 4, 2 va 1 esa ularning qiymati. Shuning uchun natija doim 0 dan 7 gacha — bitta sakkizlik raqam (sakkizlik sanoq sistemasi).

Raqam Harflar Hisob Ma'nosi
7 rwx 4 + 2 + 1 hammasi
6 rw- 4 + 2 o'qish va yozish
5 r-x 4 + 1 o'qish va ishga tushirish
4 r-- 4 faqat o'qish
0 --- 0 hech narsa

Uch toifa — uch raqam: egasi, guruh, boshqalar.

To'liq yechilgan misol: rwxr-xr-x.

  1. Uchlikka bo'lamiz: rwx | r-x | r-x.
  2. Har birini hisoblaymiz: 4+2+1 = 7, 4+1 = 5, 4+1 = 5.
  3. Natija: 755.

Keyingi jadvalda skript so'zi uchraydi. Skript — kompyuter ketma-ket bajaradigan buyruqlar yozilgan matn fayli (masalan, yuqoridagi deploy.sh).

Eng ko'p uchraydigan to'rtta:

Raqam Harflar Qayerda
755 rwxr-xr-x papkalar, ishga tushiriladigan skriptlar
644 rw-r--r-- oddiy fayllar: HTML, CSS, rasmlar
600 rw------- maxfiy fayllar: .env, SSH kalit
700 rwx------ shaxsiy papka yoki skript

Qisman yechilgan misol: rw-r----- → egasi 6, guruh 4, boshqalar 0. Natija:

Tekshirib ko'ring: chmod 600 .env dan keyin guruh a'zosi Malika faylni o'qiy oladimi?

Javob

Yo'q. 600 = rw-------: faqat egasida o'qish va yozish bor. Guruh (0) va boshqalar (0) hech narsa qila olmaydi. Maxfiy fayllar uchun aynan shu kerak.

6. chmod va chown buyruqlari

Ruxsatlarni terminalda ikki buyruq bilan o'zgartirasiz. Hozir ularni ko'rib qo'ying — terminalni o'rgangach, o'zingiz yozasiz.

chmod (change mode — "rejimni o'zgartirish") — ruxsatlarni o'zgartiradi. Raqam bilan:

bash
chmod 644 index.html   # egasi: rw-, qolganlar: r--
chmod 600 .env         # faqat egasi o'qiydi va yozadi

Yoki harflar bilan: kimga (u, g, o, hammaga a), qo'shish + yoki olib tashlash -, qaysi huquq:

bash
chmod +x deploy.sh     # hammaga ishga tushirish huquqini qo'shish
chmod g-w hisobot.txt  # guruhdan yozish huquqini olish

Yangi yozilgan skript odatda x huquqisiz yaratiladi. Uni ishga tushirishdan oldin chmod +x qilinadi. Buni Shell skript yozish darsida amalda ko'rasiz.

chown (change owner — "egasini o'zgartirish") — fayl egasi va guruhini o'zgartiradi:

bash
# egasi — ali, guruhi — dasturchilar
sudo chown ali:dasturchilar loyiha.txt

Boshqa odamning faylini o'zingizga "olish" oddiy foydalanuvchiga ruxsat etilmaydi. Shuning uchun chown odatda sudo bilan ishlatiladi. sudo ni keyingi bo'limda ko'ramiz.

Diqqat: chmod va chown da -R sozlamasi (masalan, chmod -R 755 papka) papka ichidagi hamma narsaga birdaniga ta'sir qiladi. Noto'g'ri papkada ishlatilsa, minglab faylning ruxsati buziladi. Uni ishlatishdan oldin qaysi papkada turganingizni ikki marta tekshiring.

7. Superuser: sudo, Administrator va UAC

7.1 Linux va macOS: sudo

root hamma narsani qila oladi — shuning uchun u bilan doim ishlash xavfli. Bitta xato buyruq butun tizimni o'chirib yuborishi mumkin. Dasturchilar oddiy foydalanuvchi sifatida ishlaydi va faqat kerak bo'lganda vaqtincha root huquqini oladi.

Buning uchun sudo ("superuser do" — "superuser sifatida bajar") ishlatiladi:

bash
sudo apt update   # Ubuntu'da dasturlar ro'yxatini yangilash

apt — Ubuntu'da dastur o'rnatuvchi vosita. Uni Dastur o'rnatish darsida o'rganamiz.

sudo sizning parolingizni so'raydi (root parolini emas). U faqat shu bitta buyruqni root huquqi bilan bajaradi va buni jurnalga yozib qo'yadi. Serverda kim nima qilganini keyin ko'rish mumkin.

7.2 Windows: Administrator va UAC

Windows'da rwx o'rniga batafsilroq ruxsatlar ro'yxati ishlatiladi. Uni faylning "Properties" → "Security" ("Xavfsizlik") yorlig'ida ko'rasiz. Kundalik ishda unga kam tegasiz — rwx asosan Linux serverlar va macOS'da kerak.

Windows'dagi sudo ning o'xshashi — UAC (User Account Control, "hisob nazorati"). Dastur tizimni o'zgartirmoqchi bo'lsa (masalan, dastur o'rnatish), ekran qorayadi va oyna chiqadi:

text
Do you want to allow this app to make changes to your device?

Tarjimasi: "Bu ilovaga qurilmangizga o'zgartirish kiritishga ruxsat berasizmi?". Siz bilmagan dastur uchun bu oyna chiqsa — "No" ("Yo'q") ni bosing.

Dasturni administrator huquqi bilan ochish uchun: sichqonchaning o'ng tugmasi → "Run as administrator" ("Administrator sifatida ishga tushirish").

Tekshirib ko'ring: Nega sudo root sifatida kirib ishlashdan xavfsizroq?

Javob

sudo root huquqini faqat bitta buyruq uchun beradi va har safar ongli qaror talab qiladi. Qolgan vaqtda siz cheklangan foydalanuvchisiz — xato buyruq faqat o'z fayllaringizga ta'sir qiladi. Bundan tashqari, sudo har bir buyruqni jurnalga yozadi.

8. Ko'p uchraydigan xatolar

8.1 Permission denied

Serverda skriptni ishga tushirdingiz:

text
bash: ./deploy.sh: Permission denied

Tarjimasi: "bash: ./deploy.sh: ruxsat berilmadi". bash — terminalda buyruqlarni bajaruvchi dastur, xabar undan keldi. Sababi: faylda x huquqi yo'q. Yechim: chmod +x deploy.sh.

8.2 EACCES: permission denied

Node.js dasturida (JavaScript'ni kompyuterda ishlatadigan dastur) shunday xato chiqishi mumkin:

text
Error: EACCES: permission denied, open '/etc/hosts'

Tarjimasi: EACCES — "Error: ACCESS", ya'ni kirishda xato. "Ruxsat berilmadi, ochmoqchi bo'lgan: /etc/hosts". Dastur siz nomingizdan ishlayapti, sizda esa bu faylga yozish huquqi yo'q. Yechim: avval o'ylang — dasturga bu fayl rostdan kerakmi? Ko'pincha to'g'ri yechim faylni o'z papkangizda saqlash, sudo emas.

8.3 Muammoni chmod 777 bilan "hal qilish"

Biror narsa ishlamasa, ko'p boshlovchi chmod 777 qiladi. 777 = rwxrwxrwx — hamma hamma narsani qila oladi. Xato yo'qoladi, lekin eshik ochiq qoladi: tizimdagi istalgan dastur yoki hujumchi faylni o'zgartira oladi. Yechim: kimga qaysi huquq yetishmayotganini aniqlang va faqat o'shani bering.

8.4 Hamma narsani sudo bilan qilish

Loyiha papkasida buyruqlarni sudo bilan bajarsangiz, yangi fayllarning egasi root bo'lib qoladi. Keyin ularni oddiy foydalanuvchi sifatida o'zgartira olmaysiz va yana EACCES olasiz. Yechim: egalikni qaytaring — sudo chown -R ali:ali loyiha/ — va keyin sudo siz ishlang.

8.5 SSH kalit "juda ochiq"

Serverga ulanish uchun maxfiy kalit fayli ishlatiladi (SSH kalit — Git qismida o'rganamiz). Uning ruxsati 644 bo'lsa, ulanish rad etiladi:

text
Permissions 0644 for '/home/ali/.ssh/id_ed25519' are too open.
This private key will be ignored.

Tarjimasi: "Fayl ruxsatlari 0644 — juda ochiq. Bu maxfiy kalit e'tiborga olinmaydi". Dastur boshqalar kalitni o'qiy olishini ko'rib, uni ishlatishdan bosh tortdi. Yechim: chmod 600 ~/.ssh/id_ed25519.

9. Hujumchi nigohi

Tasavvur qiling: saytingizdagi xatodan foydalanib, hujumchi serverda buyruq bajara oldi. U veb-server nomidan — www-data foydalanuvchisi sifatida ishlayapti. Uning keyingi qadamlari:

  1. .env ni o'qish. Unda baza paroli va to'lov tizimi kaliti bor. Fayl 644 bo'lsa, boshqalar ham o'qiy oladi — www-data ham. Parollar o'g'irlandi.
  2. Sahifani almashtirish. index.html ga 777 berilgan bo'lsa, hujumchi uni o'z matni bilan almashtiradi. Mijozlar saytingizda firibgarlik havolasini ko'radi.
  3. Butun serverni egallash. Veb-server root nomidan ishlasa, hujumchi hamma narsani qila oladi.

Himoya shu darsdagi qoidalardan iborat:

  • .env — 600 va ilova foydalanuvchisiga tegishli. www-data uni o'qiy olmaydi.
  • HTML va boshqa fayllar — 644 va deploy qiluvchi foydalanuvchiga tegishli. www-data ularni o'qiydi, lekin o'zgartira olmaydi.
  • Veb-server hech qachon root bo'lib ishlamaydi.
  • Hech qayerda 777 yo'q.

Bu eng kam huquq tamoyili (least privilege) deyiladi: har bir foydalanuvchi va dasturga ishlashi uchun zarur bo'lgan eng kam huquq beriladi. Xatoga yo'l qo'yilsa ham, zarar kichik bo'ladi.

10. Mashqlar

1-mashq (oson): Raqam va harflar

Raqamlarni harflarga o'giring (masalan, 7 → rwx):

  1. 6 →
  2. 5 →
  3. 4 →
Yechim
  1. 6 = 4 + 2 → rw- (o'qish va yozish).
  2. 5 = 4 + 1 → r-x (o'qish va ishga tushirish).
  3. 4 → r-- (faqat o'qish).

Tartib doim r, w, x. Yo'q huquq o'rnida - turadi.

2-mashq (o'rta): Qatorni o'qing

text
-rw-rw-r-- 1 malika dizaynerlar 5120 Sep 27 11:00 logo.svg
  1. Bu fayl yoki papkami?
  2. Egasi kim, guruhi qaysi?
  3. dizaynerlar guruhidagi Jasur faylni o'zgartira oladimi?
  4. Boshqa foydalanuvchi Ali-chi?
  5. Ruxsatning raqamli ko'rinishi qanday?
Yechim
  1. Fayl — birinchi belgi -.
  2. Egasi — malika, guruhi — dizaynerlar.
  3. Ha. Guruh uchligi rw- — o'qish va yozish bor.
  4. Yo'q. Ali guruhda emas, demak "boshqalar" uchligi amal qiladi: r-- — faqat o'qish.
  5. rw- = 6, rw- = 6, r-- = 4 → 664.

3-mashq (qiyin): Serverdagi ruxsatlarni loyihalang

Serverga sayt joylayapsiz. Fayllar ali foydalanuvchisiga tegishli, veb-server esa www-data nomidan ishlaydi va faqat fayllarni o'qishi kerak. Har biriga raqamli ruxsat tanlang va sababini yozing:

  1. index.html, style.css
  2. deploy.sh — faqat Ali ishga tushiradi
  3. .env — baza paroli
  4. Biror narsa ishlamay qoldi, kimdir chmod -R 777 sayt/ ni taklif qildi. Nima deysiz?
Yechim
  1. 644 — Ali tahrirlaydi, qolganlar (jumladan www-data) faqat o'qiydi.
  2. 700 — faqat Ali o'qiydi, o'zgartiradi va ishga tushiradi. Boshqalarga bu skript kerak emas.
  3. 600 — faqat egasi o'qiydi. Aslida .env ni ishlatadigan ilova foydalanuvchisi uning egasi bo'lishi kerak.
  4. Rad etasiz. 777 — hammaga yozish huquqi: har qanday dastur yoki hujumchi fayllarni o'zgartira oladi va .env ni o'qiy oladi. To'g'ri yo'l — xato xabarini o'qib, aynan qaysi foydalanuvchiga qaysi huquq yetishmayotganini topish.

11. Real ishda

  • Deploy: serverga yuklangan skriptlar chmod +x qilinadi, maxfiy fayllar 600 qilinadi. Bu kursning Linux server qismida har kuni uchraydi.
  • SSH kalitlar: ~/.ssh papkasi — 700, maxfiy kalit — 600. Aks holda ulanish ishlamaydi.
  • Docker va CI: konteynerlarda ilovani root'dan boshqa foydalanuvchi nomidan ishga tushirish — xavfsizlik bo'yicha tekshiruvlarning standart talabi. Bu vositalarni kursda keyinroq o'rganamiz.
  • Intervyu savoli: "chmod 755 va chmod 644 nimani bildiradi? Nega 777 yomon?" — backend va DevOps intervyularida ko'p beriladi.

Xulosa

  • Har fayl egasi va guruhiga ega. Ruxsat uch toifa (egasi, guruh, boshqalar) uchun alohida yoziladi.
  • r — o'qish, w — yozish, x — ishga tushirish. Papkada x — ichiga kirish, w — ichida yaratish va o'chirish.
  • Raqamda r = 4, w = 2, x = 1: 755 — skript va papka, 644 — oddiy fayl, 600 — maxfiy fayl.
  • chmod ruxsatni, chown egasini o'zgartiradi. sudo bitta buyruqni root huquqi bilan bajaradi.
  • Windows'da buning o'rnida Administrator va UAC oynasi.
  • chmod 777 — hech qachon to'g'ri javob emas. Eng kam huquq tamoyiliga amal qiling.

Keyingi dars: Qator oxiri (CRLF/LF), inode va symlink — Windows va Linux fayllarni nega biroz boshqacha yozishini va bu qanday xatolarga olib kelishini ko'ramiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Fayl ruxsatlari va foydalanuvchilar — IlmHamroh