Ruxsatlar — rwx, chmod, raqamli yozuv (755, 644)
Muammodan boshlaylik
Skript yozdingiz va ishga tushirmoqchisiz:
./deploy.sh
bash: ./deploy.sh: Permission denied
Yoki Nginx saytni ko'rsatmayapti — logda 13: Permission denied. Yoki SSH kalitingiz bilan ulanmayapti:
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for '/home/otabek/.ssh/id_ed25519' are too open.
Uchala muammoning ildizi bitta — fayl ruxsatlari. Linux da har bir fayl kim uni o'qiy, o'zgartira va ishga tushira olishini aniq belgilaydi.
Ruxsatlarni o'qish
ls -l
-rwxr-xr-- 1 otabek dasturchilar 1240 Nov 6 12:00 deploy.sh
Birinchi 10 belgi:
- rwx r-x r--
tur egasi guruh boshqalar
- tur:
-fayl,dpapka,lhavola - egasi (user,
u) —otabek - guruh (group,
g) —dasturchilarguruhi a'zolari - boshqalar (others,
o) — qolgan hamma
Har bir uchlikda:
| Belgi | Fayl uchun | Papka uchun |
|---|---|---|
| r (read) | Mazmunini o'qish | Ichidagi nomlarni ko'rish (ls) |
| w (write) | O'zgartirish | Ichida fayl yaratish, o'chirish, nomini o'zgartirish |
| x (execute) | Dastur sifatida ishga tushirish | Ichiga kirish (cd) va fayllarga murojaat |
| - | Ruxsat yo'q |
Yuqoridagi misol:
otabek— o'qiy, yoza, ishga tushira oladidasturchilarguruhi — o'qiy va ishga tushira oladi, o'zgartira olmaydi- Boshqalar — faqat o'qiy oladi
[!INFO] Papka uchun
xmuhim:xsiz papkagacdqilib bo'lmaydi va ichidagi fayllarni ochib bo'lmaydi — hatto ularning o'zida ruxsat bo'lsa ham. Nginx saytni ko'rsata olmasligining tez-tez uchraydigan sababi — yo'ldagi papkalardan biridaxyo'qligi.
Raqamli yozuv
Har bir ruxsatning qiymati bor:
| Ruxsat | Qiymat |
|---|---|
| r | 4 |
| w | 2 |
| x | 1 |
Har bir uchlik — yig'indi:
rwx = 4+2+1 = 7
rw- = 4+2 = 6
r-x = 4 +1 = 5
r-- = 4 = 4
--- = 0
Uch raqam — egasi, guruh, boshqalar:
rwxr-xr-x = 755
rw-r--r-- = 644
rw------- = 600
Tipik qiymatlar — yod oling
| Raqam | Ko'rinish | Qayerda |
|---|---|---|
| 644 | rw-r--r-- |
Oddiy fayllar: kod, HTML, sozlamalar |
| 755 | rwxr-xr-x |
Papkalar, skriptlar, dasturlar |
| 600 | rw------- |
Maxfiy: .env, SSH kalit, parollar |
| 700 | rwx------ |
Shaxsiy papka: ~/.ssh |
| 640 | rw-r----- |
Guruh o'qishi kerak bo'lgan sozlama |
| 777 | rwxrwxrwx |
❌ Deyarli hech qachon |
chmod — ruxsatlarni o'zgartirish
Raqamlar bilan
chmod 755 deploy.sh
chmod 644 index.html
chmod 600 .env
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
Belgilar bilan
chmod +x deploy.sh # hammaga ishga tushirish huquqi
chmod u+x deploy.sh # faqat egasiga
chmod g+w fayl.txt # guruhga yozish
chmod o-r maxfiy.txt # boshqalardan o'qishni olib tashlash
chmod go-rwx .env # guruh va boshqalardan hamma narsani
chmod u=rw,go=r fayl.txt # aniq o'rnatish (= 644)
u egasi, g guruh, o boshqalar, a hammasi; + qo'shish, - olib tashlash, = aniq.
Endi skript ishlaydi:
chmod +x deploy.sh
./deploy.sh
Rekursiv
chmod -R 755 /var/www/dokon
[!WARNING]
chmod -R 755fayllarga hamxberadi — bu kerak emas. To'g'ri usul — papkalar va fayllarga alohida:find /var/www/dokon -type d -exec chmod 755 {} + find /var/www/dokon -type f -exec chmod 644 {} +
chmod 777 — nega yomon
Internetda "Permission denied" ga ko'p javob: chmod -R 777. Bu "eshikni olib tashlash" bilan teng:
- Har kim — har qanday foydalanuvchi va har qanday buzilgan xizmat — faylni o'zgartira oladi
- Veb-papkada: hujumchi zararli PHP fayl yozadi va ishga tushiradi
- SSH kalit 777 bo'lsa — SSH uni umuman ishlatmaydi
To'g'ri yondashuv: kim kirishi kerakligini aniqlang va aynan unga ruxsat bering — egasini o'zgartirish (21-dars) yoki guruhga qo'shish orqali.
Amaliy holatlar
"Permission denied" — tashxis
ls -l fayl # fayl ruxsatlari va egasi
id # men kimman, qaysi guruhlarda
namei -l /var/www/dokon/index.html # butun yo'l bo'ylab ruxsatlar
f: /var/www/dokon/index.html
drwxr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwx------ otabek otabek dokon ← muammo shu yerda!
-rw-r--r-- otabek otabek index.html
namei -l — yo'ldagi har bir papkani ko'rsatadi. dokon papkasi 700 — Nginx (www-data) unga kira olmaydi.
sudo -u www-data cat /var/www/dokon/index.html # tekshirish
SSH kalitlar
SSH ruxsatlar bo'yicha juda qat'iy (34-dars):
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/id_ed25519.pub
.env fayl
chmod 600 .env
Faqat egasi (ilova foydalanuvchisi) o'qiy oladi.
Nima uchun shunday?
Nima uchun ruxsatlar uchta guruhga (egasi, guruh, boshqalar) bo'lingan — har bir foydalanuvchi uchun alohida emas?
Bu 1970-yillardagi oddiylik va samaradorlik tanlovi: har bir faylga atigi 9 bit (va egasi + guruh raqamlari) — juda kam joy, juda tez tekshiruv. Va bu model ajablanarli darajada ko'p holatni qamraydi: "men", "jamoam", "qolganlar". Murakkabroq holatlar uchun guruhlar ishlatiladi — "dasturchilar" guruhiga 10 kishi qo'shiladi, faylga esa bitta guruh ruxsati beriladi. Juda nozik holatlar uchun Linux da ACL (setfacl) ham bor, lekin amalda 95% holatlarda rwx yetarli.
Xulosa
Eslab qoling:
-rwxr-xr--: tur + egasi + guruh + boshqalar- r=4, w=2, x=1; uch raqam — egasi/guruh/boshqalar
- Papka uchun
x— ichiga kirish huquqi - 644 fayllar, 755 papka va skriptlar, 600 maxfiy, 700 shaxsiy papka
chmod 755 fayl,chmod +x skript.sh,chmod go-rwx .env-Rdan ehtiyot — fayl va papkalarga alohidafindbilan- 777 — yo'q
- Tashxis:
ls -l,id,namei -l yo'l,sudo -u www-data
Keyingi dars
21-dars: Egalik va maxsus bitlar — chown, umask, setuid, sticky