---
title: Yetenekler
source: 'https://academia.sh/tr/kurslar/cekirdek-arayuzleri/yetenekler'
course: 'Çekirdek Arayüzleri ve İzolasyon'
language: tr
updated: '2026-08-17T18:09:57+00:00'
license: 'CC BY-SA 4.0'
---

# Yetenekler

Süper kullanıcı ayrıcalığı ayrı ayrı verilebilen parçalara bölünür; yetenek kırpma iki olgudan yalnız birini kapatır ve dosya yetkileri açık kalır, yedi düzenekli demette görünen olgu 11'e iner.

Önceki iki ders sürecin **ne gördüğünü** ve **ne kadar tükettiğini** daralttı. Üçüncü soru
başka bir eksene aittir: süreç çekirdekten **hangi ayrıcalıklı işlemi** isteyebilir. Kendi
süreç tablosunu gören, kotası kırpılmış bir süreç yine de bir takma noktası açmaya, ağ
yapılandırmasını değiştirmeye ya da başka bir kullanıcının dosyasına dokunmaya kalkışabilir.
Bu istekleri kabul edip etmemek görünürlükle de tüketimle de ilgili değildir.

Bu ders o kararı veren düzeneği ölçer. Katalogdaki başlık "Yetenekler" idi; bu müfredatta
`capability` karşılığı **yetki** olarak kapatıldığı için ders adı **Yetkiler**dir ve kurs
boyunca tek biçim kullanılır.

## Süper Kullanıcı Ayrıcalığının Parçalanması

Klasik model ikilidir: bir süreç ya sıfır numaralı kullanıcıya aittir ve çekirdeğin bütün
denetimlerinden muaftır, ya da değildir ve hiçbirinden muaf değildir. Bin ayrıcalıklı işlemin
tamamı tek bir bayrağa bağlıdır. Ağın bir bağlantı noktasını dinlemek isteyen bir program, bu
model altında aynı zamanda çekirdek modülü yükleme ve herhangi bir dosyanın sahipliğini
değiştirme hakkını da alır.

**Yetki**, bu tek bayrağın ayrı ayrı verilebilen parçalara bölünmesidir. Her ayrıcalıklı işlem
sınıfı bir yetkiye bağlanır: düşük numaralı bağlantı noktasına bağlanma, ham yuva açma, ağ
yapılandırmasını değiştirme, dosya sahipliğini değiştirme, dosya izin denetimini atlama, süreç
önceliğini yükseltme, sistem saatini değiştirme, çekirdek modülü yükleme ve takma yapma ayrı
yetkilerdir. Bir süreç yalnız kendisine verilen yetkilerin kapsadığı işlemleri isteyebilir;
kalanları için sıfır numaralı kullanıcıya ait olması bile yetmez.

Parçalanma eşit değildir ve bu kursun ilgilendiği bir ayrıntı taşır. Yetkilerin bir bölümü dar
kapsamlıdır ve tek bir işlem sınıfını açar; bir bölümü ise geniştir ve kendi başına başka
yetkilerin kapısını aralayacak kadar çok işlem sınıfını kapsar. Takma yapmayı, ad alanı
yönetimini ve pek çok yönetim işlemini tek başına toplayan yetki bunların en bilinenidir.
Uygulamadaki kural bu yüzden kısadır: **geniş yetki verilmez.** Bir programın gerçekten
ihtiyacı varsa, ihtiyaç duyulan işlemi ayrı bir yardımcıya taşımak, o yetkiyi bütün sürece
vermekten daha dar bir çözümdür.

## Beş Küme ve Geçiş Kuralı

Bir sürecin yetkileri tek bir liste değil, **beş kümedir** ve her kümenin ayrı bir işi vardır.
**Etkin küme** o an denetimde kullanılan yetkileri taşır. **İzinli küme** sürecin etkin kümeye
alabileceklerinin havuzudur. **Devralınabilir küme** program değiştirmede taşınabilecekleri
gösterir. **Sınırlayıcı küme** bir tavandır: içinde olmayan bir yetki hiçbir yolla geri
kazanılamaz. **Ortam kümesi** ise devralınabilir yetkilerin yeni programa taşınmasını sağlayan
köprüdür.

Ayrı bir bayrak bu kümelerin üzerinde durur: **yeni ayrıcalık yok** bayrağı açıldığında süreç
ve bütün çocukları, program değiştirmeyle yeni yetki kazanamaz. Bayrak bir kez açılır ve
kapatılamaz. Yetenek kırpmanın kalıcı olması bu bayrağa bağlıdır; bayrak açılmadan yapılan
kırpma, dosya üzerinde yazılı yetkilerle geri alınabilir.

```text
# ornek dokum — calistirilmamistir; maske degerleri kurgudur
$ grep -E '^(Cap|NoNewPrivs)' /proc/self/status
CapInh: 0000000000000000
CapPrm: 000000000000cc00
CapEff: 000000000000cc00
CapBnd: 000000000000cc00
CapAmb: 0000000000000000
NoNewPrivs: 1
```

Dökümdeki maskeler bit kümeleridir; her bit bir yetkiye karşılık gelir. Okunması gereken şey
tek tek bitler değil, **kümeler arasındaki ilişkidir**: sınırlayıcı küme izinli kümeye eşitse
kırpma yapılmamış demektir, ortam kümesi boşsa program değiştirmede yetki taşınmıyor demektir.

Yetkiler süreçlerin yanında **dosyaların** üzerinde de durur. Bir çalıştırılabilir dosyaya
yetki işaretlenebilir ve o dosya çalıştırıldığında süreç, çağıranın sahip olmadığı bir yetkiyle
başlar. Bu, eski sahiplik bayrağının dar bir alternatifidir: dosya bütün ayrıcalığı değil,
yalnız işaretlenmiş yetkiyi verir.

```text
# ornek dokum — calistirilmamistir
$ getcap /usr/local/bin/olcum-toplayici
/usr/local/bin/olcum-toplayici cap_net_bind_service=ep
$ setcap -r /usr/local/bin/olcum-toplayici
$ find /kok-agaci -perm /6000 -type f
/kok-agaci/usr/bin/eski-yardimci
```

Son satır bir denetim adımıdır: kök ağacında sahiplik bayrağı taşıyan dosyaları listeler. Bu
liste boş değilse, süreçten kırpılan yetenek dosya üzerinden geri gelebilir. Dökümler
çalıştırılmamıştır ve buradan hiçbir sayı iddiası çıkmaz.

## Yetkinin Kapsamı ve Yazıldığı Yer

Bir yetkinin nerede geçerli olduğu, ad alanları hesaba katılmadan söylenemez. Kullanıcı ad
alanı açan bir süreç, o ad alanının içinde geniş bir yetenek kümesiyle başlar; ama bu kümenin
kapsamı **yalnız o ad alanı ve altındaki nesnelerdir**. Aynı yetki, ad alanının dışındaki bir
nesne üzerinde hiçbir şey yapmaz. Birinci dersteki eşleme tablosunun anlamı burada tamamlanır:
içeride görünen sıfır numaralı kullanıcı, dışarıda eşlenmiş sıradan bir kimliktir ve
yetkilerinin sınırı eşlemenin sınırıdır.

Bunun iki pratik sonucu vardır. Birincisi, "içeride yetkili görünmek" ile "makinede yetkili
olmak" ayrı iki durumdur ve tanıda karıştırılırsa yanlış sonuç verir. İkincisi, ad alanı
dışındaki bir kaynağa erişim gerektiğinde — bir aygıt düğümü, bir takma noktası, bir çekirdek
ayarı — yetki tek başına yetmez; o kaynağın ad alanının içine açıkça getirilmesi gerekir.
Getirilmediği sürece açık yüzey büyümez.

Yetkiler süreci başlatan tarafça yazılır ve kalıcı yeri bir yapılandırma dosyasıdır.

```text
# ornek birim dosyasi parcasi — calistirilmamistir
[Service]
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=yes
ProtectSystem=strict
ReadWritePaths=/veri/olcum
```

Parçadaki ilk satır sınırlayıcı kümeyi tek bir yetkiye indirir: listede olmayan hiçbir yetki
bu birim altında geri kazanılamaz. İkinci satır o yetkinin program değiştirmede taşınmasını
sağlar. Üçüncü satır bayrağı açar. Son iki satır ise bu dersin açık bıraktığı olguya dokunur —
dosya sistemini salt okunur yapıp yalnız gereken dizini yazılabilir bırakır. Ayarların adları
servis yöneticisine göre değişir; değişmeyen şey **sıradır**: önce tavan indirilir, sonra
gereken tek yetki geri verilir.

Bir programın hangi yetkiye gerçekten ihtiyacı olduğu tahminle bulunmaz. Sertleştirme
alışkanlığı tersinden çalışır: sınırlayıcı küme boşaltılarak başlanır, program bir sınama
ortamında çalıştırılır, reddedilen işlemler kaydedilir ve kayda düşen her işlem için **tek bir
yetki** geri verilir. Bu yol iki şey kazandırır. Verilen yetkiler gerçekten kullanılanlardır ve
liste, programın ne yaptığının yazılı bir belgesine dönüşür; sürüm değiştiğinde listenin
büyümesi de görünür bir olay olur. En az yetki ilkesi Siber Güvenliğe Giriş kursunda
kurulmuştu; buradaki karşılığı bu listedir.

## Yetki Ekseni: İki Olgu, Bir Kapanış

- **IZ17** — Yetki ekseninde **2 olgu** vardır: `yetenek-kumesi` ve `dosya-yetkileri`.
- **IZ18** — Yetenek kırpma yetenek eksenini kapatan tek düzenektir; **1 olgu** kapatır ve
  `dosya-yetkileri` olgusunu **açık bırakır**.
- **IZ19** — Beş kümenin ayrımı modelde tek bir olguya indirilmiştir; bu, modelin bilinçli bir
  sınırıdır ve süpürmede tam bu sınır zorlanır.
- **IZ20** — Dosya üzerindeki yetkiler ile dosya izin bitleri modelde aynı olguda toplanır.

```python
"""Ortak tanimin bu derste kullanilan parcasi: 24 olgu , 9 eksen ve
yetenek eksenini kapatan yetenek kirpma. Olculen sey ACIK KALAN YUZEY."""

OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": "surec", "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": "takma", "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": "ag", "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": "kullanici", "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": "makine", "acik_kalan": []},
    "denetim-grubu":      {"eksen": "kaynak", "acik_kalan": ["islemci-sayisi"]},
    "yetenek-kirpma":       {"eksen": "yetki", "acik_kalan": ["dosya-yetkileri"]},
}
ALTI = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani", "kullanici-ad-alani",
        "makine-ad-alani", "denetim-grubu"]


def gorunen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        kapali |= {o for o, e in olgular if e == v["eksen"]}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def acik_eksen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    g = set(gorunen(duzenekler, olgular))
    return sorted({e for o, e in olgular if o in g})


acik = set(gorunen(["yetenek-kirpma"]))
print("KAHIN  olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}))
print("yetenek ekseninde", sum(1 for _, e in OLGULAR if e == "yetki"), "olgu")
print()
print("olgu                 yetenek kirpma")
for o, e in OLGULAR:
    if e == "yetki":
        print(f"  {o:20s} {'ACIK BIRAKIR' if o in acik else 'kapatir'}")
print()
g = gorunen(["yetenek-kirpma"])
print("yetenek kirpma tek basina: kapatti", len(OLGULAR) - len(g),
      "| acik kalan 1 | gorunen", len(g),
      "| acik eksen", len(acik_eksen(["yetenek-kirpma"])))
```

```
KAHIN  olgu: 24 | eksen: 9
yetenek ekseninde 2 olgu

olgu                 yetenek kirpma
  yetenek-kumesi       kapatir
  dosya-yetkileri      ACIK BIRAKIR

yetenek kirpma tek basina: kapatti 1 | acik kalan 1 | gorunen 23 | acik eksen 9
```

Üç sayı yan yana duruyor. **Kâhin:** 24 olgu, 9 eksen; yetenek ekseninde 2 olgu. **İzolasyon:**
yetenek kırpma **1 olgu** kapatıyor. **Açık kalan yüzey:** **23 olgu** ve **9 eksen**. Bu, tek
başına ölçülen düzenekler arasında en az kapatanlardan biridir ve sayı yanıltıcı değildir:
yetenek kırpma sürecin **isteyebileceklerini** daraltır, gördüklerini daraltmaz.

Bu, ölçünün bir sınırıdır ve açıkça yazılmalıdır. Kurs görünürlüğü sayar; bir düzeneğin
işletmedeki değeri yalnız kapattığı olgu sayısıyla ölçülmez. Yetenek kırpma, tablodaki tek
olgusuna karşılık, sürecin çekirdekten isteyebileceği ayrıcalıklı işlem sınıflarının büyük
bölümünü kapatır. İki ölçü ayrı sorulara yanıt verir ve biri ötekinin yerine geçmez.

## Açık Kalan Olgu: Dosya Yetkileri

Kapanmayan olgu beklenmedik bir yerdedir. Süreçten kırpılan yetenek, **dosyanın üzerinde yazılı
olanı değiştirmez.** Kök ağacındaki bir dosyada sahiplik bayrağı ya da işaretlenmiş bir yetki
varsa, o dosya çalıştırıldığında yeni sürecin başlangıç kümesi dosyadan hesaplanır. Kırpma
süreçte yapılmıştır, dosya sisteminde yapılmamıştır ve iki taraf birbirini bilmez.

Aynı ayrım dosya izin bitleri için de geçerlidir. İzin denetimini atlayan yetki kırpıldığında
süreç artık her dosyaya erişemez; ama dosyaların üzerinde yazılı olan izinler yerinde durur ve
herkese açık yazılabilir bir dizin, yetkisi kırpılmış bir süreç için de yazılabilir kalır.
Yetenek kırpma bir **istek süzgecidir**, bir dosya sistemi işlemi değil.

Daraltma yolu bu yüzden dosya sisteminden geçer ve dört adımdır. Birincisi, kök ağacı
**salt okunur** takılır; yazılabilir alan ayrı ve dar bir takmaya verilir. İkincisi, yazılabilir
takmalara `nosuid`, `nodev` ve `noexec` seçenekleri konur — birincisi dosya üzerinden yetki
kazanmayı, ikincisi aygıt düğümü üretmeyi, üçüncüsü o alandan program çalıştırmayı keser.
Üçüncüsü, kök ağacı hazırlanırken sahiplik bayrağı taşıyan dosyalar aranır ve gerekmeyenlerin
bayrağı temizlenir; bu, dersin örnek dökümündeki son satırın işidir. Dördüncüsü, **yeni
ayrıcalık yok** bayrağı açılır ve sınırlayıcı küme kırpılır; ikisi birlikte yapıldığında
kırpılan yetenek hiçbir program değiştirmeyle geri gelmez.

Dördünün ortak yanı şudur: hiçbiri süreçte değil, **sürecin dünyasında** yapılır. Model bu
ayrımı tek bir açık olguyla temsil ediyor ve o olgunun kapanması için gereken şey ikinci bir
yetki ayarı değil, kök ağacının kendisinin daraltılmasıdır.

## Büyüyen Demet ve Olgu Kümesi Süpürmesi

- **IZ21** — Demet sırası bağlayıcıdır: beş ad alanı, denetim grubu, sonra yetenek kırpma.
- **IZ22** — Eklenen olgu `ortam-yetenekleri`, yetenek eksenine aittir ve yetenek kırpmanın açık
  bıraktıklarında değildir.
- **IZ23** — Çıkarılan `dosya-yetkileri`, yetenek ekseninin açık kalan tek olgusudur.

```python
# --- Onceki blogun uzerine kurulur: OLGULAR, DUZENEK, ALTI, gorunen, acik_eksen.
YEDI = ALTI + ["yetenek-kirpma"]
print("kurs boyunca buyuyen demet")
print("asama                      duzenek  gorunen  acik eksen")
for ad, d in (("alti duzenek", ALTI), ("+yetenek kirpma", YEDI)):
    print(f"  {ad:24s} {len(d):7d}  {len(gorunen(d)):7d}  {len(acik_eksen(d)):10d}")
print()
EK = OLGULAR + [("ortam-yetenekleri", "yetki")]
EKSIK = [(o, e) for o, e in OLGULAR if o != "dosya-yetkileri"]
print("olgu kumesi supurmesi (yedi duzenek uygulanmis halde)")
print("kume                       olgu  eksen  gorunen  acik eksen  yetki acik")
for ad, kume in (("temel", OLGULAR), ("+ortam-yetenekleri", EK),
                 ("-dosya-yetkileri", EKSIK)):
    g = set(gorunen(YEDI, kume))
    e = acik_eksen(YEDI, kume)
    ya = sum(1 for o, ek in kume if ek == "yetki" and o in g)
    print(f"  {ad:24s} {len(kume):4d}  {len({x for _, x in kume}):5d}"
          f"  {len(g):7d}  {len(e):10d}  {ya:10d}")
```

```
kurs boyunca buyuyen demet
asama                      duzenek  gorunen  acik eksen
  alti duzenek                   6       12           7
  +yetenek kirpma                7       11           7

olgu kumesi supurmesi (yedi duzenek uygulanmis halde)
kume                       olgu  eksen  gorunen  acik eksen  yetki acik
  temel                      24      9       11           7           1
  +ortam-yetenekleri         25      9       11           7           1
  -dosya-yetkileri           23      9       10           6           0
```

Yedinci düzenek görünen olguyu 12'den **11'e** indiriyor: bir olgu. Açık eksen yine **7'de**
duruyor ve bu, üçüncü kez aynı sonucu veriyor. Düzenek eklemek yüzeyi daraltıyor, ekseni
daraltmıyor; her eksende bir şey açık kalıyor.

Süpürme modelin sınırını da gösteriyor. Yetki eksenine sekizinci düzenekten bağımsız bir olgu
eklendiğinde yetenek kırpma onu da kapatıyor ve yüzey 11'de kalıyor: beş kümeyi ayrı ayrı
modellemek sonucu değiştirmezdi. Buna karşılık açık kalan tek olgu çıkarıldığında eksen
kapanıyor, yüzey **10'a** ve açık eksen **6'ya** iniyor. Sonuç önceki iki dersle aynı yöne
bakıyor: yüzeyi belirleyen şey eksendeki olgu sayısı değil, **açık kalan olgunun varlığıdır.**
Modeldeki bütün sayılar kurgu üzerinden tam sayımdır, bir makinede yapılmış ölçüm değildir.

## Özet

- Yetki, süper kullanıcı ayrıcalığının ayrı ayrı verilebilen parçalara bölünmesidir; yetkiler
  eşit kapsamda değildir ve **geniş yetki verilmez**.
- Bir sürecin **beş yetenek kümesi** vardır — etkin, izinli, devralınabilir, sınırlayıcı ve
  ortam — ve üzerlerinde bir kez açılıp kapatılamayan **yeni ayrıcalık yok** bayrağı durur.
- Yetki ekseninde **2 olgu** vardır; yetenek kırpma **1'ini** kapatır, `dosya-yetkileri`
  olgusunu **açık bırakır** ve tek başına 24 olgunun **23'ünü** görünür bırakır.
- Açık kalan olgunun nedeni yapısaldır: kırpma süreçte yapılır, dosyaların üzerinde yazılı
  olan değişmez. Daraltma yolu dosya sistemindedir — salt okunur kök, `nosuid`, `nodev` ve
  `noexec` seçenekleri, sahiplik bayraklarının temizlenmesi ve sınırlayıcı kümenin kırpılması.
- Yedi düzenekli demette görünen olgu **12'den 11'e** iner, **açık eksen 7'de durur**;
  süpürmede açık kalan tek olgu çıkarıldığında yüzey **10'a**, eksen **6'ya** düşer.

## Sonraki Adım

Yetenek kırpma sürecin çekirdekten ne isteyebileceğini daralttı, ama isteğin **kime** yöneldiğini
hiç sormadı. İzin denetimi hâlâ dosyanın sahibinin verdiği kararlara dayanıyor: bir dizin
herkese açık yazılabilir işaretlenmişse, kırpılmış bir süreç de oraya yazar. Sonraki ders bu
kararı sahibin elinden alıp bir politikaya bağlayan katmanı ele alır. Özneye ve nesneye erişim
etiketi verilir, aralarındaki her erişim bir politika kuralıyla açıkça izinli hâle getirilir ve
kural yoksa erişim reddedilir. Ölçülecek şey iki yönlüdür: politikanın kapattığı olgu ile
politikanın **kendi** açık yüzeyi, yani gerekmediği hâlde izin verilen erişim sayısı.
