1. Home
  2. Docs
  3. Linux
  4. Terminal
  5. chmod ve chown ile Linux Dosya İzinleri ve Sahiplik Yönetimi

chmod ve chown ile Linux Dosya İzinleri ve Sahiplik Yönetimi

Print

Linux tabanlı sistemlerde çok kullanıcılı (multi-user) mimarinin en temel direği Linux dosya izinleri ve dosya sahipliği mekanizmasıdır. İster bir web sunucusu barındırın, ister gömülü Linux üzerinde arka plan servisleri çalıştırın; hatalı yapılandırılmış izinler sisteminizi güvenlik açıklarına karşı savunmasız bırakabilir veya servislerin çalışmasını durdurabilir.

Bu rehberde; Linux izin mantığını (oktal ve sembolik gösterim), chmod ve chown komutlarının pratik kullanımını, özel yetkilendirme bayraklarını (SUID, SGID, Sticky Bit) ve umask değerlerini derinlemesine inceleyeceğiz.


Linux İzin Yapısının Anatomisi

Bir dizinde ls -l komutunu çalıştırdığınızda dosya ve dizinlerin başında 10 karakterlik bir izin dizesi görürsünüz:

ls -l /var/www/html/index.php
-rwxr-xr-- 1 www-data www-data 4096 Oct 12 12:00 index.php

Bu dizeyi 4 temel bloğa ayırabiliriz:

BlokKarakterlerAnlamı
Dosya Tipi-Standart dosya (d: dizin, l: sembolik link, c: karakter aygıtı)
Kullanıcı (Owner / u)rwxDosya sahibinin izinleri (Okuma, Yazma, Çalıştırma)
Grup (Group / g)r-xDosyanın ait olduğu grubun izinleri (Okuma, Çalıştırma)
Diğerleri (Others / o)r--Sistemdeki diğer tüm kullanıcıların izinleri (Yalnızca Okuma)

Temel İzinlerin Anlamı

  1. Okuma (r – Read): Dosyalarda içeriği okuma (cat, less), dizinlerde ise ls ile dosya listesini görebilme iznidir.
  2. Yazma (w – Write): Dosyalarda içeriği değiştirme veya silme, dizinlerde ise içine yeni dosya oluşturma veya dosya silme hakkıdır.
  3. Çalıştırma (x – Execute): Dosyalarda betik veya ikili (binary) programı çalıştırma, dizinlerde ise cd ile dizinin içine girebilme iznidir.

Sayısal (Oktal) Notasyon Mantığı

Linux izinleri ikili (binary) tabanda 3 bitlik sayılarla ifade edilir:

İzinSembolİkili DeğerSayısal Değer
Okuma (Read)r1004
Yazma (Write)w0102
Çalıştırma (Execute)x0011
İzin Yok-0000

Bu değerlerin kombinasyonu izin grubunu oluşturur:

  • rwx = 4 + 2 + 1 = 7 (Tam Yetki)
  • rw- = 4 + 2 + 0 = 6 (Okuma ve Yazma)
  • r-x = 4 + 0 + 1 = 5 (Okuma ve Çalıştırma)
  • r-- = 4 + 0 + 0 = 4 (Salt Okunur)

Örneğin standart bir betik için 755 izni: Sahip=7 (rwx), Grup=5 (r-x), Diğerleri=5 (r-x) anlamına gelir.


chmod ile İzinleri Değiştirmek

chmod (change mode) komutu dosya ve dizinlerin erişim modunu değiştirmek için kullanılır.

1. Sayısal (Oktal) Yöntem

En yaygın ve hızlı yöntemdir:

# Betiğe çalıştırma izni ver (Sahip: rwx, Grup: r-x, Diğerleri: r-x)
chmod 755 deploy.sh

# Hassas yapılandırma dosyasını sadece sahibine aç (Sahip: rw-, Grup: yok, Diğer: yok)
chmod 600 ~/.ssh/id_ed25519

# Bir dizin ağacındaki TÜM dosya ve klasörleri özyinelemeli (recursive) değiştir
chmod -R 750 /opt/myproject

2. Sembolik Yöntem

Mevcut izinleri sıfırlamadan sadece belirli bir izni eklemek (+) veya kaldırmak (-) istediğinizde sembolik yöntem idealdir:

# Herkese çalıştırma izni ekle
chmod +x script.py

# Gruba yazma izni ekle
chmod g+w shared_folder/

# Diğer kullanıcıların (others) okuma iznini kaldır
chmod o-r database.env

# Kullanıcıya tam yetki ver, gruba ve diğerlerine sadece okuma ver
chmod u=rwx,g=r,o=r document.txt

chown ile Dosya ve Dizin Sahipliğini Değiştirmek

chown (change owner) komutu bir dosya veya dizinin sahibini ve grubunu değiştirmek için kullanılır. Genellikle sudo yetkisi gerektirir.

# Yalnızca dosya sahibini değiştir
sudo chown hakan app.log

# Hem sahibi hem grubu aynı anda değiştir (kullanici:grup)
sudo chown -R www-data:www-data /var/www/html/

# Sadece grubu değiştirmek (chgrp alternatifi)
sudo chown :developers project_source/

Önemli İpucu: find rehberimiz içinde gördüğümüz gibi, web projelerinde klasör izinlerini 755, dosya izinlerini ise 644 yapmak standarttır. Bunu tek seferde yapmak için:
“bash<br>find /var/www/html -type d -exec chmod 755 {} +<br>find /var/www/html -type f -exec chmod 644 {} +<br>“


İleri Düzey İzinler: SUID, SGID ve Sticky Bit

Standart izinlerin yetersiz kaldığı özel senaryolarda 4. oktal hane devreye girer.

1. SUID (Set User ID – Değer: 4)

Dosya çalıştırıldığında, onu çalıştıran kullanıcının değil, dosyanın sahibinin yetkileriyle çalışmasını sağlar. En bilinen örneği /usr/bin/passwd komutudur (normal kullanıcılar kendi şifrelerini değiştirirken root yetkisiyle /etc/shadow dosyasına yazar).

# SUID atama (Kullanıcı izinlerinde 's' görünür: -rwsr-xr-x)
sudo chmod 4755 /usr/local/bin/custom_tool
# veya
sudo chmod u+s /usr/local/bin/custom_tool

2. SGID (Set Group ID – Değer: 2)

Dizinler üzerinde uygulandığında, o dizin altında oluşturulan her yeni dosya, oluşturanın varsayılan grubu yerine dizinin grubunu miras alır. Ortak ekip çalışmalarında dosya paylaşımı için vazgeçilmezdir.

# SGID atama (Grup izinlerinde 's' görünür: drwxrwsr-x)
sudo chmod 2775 /shared/team_folder
# veya
sudo chmod g+s /shared/team_folder

3. Sticky Bit (Değer: 1)

Genellikle ortak yazılabilir dizinlerde (/tmp gibi) kullanılır. Bir dizinde Sticky Bit aktifse, kullanıcılar dizin içine dosya yazabilir ancak yalnızca kendi oluşturdukları dosyaları silebilirler. Başkalarının dosyalarını silemezler.

# Sticky Bit atama (Diğerleri izinlerinde 't' görünür: drwxrwxrwt)
sudo chmod 1777 /tmp/shared_scratch
# veya
sudo chmod +t /tmp/shared_scratch

umask Değeri Nedir?

Bir kullanıcı yeni bir dosya veya dizin oluşturduğunda, varsayılan olarak hangi izinlerle oluşturulacağını umask (user mask) belirler. Sistem varsayılanı genelde dizinler için 777, dosyalar için 666 baz alınarak umask değerinin çıkarılmasıyla hesaplanır:

umask
0022
  • Dizin varsayılanı: 777 - 022 = 755 (drwxr-xr-x)
  • Dosya varsayılanı: 666 - 022 = 644 (-rw-r--r--)

Umask değerini ~/.bashrc veya /etc/profile içinde umask 027 şeklinde tanımlayarak yeni oluşturulan dosyaların diğer kullanıcılara tamamen kapatılmasını sağlayabilirsiniz.


Güvenlik En İyi Pratikleri (Best Practices)

  1. 777 İzninden Kaçının: chmod -R 777 komutu hiçbir zaman sorun çözme yöntemi olarak kullanılmamalıdır. Herkesin yazabileceği dosyalar sisteme zararlı kod enjekte edilmesine yol açar.
  2. SSH Anahtarlarını Koruyun: Özel SSH anahtarları (~/.ssh/id_*) 600, .ssh dizini ise 700 izinlerine sahip olmalıdır. Aksi halde OpenSSH istemcisi güvenlik uyarısı vererek anahtarı reddeder.
  3. Web Sunucusu Sahipliği: Apache veya Nginx doküman kök dizininde (/var/www/html) dosyaların sahibi root veya dağıtım kullanıcısı olmalı, web sunucusu servisi (www-data) yalnızca yükleme (uploads/cache) dizinlerine yazabilmelidir.

Özet

Linux sistem yöneticiliğinin temeli doğru yetkilendirmeden geçer. chmod ile oktal ve sembolik izinleri yönetebilir, chown ile mülkiyeti düzenleyebilir, SGID ve Sticky Bit gibi gelişmiş araçlarla paylaşımlı güvenli ortamlar oluşturabilirsiniz. Sistem güvenliğini pekiştirmek için izin denetimlerini düzenli otomasyonlara bağlamak en sağlıklı yaklaşımdır.

Tags , , , , ,

How can we help?