setuid, setgid ve Sticky Bit: Özel İzinler ve Kullanım Alanları

Linux sistemlerinde setuid, setgid ve sticky bit izinleri nasıl çalışır? Dosyalar ve dizinler üzerindeki etkileri, güvenlik riskleri ve doğru kullanım yöntemleri.

L
Linuxize
1 görüntülenme
setuid, setgid ve Sticky Bit: Özel İzinler ve Kullanım Alanları

Giriş

Linux ve Unix tabanlı sistemlerde dosya izinleri, read (r), write (w) ve execute (x) gibi temel yetkilerden oluşur. Ancak, bu üç temel izin dışında kalan setuid, setgid ve sticky bit adlı özel izinler, sistemin nasıl çalıştığını ve paylaşılan dizinlerin güvenliğini doğrudan etkiler.

Bu izinler sayesinde;

  • Normal kullanıcılar, root sahipli dosyalara erişim gerektiren komutları (örneğin passwd) çalıştırabilir.
  • Bir takım çalışma dizininde oluşturulan dosyalar otomatik olarak aynı grup tarafından sahiplenilir.
  • Her kullanıcı /tmp dizinine dosya ekleyebilir, ancak başka bir kullanıcının dosyasını silemez.

Bu kılavuzda; setuid, setgid ve sticky bit izinlerinin dosya ve dizinler üzerindeki etkileri, nasıl ayarlanacakları ve güvenlik açısından dikkat edilmesi gereken noktalar detaylı olarak açıklanacaktır.


Özel İzinlerin Dosya Modunda Konumu

Linux'ta her dosyanın modu, üç kategoride düzenlenir:

  • Owner (sahip): Dosyayı oluşturan kullanıcı.
  • Group (grup): Dosyanın ait olduğu grup.
  • Others (diğerleri): Sistemdeki diğer tüm kullanıcılar.

Temel izinlerin yanı sıra, bu üç kategorideki execute (x) pozisyonunda özel izinler yer alır. Sayısal chmod değerlerinde, özel izinler dördüncü bir basamak olarak eklenir:

Sayısal Değer İzin Adı Açıklama
4 setuid Dosya çalıştırıldığında, sahibinin yetkileriyle çalışır.
2 setgid Dosya çalıştırıldığında, grubunun yetkileriyle çalışır. Dizinlerdeyse yeni dosyaların grup sahipliğini belirler.
1 sticky bit Sadece dosya sahibi (veya root), dizindeki dosyaları silebilir/yeniden adlandırabilir.

Örnekler:

chmod 4755 dosya.txt   # setuid + rwxr-xr-x
chmod 2770 dizin      # setgid + rwxrws---
chmod 1777 /tmp       # sticky bit + rwxrwxrwt

Sayısal yöntemin yanı sıra, sembolik ifadelerle de ayarlanabilir:

chmod u+s dosya.txt   # setuid ekle
chmod g+s dizin        # setgid ekle
chmod +t /tmp          # sticky bit ekle

setuid (Set User ID) İzni

Tanım ve Kullanım Alanı

setuid (Kullanıcı ID'sini Ayarla), yalnızca çalıştırılabilir dosyalara uygulanır. Normalde bir program, çalıştıran kullanıcının yetkileriyle çalışır. setuid biti aktif olduğunda, program dosyanın sahibinin yetkileriyle çalışır.

En yaygın kullanım örneği: passwd komutu. Bu komut, kullanıcıların şifrelerini değiştirmesine olanak tanır, ancak /etc/shadow dosyasına yazması gerekir. Bu dosya, sadece root tarafından okunabilir/yazılabilir olduğundan, passwd komutu root sahipliğine sahiptir ve setuid biti aktif durumdadır.

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Jan 1 09:00 /usr/bin/passwd

Not: s harfi, sahibin execute (x) pozisyonunda görünür. Eğer execute biti yoksa, S (büyük harf) olarak görünür ve bu genellikle bir hata anlamına gelir.

setuid Nasıl Ayarlanır?

# Sembolik yöntem
sudo chmod u+s /usr/bin/komut

# Sayısal yöntem
sudo chmod 4755 /usr/bin/komut

⚠️ Uyarı: setuid biti, yalnızca güvenilir ve gerekli durumlarda kullanılmalıdır. setuid-root bir program, güvenlik açığı olması durumunda saldırganlara root yetkileri kazandırabilir. Özellikle shell script'lerinde setuid kullanılamaz (Linux çekirdeği tarafından engellenir).


setgid (Set Group ID) İzni

Dosyalarda setgid

setgid, çalıştırılabilir dosyalarda çalıştırıldığında, programın dosyanın grubunun yetkileriyle çalışmasını sağlar. Bu, nadir kullanılan bir özelliktir ve genellikle özel durumlar için tercih edilir.

Dizinlerde setgid

Dizinlerde setgid, en kullanışlı olduğu alandır. Aktif olduğunda, yeni oluşturulan dosyalar ve alt dizinler, dizinin grubunu otomatik olarak miras alır. Bu, takım çalışması için ideal bir çözümdür.

Örnek Senaryo: Bir geliştirme takımının paylaşılan bir dizini olsun. Bu dizindeki tüm yeni dosyaların developers grubuna ait olmasını istiyoruz.

# Öncelikle dizini developers grubuna ata
sudo chgrp developers /srv/project

# setgid ve tam erişim ver (775)
sudo chmod 2775 /srv/project

# Kontrol et
ls -ld /srv/project
drwxrwsr-x 2 root developers 4096 Jan 1 09:00 /srv/project

Not: Dizin yetkilerinde s harfi, grubun execute pozisyonunda görünür. Yeni bir dosya oluşturulduğunda:

touch /srv/project/yeni_dosya.txt
ls -l /srv/project/yeni_dosya.txt
-rw-r--r-- 1 kullanici developers 0 Jan 1 09:01 yeni_dosya.txt

Dosya otomatik olarak developers grubuna atanır.

setgid Nasıl Ayarlanır?

# Sembolik yöntem
sudo chmod g+s /srv/project

# Sayısal yöntem
sudo chmod 2775 /srv/project

Sticky Bit (Yapışkan Bit)

Tanım ve Kullanım Amacı

Sticky bit, yalnızca dizinlere uygulanır. Aktif olduğunda, dizindeki dosyaları sadece dosya sahibi (veya dizin sahibi/root) silebilir veya yeniden adlandırabilir. Bu, herkesin dosya ekleyebildiği ancak kimsenin başka birinin dosyasını silmediği durumlar için ideal bir çözümdür.

En iyi örnek: /tmp dizini. Tüm kullanıcıların dosya oluşturmasına izin verir, ancak bir kullanıcının başka birinin dosyasını silmesini engeller.

$ ls -ld /tmp
drwxrwxrwt 10 root root 4096 Jan 1 09:00 /tmp

Not: t harfi, diğer kullanıcıların execute pozisyonunda görünür. Eğer execute biti yoksa, T (büyük harf) olarak görünür.

Sticky Bit Nasıl Ayarlanır?

# Sembolik yöntem
sudo chmod +t /shared/dropbox

# Sayısal yöntem
sudo chmod 1777 /shared/dropbox

💡 İpucu: Sticky bit, herkese yazma izni verilen dizinlerde güvenlik sağlamak için kullanılır. Örneğin, bir dosya paylaşım dizini (/shared/dropbox) oluştururken, tüm kullanıcıların dosya eklemesine izin verirken, dosyaların sahipliğini korumak için sticky bit kullanılabilir.


Özel İzinlerin ls Çıktısında Okunması

Özel izinler, temel izinlerin x pozisyonunda gösterilir. Okuma kuralları:

Pozisyon Normal Durum setuid/setgid Aktif setuid/setgid Aktif (x Yok)
Owner (sahip) execute x s (küçük harf) S (büyük harf)
Group (grup) execute x s (küçük harf) S (büyük harf)
Others (diğerleri) execute x t (küçük harf) T (büyük harf)

Örnek:

-rwsr-xr-x  # setuid aktif, execute de aktif
-rwsr-xr-S  # setuid aktif, execute değil
-rwxr-sr-x  # setgid aktif, execute de aktif
-rwxr-Sr-x  # setgid aktif, execute değil
drwxrwxrwt  # sticky bit aktif, execute de aktif
drwxrwxr-T  # sticky bit aktif, execute değil

setuid root dosyalarını bulmak için:

sudo find / -perm -4000 -type f -print

Güvenlik Notları

setuid ve setgid, güçlü yetkiler sağlar ve saldırganlar için hedef olabilir. Bu izinleri kullanırken aşağıdaki noktalara dikkat edin:

  1. Sadece gerekli durumlarda kullanın: setuid/setgid, yalnızca güvenilir ve denetlenmiş programlarda kullanılmalıdır. Özel script'ler yerine, sistem araçlarını tercih edin.
  2. Shell script'lerinde setuid/setgid çalışmaz: Linux çekirdeği, shell script'lerinde setuid/setgid bitlerini yok sayar. Bu durumda, sudo kuralları kullanın.
  3. Düzenli denetim yapın: Sistemdeki setuid programlarını periyodik olarak denetleyin ve beklenmeyen bir şey olup olmadığını kontrol edin.
  4. setuid-root programlardan kaçının: setuid biti olan bir root programı, güvenlik açığı olması durumunda root yetkilerini tehlikeye atabilir. Özellikle custom script'lerde setuid kullanmaktan kaçının.

⚠️ Kritik Uyarı: setuid biti, yalnızca yetkili personel tarafından ve gerekli durumlarda kullanılmalıdır. Bir dosyanın setuid biti, izin hatalarını geçici olarak çözmek için kullanılmamalıdır. Eğer bir kullanıcıya özel bir komutun yüksek yetkilerle çalıştırılması gerekiyorsa, /etc/sudoers dosyasında sudo kuralları yapılandırılmalıdır.


Sıkça Sorulan Sorular (SSS)

setuid biti ne işe yarar?

setuid biti, çalıştırılabilir bir dosyanın, dosyanın sahibinin yetkileriyle çalışmasını sağlar. Örneğin, passwd komutu root sahipliğindedir ve setuid biti aktif olduğu için, normal kullanıcılar bu komutu çalıştırarak /etc/shadow dosyasını güncelleyebilirler.

setgid biti dosyalarda ve dizinlerde nasıl farklı davranır?

Dosyalarda: setgid biti, programın dosyanın grubunun yetkileriyle çalışmasını sağlar. Dizinlerde: setgid biti, yeni oluşturulan dosyaların ve alt dizinlerin, dizinin grubunu otomatik olarak miras almasını sağlar. Bu, takım çalışması için ideal bir çözümdür.

/tmp dizinindeki bir dosyayı neden silemiyorum?

/tmp dizininde sticky bit aktif olduğu için, sadece dosyanın sahibi (veya dizin sahibi/root), dosyayı silebilir veya yeniden adlandırabilir. Bu, dizinin herkese yazma izni olmasına rağmen, dosyaların korunmasını sağlar.

setuid shell script'lerinde çalışır mı?

Hayır. Linux çekirdeği, shell script'lerinde setuid ve setgid bitlerini güvenlik nedeniyle yok sayar. Shell script'lerine setuid biti vermek yerine, sudo kuralları kullanarak gerekli yetkiler verilmelidir.


Sonuç

setuid, setgid ve sticky bit, Linux dosya izin sistemini genişleten ve programların nasıl çalıştığını, paylaşılan dizinlerin güvenliğini doğrudan etkileyen özel izinlerdir. Bu izinleri kullanırken;

  • setuid ve setgid yetkilerini yalnızca güvenilir ve gerekli durumlarda kullanın.
  • setgid dizinleri ve sticky bit, güvenli paylaşım dizinleri oluşturmak için kullanın.
  • Shell script'lerinde setuid kullanmaktan kaçının ve gerekli yetkileri sudo kurallarıyla verin.

Bu izinlerin temel çalışma mantığı hakkında daha fazla bilgi edinmek için, Linux Dosya İzinleri ve chmod Komutu kılavuzlarına göz atabilirsiniz.

Kaynak

Linuxize