🔐 İzinler & Kullanıcılar

İzinler & Kullanıcılar: Linux dosya izinleri üç-kitleli bir erişim kontrol sistemidir: her dosyanın "kim ne yapabilir" sorusuna tam üç cevabı vardır — owner (sahip), aynı gruptak

Linux dosya izinleri üç-kitleli bir erişim kontrol sistemidir: her dosyanın "kim ne yapabilir" sorusuna tam üç cevabı vardır — owner (sahip), aynı gruptakiler ve diğer herkes — ve her cevap üç bittir: okuma (r), yazma (w), çalıştırma (x). Mekanizma, Java'nın access modifier'larını neredeyse birebir yansıtır: `private` (sadece sahip, `chmod 700`), package-private (grup erişebilir, `chmod 750`), `public` (herkes okuyabilir, `chmod 644`) — fark şu ki Linux bunu gerçek dosyalara işletim sistemi seviyesinde uygular, sadece sınıf üyelerine değil. Ama her QA mühendisinin ilk CI hatasında karşılaştığı soru şudur: script'i kendi laptop'umda okuyabiliyorsam pipeline neden "Permission denied" diyor? Çünkü okuma (r) ve çalıştırma (x) tamamen ayrı iki bittir — bir dosya okunabilir ama çalıştırılamaz olabilir; `./run-tests.sh` çağırmaya çalışan bir test runner'ın `x` biti set edilmiş olmasına ihtiyacı vardır, sadece `r` yetmez. Pratikte execute bitini commit'e dahil etmeyi unutmak (`git update-index --chmod=+x`), QA otomasyonunda en yaygın CI-only hata nedenlerinden biridir: script editörde düzgün görünür, test local'de geçer, sonra her pipeline çalıştırması hemen birinci satırda anlaşılması zor bir "Permission denied" ile patlar ve bunu `chmod +x` eksikliğine bağlamak otuz dakika alır.

"ls -l" Çıktısını Okumak

`-rwxr-xr-- 1 qa qa 4096 Jun 19 10:00 deploy.sh` gibi bir satır şöyle ayrışır: dosya tipi (- = normal dosya, d = klasör), ardından owner / group / other için üçer harflik üç grup izin (rwx), bir link sayısı, sahip adı, grup adı, boyut, tarih ve dosya adı.

chmod — Sayısal İzin Değerleri

linux-permissions-lab

Permission Denied Atölyesi

Bir CI script'inin execute izni olmadan neden patladığını gör.

`chown yenisahip:yenigrup dosya` bir dosyanın sahibini değiştirir. `sudo` (superuser do) tek bir komutu root (yönetici) yetkisiyle çalıştırır. Her komutun önüne reflekssel olarak `sudo` koyma alışkanlığı edinme — sadece gerçekten yükseltilmiş erişim gereken komutlarda kullan, örn. sistem paketi kurmak veya servisleri yönetmek.

İzinleri ve sahipliği değiştirmek

🎬 x Biti: Kapıdaki Görünmez Bekçi

`ls -l` bir kimlik kartı okur: `-rw-r--r--` = üç seyirci (👤 owner / 👥 group / 🌍 others), her birine üç bit (r okuma, w yazma, x çalıştırma).

Kritik ayrım: r ve x TAMAMEN AYRI bitlerdir. Dosyayı okuyabiliyor, hatta düzenleyebiliyor olman, ÇALIŞTIRABİLECEĞİN anlamına gelmez — editörde kusursuz görünen script çalıştırılamaz olabilir.

CI runner `./run-tests.sh` çağırır. Kernel kapıda x bitine bakar: YOK. Sonuç: satır 1'de "Permission denied" — içerik hiç okunmadan, kapıda reddedilir.

Peki local'de neden çalışıyordu? Çünkü `bash run-tests.sh` diye çağırıyordun — orada ÇALIŞAN bash'tir, dosya sadece OKUNUR (r yeter). `./run-tests.sh` ise dosyanın KENDİSİNİ çalıştırır, x ister.