---
title: 'Özel İzin Bitleri'
source: 'https://academia.sh/tr/kurslar/linuxa-giris/ozel-izin-bitleri'
course: "Linux'a Giriş"
language: tr
updated: '2026-08-17T18:09:57+00:00'
license: 'CC BY-SA 4.0'
---

# Özel İzin Bitleri

Dokuz izin bitinin üstündeki üç bit; çalıştıranın kimliğini değiştiren setuid ve setgid, dizinlerde grup mirası ve silme yetkisini daraltan yapışkan bit.

Kullanıcılar dersinde bir ayrıntı açıkta bırakılmıştı: parola değiştirme programının izin
dizesinde, sahip sınıfının üçüncü konumunda `x` yerine `s` vardı.

```
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 72056 May 30  2024 /usr/bin/passwd
```

Bu ders o harfi ve iki kardeşini açıklar. Üç ek bit, dokuz izin bitinin çözemediği üç ayrı
sorunu çözer ve üçü de yetki yükseltmenin — bu kez dosyanın kendi üstverisine gömülü —
biçimleridir.

## Dört Basamaklı Gösterim

İzin alanı aslında dokuz değil **on iki bittir**. Üç ek bit, sekizlik gösterimde soldan
dördüncü basamağı oluşturur:

| Bit | Sekizlik | Adı |
|---|---|---|
| setuid | 4000 | Kullanıcı kimliğini ayarla |
| setgid | 2000 | Grup kimliğini ayarla |
| yapışkan | 1000 | Sticky |

Tam değer `stat` ile okunabilir:

```
$ stat -c '%a %A %n' betik/ozet.sh paylasim
4755 -rwsr-xr-x betik/ozet.sh
3770 drwxrws--T paylasim
```

`4755` setuid artı `755`, `3770` ise setgid artı yapışkan artı `770` demektir. `chmod`
komutuna dört basamaklı değer verilebilir; simgesel biçimde karşılıkları `u+s`, `g+s` ve
`+t`'dir.

Ek bitler ayrı sütunlarda gösterilmez; var olan `x` konumlarının harfini değiştirirler:

| Konum | `x` açıkken | `x` kapalıyken |
|---|---|---|
| Sahip (setuid) | `s` | `S` |
| Grup (setgid) | `s` | `S` |
| Diğerleri (yapışkan) | `t` | `T` |

Büyük harf, ek bitin açık ama altındaki çalıştırma bitinin kapalı olduğunu bildirir. Bu
çoğunlukla bir yapılandırma hatasının işaretidir; yukarıdaki `drwxrws--T` çıktısı ise
istenmiş bir durumdur — dizinin "diğerleri" sınıfına hiç izin verilmemiştir.

## setuid: Çalıştıranın Kimliğini Değiştirmek

Normalde bir program, onu çalıştıran kullanıcının kimliğiyle çalışır. **setuid** biti açık
bir çalıştırılabilir dosya ise, çalıştıranın değil **sahibinin** kimliğiyle çalışır.

Parola değiştirme programı bu yüzden işaretlidir. Program kök kullanıcıya aittir ve setuid
biti açıktır; sıradan bir kullanıcı onu çalıştırdığında süreç kök yetkisiyle çalışır ve
yalnızca kök tarafından yazılabilen parola dosyasını güncelleyebilir. Kullanıcı dosyaya
doğrudan erişemez; erişimi olan, denetimli bir programa erişir.

Model, yetki yükseltme dersindeki politikayla aynı ilkeyi izler ama yetkiyi dışarıdan
tanımlanan bir politikada değil, dosyanın üstverisinde tutar. Buradan iki sonuç çıkar.

**setuid programlar saldırı yüzeyidir.** Böyle bir programdaki her hata, ayrıcalık
kazanmaya dönüşebilir. Bu nedenle setuid programlar az sayıda tutulur, dar iş yapar ve
girdilerini titizlikle denetler. Sistem üzerindeki setuid dosyaların listesi `find` ile
çıkarılabilir; ölçüt seçeneği `-perm` adını taşır ve düzenli denetimlerin standart
adımlarından biridir.

**Kabuk betiklerinde yok sayılır.** Çekirdek, yorumlayıcıyla çalıştırılan dosyalarda bu
biti uygulamaz:

```
$ printf '#!/bin/sh\nid -un\n' > /tmp/kimlik.sh
$ chmod 4755 /tmp/kimlik.sh
$ ls -l /tmp/kimlik.sh
-rwsr-xr-x 1 ogrenci ogrenci 17 Jul 26 19:31 /tmp/kimlik.sh
```

Başka bir kullanıcı çalıştırdığında sonuç değişmez:

```
$ id -un
yedek
$ /tmp/kimlik.sh
yedek
```

Bit açık görünmesine karşın süreç `yedek` kimliğiyle çalışmıştır. Nedeni bir yarış
durumudur: çekirdek dosyayı açıp yorumlayıcıyı çalıştırana kadar geçen sürede dosya
değiştirilebilir ve ayrıcalıklı yorumlayıcı başka bir betiği çalıştırabilirdi. Bu kapı,
biti yok sayarak kapatılmıştır.

## setgid: Dosyalarda ve Dizinlerde

**setgid** biti çalıştırılabilir dosyalarda setuid'in grup karşılığıdır: süreç, çalıştıranın
değil dosyanın grubuyla çalışır.

Dizinlerde ise bambaşka ve çok daha sık kullanılan bir anlam taşır: **dizinde oluşturulan
yeni dosyalar, oluşturanın birincil grubunu değil dizinin grubunu alır.**

Sahiplik dersinde bırakılan sorun tam olarak buydu. Ağacın grubu değiştirilmişti, ama yeni
dosyalar yine kullanıcının birincil grubuyla oluşuyordu.

```
$ mkdir -p paylasim
$ chgrp proje paylasim
$ chmod 770 paylasim
$ ls -ld paylasim
drwxrwx--- 2 ogrenci proje 4096 Jul 26 19:30 paylasim
$ touch paylasim/deneme-1.csv
$ ls -l paylasim
total 0
-rw-r--r-- 1 ogrenci ogrenci 0 Jul 26 19:30 deneme-1.csv
```

Dizin `proje` grubuna ait olmasına karşın, içinde oluşan dosya `ogrenci` grubunu almıştır;
grup üyeleri bu dosyayı yazamaz. setgid biti eklendiğinde davranış değişir:

```
$ chmod g+s paylasim
$ ls -ld paylasim
drwxrws--- 2 ogrenci proje 4096 Jul 26 19:30 paylasim
$ touch paylasim/deneme-2.csv
$ ls -l paylasim
total 0
-rw-r--r-- 1 ogrenci ogrenci 0 Jul 26 19:30 deneme-1.csv
-rw-r--r-- 1 ogrenci proje   0 Jul 26 19:30 deneme-2.csv
```

Bitten önce oluşan dosya eski grubunu korumuş, sonra oluşan dosya dizinin grubunu almıştır.
Bit ayrıca yeni oluşturulan **alt dizinlere de kopyalanır**; böylece ağacın tamamında miras
sürer.

Grup paylaşımının çalışması için üç ayarın birlikte yapılması gerekir: dizinin grubu, grup
yazma izni ve setgid biti. Üçünden biri eksikse paylaşım çalışmaz ve eksikliğin belirtisi
her seferinde farklı görünür.

Yeni dosyaların grup yazma iznini de alması için maske de düzenlenmelidir; izin bitleri
dersindeki `022` maskesi grup yazmasını kapatır. Paylaşılan dizinlerde çalışırken maske
`002` yapılır.

## Yolun Geçilebilir Olması

Paylaşım, dizin izinleriyle bitmez. Yol çözümlemesi dersindeki kural burada devreye girer:
paylaşılan dizine ulaşmak için **yol üzerindeki her dizinde geçiş izni** gerekir.

```
$ chgrp proje ~
$ chmod 710 ~
$ ls -ld ~
drwx--x--- 5 ogrenci proje 4096 Jul 26 19:13 /home/ogrenci
```

`710` değeri sahibe tam yetki, gruba yalnızca geçiş izni verir. Grup üyeleri ev dizininin
içeriğini **listeleyemez** ama içinden geçebilir:

```
$ id -un
yedek
$ ls /home/ogrenci
ls: cannot open directory '/home/ogrenci': Permission denied
$ ls /home/ogrenci/proje/paylasim
deneme-1.csv  deneme-2.csv
```

İzin bitleri dersindeki "okuma var, geçiş yok" örneğinin tersi burada gerçek bir
yapılandırmaya dönüşmüştür: ev dizininin içeriği gizli kalırken, adı bilinen alt dizin
paylaşılabilir.

## Yapışkan Bit

Paylaşılan dizin artık çalışıyor, ama izin bitleri dersinde bırakılan boşluk açık: dizinde
yazma izni olan kullanıcı, içindeki **her** dosyayı silebilir.

```
$ id -un
yedek
$ ls -l
total 0
-rw-rw-r-- 1 ogrenci proje 0 Jul 26 19:31 deneme-1.csv
-rw-rw-r-- 1 ogrenci proje 0 Jul 26 19:31 deneme-2.csv
$ rm deneme-1.csv
$ ls -l
total 0
-rw-rw-r-- 1 ogrenci proje 0 Jul 26 19:31 deneme-2.csv
```

`yedek` kullanıcısı, sahibi olmadığı bir dosyayı silmiştir. Silme dersindeki tanım bunu
açıklar: silmek dizin girdisini kaldırmaktır ve aranan izin dizinin yazma iznidir.

**Yapışkan bit** bu kuralı daraltır. Bit açık bir dizinde bir girdiyi yalnızca üç taraf
kaldırabilir: dosyanın sahibi, dizinin sahibi ve kök kullanıcı.

```
$ chmod +t paylasim
$ ls -ld paylasim
drwxrws--T 2 ogrenci proje 4096 Jul 26 19:31 paylasim
```

Aynı kullanıcı aynı işlemi yeniden dener:

```
$ rm deneme-2.csv
rm: cannot remove 'deneme-2.csv': Operation not permitted
$ touch yedek-notu.csv
$ ls -l
total 0
-rw-rw-r-- 1 ogrenci proje 0 Jul 26 19:31 deneme-2.csv
-rw-r--r-- 1 yedek   proje 0 Jul 26 19:31 yedek-notu.csv
$ rm yedek-notu.csv
$ ls -l
total 0
-rw-rw-r-- 1 ogrenci proje 0 Jul 26 19:31 deneme-2.csv
```

Başkasının dosyasını silmek engellenmiş, kendi oluşturduğu dosyayı silmek engellenmemiştir.
Yazma izni de kaybolmamıştır — dizine yeni dosya eklenebilmektedir. Bit yalnızca **silme ve
yeniden adlandırma** işlemlerini daraltır.

Bu, sistemdeki geçici dizinlerin standart yapılandırmasıdır:

```
$ ls -ld /tmp
drwxrwxrwt 1 root root 4096 Jul 26 19:24 /tmp
```

`rwxrwxrwt` dizesi şunu söyler: herkes yazabilir, ama herkes yalnızca kendi dosyasını
silebilir. Yapışkan bit olmasaydı, geçici dizin herkesin birbirinin dosyasını
silebildiği bir alan olurdu.

## Özet

- İzin alanı on iki bittir; ek üç bit sekizlik gösterimde dördüncü basamağı oluşturur.
- Ek bitler ayrı sütun almaz, `x` konumlarının harfini değiştirir; büyük harf altındaki
  çalıştırma bitinin kapalı olduğunu bildirir.
- setuid işaretli çalıştırılabilir dosya, çalıştıranın değil sahibinin kimliğiyle çalışır;
  kabuk betiklerinde yarış durumu nedeniyle yok sayılır.
- Dizinlerde setgid, yeni dosyaların dizinin grubunu almasını sağlar ve alt dizinlere
  kopyalanır; grup paylaşımı için grup, yazma izni ve bu bit birlikte gerekir.
- Paylaşılan dizine erişim için yol üzerindeki her dizinde geçiş izni gerekir; `710` değeri
  listelemeden geçiş verir.
- Yapışkan bit, dizindeki bir girdiyi yalnızca dosyanın sahibinin, dizinin sahibinin ve kök
  kullanıcının kaldırabilmesini sağlar; geçici dizinlerin standart yapılandırmasıdır.

## Sonraki Adım

Kimlik, izin ve yetki modeli tamamlandı; proje ağacı bir grupla güvenli biçimde
paylaşılabilir durumda. Geriye sistemin kendisiyle ilgili son bir katman kalıyor: bu ağaçta
çalışmak için kullanılan araçlar sisteme nasıl geldi, nasıl güncellenir ve nasıl
kaldırılır? Sonraki konu paket yöneticisi kavramıyla başlar ve kursu, ağacı düzenlemek için
gereken metin editörleriyle kapatır.
