Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Linux Yönetim

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:

İzinSembolDosyada Ne YaparDizinde Ne Yapar
OkumarDosyanın içeriğini görüntüleİçindeki dosyaların adlarını listele
YazmawDosyayı değiştir veya silİçinde dosya oluştur veya kaldır
ÇalıştırmaxDosyayı program olarak çalıştırDizine 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.txt

Bu çı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:

İzinSayı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:

KombinasyonHesaplamaSayısal Değer
rwx4 + 2 + 17
rw-4 + 2 + 06
r-x4 + 0 + 15
r--4 + 0 + 04
---0 + 0 + 00

Üç 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 myfolder

Başı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/passwd

Sahibinin 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/project

3. 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 /tmp

Sonundaki t, sticky bitin etkin olduğunu gösterir.

Özel bitlerin sayısal temsili:

Özel BitSayısal Değer
setuid4000
setgid2000
Sticky bit1000

Yani drwxrwxrwt = 1777 (1000 + 777).

Tam İzin Referans Tablosu

SembolikSayısalDosya Üzerindeki AnlamıDizin Üzerindeki Anlamı
---0Erişim yokErişim yok
--x1Yalnızca yürütmeYalnızca giriş
-w-2Yalnızca yazmaİçeriği değiştir (x ile)
-wx3Yazma + YürütmeGiriş ve değiştirme
r--4Yalnızca okumaAdları listele (x gerekli)
r-x5Okuma + YürütmeListele ve gir
rw-6Okuma + YazmaListele ve değiştir (girmeden)
rwx7Tam erişimTam 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.txt

Sahip 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.sh

Sahip 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_rsa

Yalnı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_html

Web 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 .ssh

Tamamen ö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 /tmp

Herkes 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ı:

  1. 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.
  2. Web sunucusu dosyaları (örneğin, /var/www/ altında) tipik olarak dosyalar için 644 ve dizinler için 755 olmalı, uygulama kullanıcınız tarafından sahiplenilmelidir.
  3. SSH anahtarları özel anahtarlar için 600 ve ortak anahtarlar için 644 olmalıdır. SSH bunu kesinlikle uygular.
  4. Parolalar veya API anahtarları içeren yapılandırma dosyaları 600 veya en fazla 640 olmalıdır.
  5. Bir dizin ağacında izinleri denetlemek için find kullanı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/null

Hızlı Komut Referansı

GörevKomut
Bir dosyanın izinlerini listelels -l filename
Bir dizindeki tüm dosyaların izinlerini listelels -la /path/to/dir
Dizinin kendisinin izinlerini kontrol etls -ld /path/to/dir
Sayısal izinler dahil tam detayları alstat filename
İzinleri değiştir (sembolik)chmod u+x filename
İzinleri değiştir (sayısal)chmod 755 filename
Dosya sahibini değiştirchown user:group filename
İzinleri özyinelemeli olarak değiştirchmod -R 755 /path/to/dir
Herkese açık yazılabilir dosyaları bulfind . -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 -l kullanın dosya ve dizinlerdeki izinlerin hızlı, insan tarafından okunabilir bir özeti için.
  • stat kullanı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.