Teknoloji ipuçlarını kendin uygula
İçerik
Son yazılar
Biz kimiz
Ağ, bulut ve sistem yönetimi konularında pratik rehberler. Adım adım açıklamalar ve gerçek sorunlara çözümler sunuyoruz.

Linux Dosya İzinleri ve Sahipliği

Bir sunucuya ilk kez bağlandığımda beni en çok zorlayan şey servis kurmak değildi; "Permission denied" hatasıydı. Web sunucusu dosyayı okuyamıyordu, yazdığım script çalışmıyordu, SSH anahtarımı kabul etmiyordu. Sonunda oturup izin sistemini baştan öğrendim ve o günden beri sunucu tarafındaki sorunların yarısını tek bakışta çözüyorum. Aşağıda kendi kendime öğretir gibi, sırayla anlatıyorum.

İzinleri Okumayı Öğrenmek

Her şey ls -l çıktısını doğru okumaktan başlıyor. Bir dizinde bu komutu çalıştırdığımda şuna benzer satırlar görüyorum:

-rw-r--r-- 1 ahmet developers 1240 index.html

Baştaki on karakteri parça parça çözüyorum:

Ardından gelen ahmet sahibi, developers ise grubu gösteriyor. Yani bu dosyayı ahmet okuyup yazabilir, developers grubundaki kullanıcılar ve diğer herkes sadece okuyabilir.

Adım Adım Uygulama

  1. Sayısal karşılıkları ezberle. chmod chown linux işlerinde en çok kullanılan gösterim sayısal olan. Mantığı çok basit: okuma 4, yazma 2, çalıştırma 1. Bunları topluyorsun.

    SayıİzinAnlamı
    7rwxoku, yaz, çalıştır
    6rw-oku, yaz
    5r-xoku, çalıştır
    4r--sadece oku
    0---hiçbir izin yok

    Üç haneli yazarken sıra hep aynı: sahip, grup, diğerleri. chmod 644 index.html dediğimde sahibe okuma-yazma, kalanlara sadece okuma vermiş oluyorum.

  2. Sembolik yazımı da öğren, çünkü daha güvenli. Sayısal yazım mevcut izinleri tamamen ezer. Ben sadece bir izin eklemek istediğimde harflerle çalışıyorum:

    • chmod +x deploy.sh → çalıştırma izni ekler
    • chmod g+w rapor.txt → gruba yazma izni ekler
    • chmod o-r gizli.conf → diğerlerinden okuma iznini alır
    • chmod u=rw,go= anahtar.key → sahibe oku-yaz, kalanlara hiçbir şey

    Burada u user, g group, o others, a ise hepsi anlamına geliyor.

  3. Dizinlerde "x" izninin ne demek olduğunu kavra. Bu beni uzun süre yanılttı. Dizinde çalıştırma izni, "içine girebilme" demek. Bir dizinde r varsa içindekilerin listesini görebilirim ama x yoksa o dosyalara erişemem. Bu yüzden dizinler genelde 755, normal dosyalar 644 olur.

  4. Sahipliği chown ile değiştir. İzin ayarlamak bazen yetmez; dosyanın doğru kullanıcıya ait olması gerekir. Söz dizimi chown kullanıcı:grup dosya şeklinde:

    • sudo chown ahmet rapor.txt → sadece sahibi değiştirir
    • sudo chown ahmet:developers rapor.txt → sahip ve grubu birlikte
    • sudo chgrp developers rapor.txt → sadece grubu değiştirir

    Sahiplik değiştirmek için neredeyse her zaman root yetkisi, yani sudo gerekir.

  5. Özyinelemeli işlemleri dikkatli kullan. -R parametresi bir dizinin altındaki her şeye aynı işlemi uygular. Bir web dizininin sahipliğini toptan düzeltmek için kullandığım kalıp şu: sudo chown -R www-data:www-data /var/www/site. Ama izinlerde chmod -R 755 demek dosyaları da çalıştırılabilir yapar. Onun yerine ayırıyorum:

    • Dizinler için: find /var/www/site -type d -exec chmod 755 {} +
    • Dosyalar için: find /var/www/site -type f -exec chmod 644 {} +
  6. Hassas dosyalarda katı ol. SSH ile uzaktan bağlantı kurarken özel anahtarın izni gevşekse sunucu bağlantıyı reddeder. Kural olarak ~/.ssh dizini 700, özel anahtar 600, authorized_keys 600 olmalı. Aynı mantık veritabanı şifresi taşıyan yapılandırma dosyaları için de geçerli: 600 ver, kimse okumasın.

  7. Özel bitleri tanı. Nadiren gerekir ama gördüğünde şaşırmamak lazım. chmod +t /paylasim ile eklenen sticky bit, ortak dizinde herkesin sadece kendi dosyasını silmesini sağlar (/tmp böyle çalışır). SetUID biti ise programın sahibi yetkisiyle çalışmasına izin verir; kendi scriptlerinde kullanmaktan uzak dur.

  8. Yeni dosyaların varsayılanını umask belirler. Terminalde umask yazınca genelde 0022 görürüm; bu yüzden oluşturduğum dosyalar 644, dizinler 755 olarak doğar. Varsayılanı değiştirmek istiyorsan bu değeri kabuk yapılandırmana yazabilirsin.

Sık Yapılan Hatalar