Linux’ta Dosya İzinlerini Kontrol Etme: Tam Bir Rehber
Linux, dünyanın çoğu sunucusunu güçlendirir — VPS Hosting ortamlarından kurumsal düzey Dedicated Servers‘a kadar — ve bunun iyi nedenleri vardır. Hızlı, istikrarlı ve güvenlik merkezli olarak inşa edilmiştir. Bu güvenliğin en temel ayaklarından biri dosya izin sistemidir: herhangi bir dosya veya dizinde kimin okuyabileceğini, değiştirebileceğini veya çalıştırabileceğini tam olarak kontrol eden hassas ve zarif bir mekanizma.
Web uygulaması dağıtan bir geliştirici, sunucu güvenliğini sağlamlaştıran bir sistem yöneticisi veya komut satırını öğrenen bir başlangıç seviyesi kullanıcı olsanız da, Linux’ta dosya izinlerini kontrol etmeyi ve yorumlamayı anlamak vazgeçilmez bir beceridir. Bu kılavuz, izin modelinin temellerinden ileri özel bitlere kadar her şeyi kapsar — pratik komutlar ve gerçek dünya örnekleriyle.
Linux Dosya İzinleri Nedir?
Linux’taki her dosya ve dizinin kendisine bağlı bir dizi izin vardır. Bu izinler hangi işlemlere izin verildiğini ve kimin tarafından izin verildiğini tanımlar. Üç temel izin türü vardır:
| İzin | Sembol | Dosyada Ne Yapar | Dizinde Ne Yapar |
|---|---|---|---|
| Okuma | r | Dosyanın içeriğini görüntüle | İçindeki dosyaların adlarını listele |
| Yazma | w | Dosyayı değiştir veya sil | İçinde dosya oluştur veya kaldır |
| Çalıştırma | x | Dosyayı program olarak çalıştır | Dizine gir (içine git) |
Bu üç izin, üç farklı kullanıcı kategorisine bağımsız olarak uygulanır:
- Sahip (kullanıcı) — Dosyaya sahip olan kullanıcı, tipik olarak onu oluşturan kişi.
- Grup — Dosyanın atanan grubuna ait olan herhangi bir kullanıcı.
- Diğerleri — Sistemdeki diğer herkes.
Bu üç-üçlü izin matrisi, Linux yöneticilerine sistemdeki her kaynağa erişim üzerinde ayrıntılı ve güçlü kontrol sağlar.
Dosya İzinleri Nasıl Kontrol Edilir: ls -l Komutu
Dosya izinlerini kontrol etmenin en hızlı ve en yaygın kullanılan yöntemi ls -l komutudur (uzun listeleme formatı).
ls -l file.txtÖrnek çıktı:
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 file.txtBu çıktının her bir bileşenini açıklayalım:
- rw- r-- r-- 1 alice developers 1024 Aug 16 12:30 file.txt
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ Filename
│ │ │ │ │ │ │ │ └─ Last modified
│ │ │ │ │ │ │ └─ File size (bytes)
│ │ │ │ │ │ └─ Group name
│ │ │ │ │ └─ Owner name
│ │ │ │ └─ Number of hard links
│ │ │ └─ Others' permissions
│ │ └─ Group's permissions
│ └─ Owner's permissions
└─ File type (- = regular file, d = directory, l = symlink)Yani -rw-r--r-- bize şunu söyler:
- Sahip (
alice): Okuma + Yazma (rw-) - Grup (
developers): Yalnızca okuma (r--) - Diğerleri: Yalnızca okuma (
r--)
Birden Fazla Dosya İçin İzinleri Kontrol Etme
Bir dizindeki tüm dosyaların izinlerini aynı anda görmek için:
ls -la /var/www/html-a bayrağı gizli dosyaları (nokta ile başlayanlar) içerir. Bu, bir Paylaşımlı Web Barındırma veya VPS ortamında web sunucusu dizinlerini denetlerken özellikle yararlıdır.
stat ile Ayrıntılı İzin Bilgilerini Alma
Daha kapsamlı bir analiz için — hem sembolik hem de sayısal gösterimleri içeren — stat komutunu kullanın:
stat file.txtÖrnek çıktı:
File: file.txt
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 131073 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)
Access: 2024-08-16 12:30:00.000000000 +0000
Modify: 2024-08-16 12:30:00.000000000 +0000
Change: 2024-08-16 12:30:00.000000000 +0000Önemli satır şudur:
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)Bu size şunları verir:
- Sayısal (sekizli) gösterim:
0644 - Sembolik gösterim:
-rw-r--r-- - Kullanıcı Kimliği (UID) ve Grup Kimliği (GID) ile bunların okunabilir adları
stat komutu, üretim sunucularında izin hatalarını giderirken çok değerlidir, çünkü tek bir çıktıda ihtiyaç duyduğunuz tüm bağlamı sağlar.
Sayısal (Sekizli) İzin Gösterimini Anlamak
Linux izinleri sayılar olarak ifade edilebilir, bu da chmod gibi komutlar tarafından kullanılan formattır. Her izin türüne bir değer atanır:
| İzin | Sayısal Değer |
|---|---|
Okuma (r) | 4 |
Yazma (w) | 2 |
Yürütme (x) | 1 |
İzin yok (-) | 0 |
Her kullanıcı kategorisi için izin değerini değerleri toplayarak hesaplarsınız:
| Kombinasyon | Hesaplama | Sayısal Değer |
|---|---|---|
rwx | 4 + 2 + 1 | 7 |
rw- | 4 + 2 + 0 | 6 |
r-x | 4 + 0 + 1 | 5 |
r-- | 4 + 0 + 0 | 4 |
--- | 0 + 0 + 0 | 0 |
Üç basamaklı bir sekizli sayı tam izin setini temsil eder:
0644 → Owner: 6 (rw-) | Group: 4 (r--) | Others: 4 (r--)
0755 → Owner: 7 (rwx) | Group: 5 (r-x) | Others: 5 (r-x)
0700 → Owner: 7 (rwx) | Group: 0 (---) | Others: 0 (---)Dizinlerde İzinleri Kontrol Etme
Dizinler aynı izin modelini kullanır, ancak her bitin anlamı biraz farklıdır. ls -ld kullanın (-d bayrağına dikkat edin) bir dizinin içeriği yerine dizinin kendisini incelemek için:
ls -ld myfolderÖrnek çıktı:
drwxr-x--- 2 alice developers 4096 Aug 16 12:30 myfolderBaşındaki d bunun bir dizin olduğunu doğrular. İzinler şu şekilde ayrılır:
- Sahip (
alice):rwx— Dosyaları listeleyebilir, oluşturabilir/silebilir ve dizine girebilir - Grup (
developers):r-x— Dosyaları listeleyebilir ve girebilir, ancak oluşturamaz veya silemez - Diğerleri:
---— Hiçbir erişim yok
> Önemli: Bir dizin üzerindeki execute biti (x), onu girme yeteneği anlamına gelir (yani cd kullanmak). x olmadan, bir kullanıcı okuma izni olsa bile dizine gidemez. Bu, yeni başlayanlar için yaygın bir karışıklık kaynağıdır.
Özel İzin Bitleri: setuid, setgid ve Sticky Bit
Standart dokuz izin bitinin ötesinde, Linux özel izin bitleri olarak adlandırılan ve gelişmiş erişim kontrolü sağlayan üç biti destekler:
1. setuid (s sahibinin yürütme bitinde)
Yürütülebilir bir dosya üzerinde ayarlandığında, program çağıran kullanıcının ayrıcalıkları yerine dosya sahibinin ayrıcalıklarıyla çalışır. Bu, passwd gibi komutların normal kullanıcıların /etc/shadow (root tarafından sahip olunan) dosyasını değiştirmesine izin vermesinin nedenidir.
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwdSahibinin yürütme konumundaki s, setuid’i gösterir.
2. setgid (s grubun yürütme bitinde)
Dosya üzerinde, program grubun ayrıcalıklarıyla çalışır. Dizin üzerinde, içinde oluşturulan yeni dosyalar otomatik olarak dizinin grubunu devralır — paylaşılan proje klasörleri için kullanışlıdır.
ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project3. Sticky Bit (t diğerlerinin yürütme bitinde)
Dizin üzerinde ayarlandığında, yalnızca dosyanın sahibi (veya root) içindeki dosyaları silebilir veya yeniden adlandırabilir, diğerlerinin yazma izni olsa bile. Bu, /tmp için standart yapılandırmadır:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpSonundaki t, sticky bitin etkin olduğunu gösterir.
Özel bitlerin sayısal temsili:
| Özel Bit | Sayısal Değer |
|---|---|
| setuid | 4000 |
| setgid | 2000 |
| Sticky bit | 1000 |
Yani drwxrwxrwt = 1777 (1000 + 777).
Tam İzin Referans Tablosu
| Sembolik | Sayısal | Dosya Üzerindeki Anlamı | Dizin Üzerindeki Anlamı |
|---|---|---|---|
--- | 0 | Erişim yok | Erişim yok |
--x | 1 | Yalnızca yürütme | Yalnızca giriş |
-w- | 2 | Yalnızca yazma | İçeriği değiştir (x ile) |
-wx | 3 | Yazma + Yürütme | Giriş ve değiştirme |
r-- | 4 | Yalnızca okuma | Adları listele (x gerekli) |
r-x | 5 | Okuma + Yürütme | Listele ve gir |
rw- | 6 | Okuma + Yazma | Listele ve değiştir (girmeden) |
rwx | 7 | Tam erişim | Tam kontrol |
Gerçek Dünya İzin Örnekleri
Pratikte karşılaşacağınız en yaygın izin desenleri şunlardır:
-rw-r--r-- (0644) — Standart Dosya
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 config.txtSahip okuyabilir ve yazabilir. Grup ve diğerleri yalnızca okuyabilir. Yapılandırma dosyaları ve web içeriği için tipiktir.
-rwxr-xr-x (0755) — Çalıştırılabilir Betik veya İkili
-rwxr-xr-x 1 alice developers 4096 Aug 16 12:30 deploy.shSahip tam erişime sahiptir. Diğer herkes okuyabilir ve çalıştırabilir ancak değiştiremez. Shell betikleri, web sunucusu ikilileri ve genel çalıştırılabilirler için standarttır.
-rw------- (0600) — Özel Dosya
-rw------- 1 alice alice 1679 Aug 16 12:30 id_rsaYalnızca sahip okuyabilir veya yazabilir. Başka kimse için erişim yok. SSH özel anahtarları için gereklidir — SSH, daha geniş izinlere sahip bir anahtar dosyasını kullanmayı reddedecektir.
drwxr-xr-x (0755) — Standart Genel Dizin
drwxr-xr-x 5 alice developers 4096 Aug 16 12:30 public_htmlWeb kök dizinleri için yaygındır. Sahip tam kontrole sahiptir; diğerleri göz atabilir ve girebilir.
drwx------ (0700) — Özel Dizin
drwx------ 3 alice alice 4096 Aug 16 12:30 .sshTamamen özel. Yalnızca sahip erişebilir. ~/.ssh dizini için gereklidir.
drwxrwxrwt (1777) — Herkes Tarafından Yazılabilir ve Yapışkan Bit
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpHerkes dosya oluşturabilir, ancak yalnızca her dosyanın sahibi kendi dosyalarını silebilir.
Sunucu Ortamları için Pratik İpuçları
Bir Linux sunucusunu yönetiyorsanız — ister bir web uygulaması çalıştıran bir VPS, ister bir SSL Certificate ile güvenli hale getirilmiş bir posta sunucusu, ister Domain Registration aracılığıyla kayıtlı birden fazla etki alanını barındıran bir makine olsun — işte bazı temel izin en iyi uygulamaları:
- Dosyalar veya dizinlerde 777 asla ayarlamayın çok spesifik, geçici bir nedeniniz olmadığı sürece. Dünya tarafından yazılabilir dosyalar büyük bir güvenlik riski oluşturur.
- Web sunucusu dosyaları (örneğin,
/var/www/altında) tipik olarak dosyalar için644ve dizinler için755olmalı, uygulama kullanıcınız tarafından sahiplenilmelidir. - SSH anahtarları özel anahtarlar için
600ve ortak anahtarlar için644olmalıdır. SSH bunu kesinlikle uygular. - Parolalar veya API anahtarları içeren yapılandırma dosyaları
600veya en fazla640olmalıdır. - Bir dizin ağacında izinleri denetlemek için
findkullanın:
# Find all world-writable files (potential security risk)
find /var/www -type f -perm -o+w
# Find all SUID files (for security auditing)
find / -type f -perm -4000 2>/dev/nullHızlı Komut Referansı
| Görev | Komut |
|---|---|
| Bir dosyanın izinlerini listele | ls -l filename |
| Bir dizindeki tüm dosyaların izinlerini listele | ls -la /path/to/dir |
| Dizinin kendisinin izinlerini kontrol et | ls -ld /path/to/dir |
| Sayısal izinler dahil tam detayları al | stat filename |
| İzinleri değiştir (sembolik) | chmod u+x filename |
| İzinleri değiştir (sayısal) | chmod 755 filename |
| Dosya sahibini değiştir | chown user:group filename |
| İzinleri özyinelemeli olarak değiştir | chmod -R 755 /path/to/dir |
| Herkese açık yazılabilir dosyaları bul | find . -perm -o+w -type f |
Sonuç
Linux dosya izinlerini anlamak sadece akademik bir alıştırma değildir — sunucuları yönetenlerin, uygulamaları dağıtanların veya Linux ortamında çalışanların günlük pratik becerisidir. Ana çıkarımları özetlemek gerekirse:
ls -lkullanın dosya ve dizinlerdeki izinlerin hızlı, insan tarafından okunabilir bir özeti için.statkullanın hem sembolik hem de sayısal gösterimlere, sahiplik detaylarına ihtiyacınız olduğunda.- Her iki notasyona da hakim olun — sembolik (
rwx) ve sayısal (755,644) — farklı araçlar ve belgeler her ikisini birbirinin yerine kullandığından. - Dizin farkını unutmayın: bir dizinde execute biti (
x) onu çalıştırma değil, içine girme yeteneği anlamına gelir. - Özel bitler hakkında bilgi sahibi olun — setuid, setgid ve sticky bit — çünkü bunlar üretim sistemlerinde sık görülür ve önemli güvenlik sonuçları vardır.
Uygun izin yönetimi Linux güvenliğinin temel taşıdır. VPS Hosting üzerinde kişisel bir proje çalıştırıyor olsanız veya Dedicated Servers filosunu yönetiyor olsanız, başından itibaren izinleri doğru şekilde ayarlamak sizi güvenlik açıklarından, bozuk uygulamalardan ve sayısız saatlık sorun giderme çabalarından kurtaracaktır.
tasarruf edin