Linux Dosya İzinleri ve Kullanıcılar-2
- Huseyin Şahan
- 23 Mar
- 5 dakikada okunur
Bu yazımızda linux dosya izinlerini nasıl görebileceğimizi, bu izinlerin ne anlama geldiğini ve bu izinleri nasıl değiştirebileceğimizi ele alacağız.
Dosya İzinleri ve Sembolleri
Aslında önceki blog yazılarımızda ls -l komutu ile dosya izinlerini görebileceğimizden bahsetmiştik. Şimdi kısa bir hatırlayalım. Terminalinize bu komutu girin ve sonuçları analiz etmeye başlayalım. İşte komutun çıktısı:

Çıktının ilk alanı, dosyaların ve dizinlerin izinlerini tanımlayan bir koddur. Bu alandaki ilk karakter, nesnenin türünü belirtir:
- dosyalar için
d dizinler için
l bağlantılar için
c karakter cihazları için
b blok cihazları için
n ağ cihazları için
Sonrasında üç adet üç karakterlik set gelir. Her bir set, erişim izni tripletini tanımlar:
r nesne için okuma izni
w nesne için yazma izni
x nesne için çalıştırma izni
Eğer bir izin reddedilmişse, o konumda bir tire (-) görünür. Bu üç set, nesnenin üç güvenlik seviyesini temsil eder:
Nesnenin sahibi
Nesneyi sahiplenen grup
Sistem üzerindeki diğer herkes
Aşağıdaki bir çıktı üzerinden geçerli kullanıcı, grup ve diğer kullanıcı izinlerini görebiliriz. Aşağıdaki örnek üzerinden görebiliriz.
drwxr-xr-x 2 darkside darkside 4096 Şub 21 14:38 Belgeler
Bu dosya izni şu şekilde okunabilir:
rwx (dosya sahibi için): Dosya sahibi olan rich kullanıcısı, dosyayı okuma, yazma ve çalıştırma izinlerine sahiptir (tam izinler).
rwx (dosya grubunun sahibi için): Aynı izinler, dosya grubunun sahibi olan rich grubunun üyeleri için de geçerlidir.
r-x (sistemdeki diğer herkes için): Diğer kullanıcılar sadece dosyayı okuma ve çalıştırma iznine sahiptir; yazma izni (w) yoktur, bu yüzden w yerine - bulunur.
Varsayılan Dosya İzinleri
Linux sisteminde yeni bir dosya oluşturduğunuz zaman buvarsayılan dosya izinlerinin nereden geldiğini merak ediyor olabilirsiniz. Bu izinler umask adı verilen bir sistem ayarı tarafından verilir.
Umask, yeni oluşturulan dosyalar ve dizinler için başlangıçta hangi izinlerin verilmemesi gerektiğini belirleyen bir değeridir. Bu değer, dosya veya dizin oluşturulduğunda, izinlerden çıkarılacak kısmı "maskeleme" işlevi görür.
umask değeri dosya izinlerini nasıl şekillendireceğimizi belirler. Şimdi umask komutunun çıktısı ne anlama geliyor bunu yorumlayalım. Terminale umask yazın ve sonuçları inceleyelim:
darkside@debian:~$ umask
İşte komutun çıktısı:
0022
Buradaki 0022 değeri, umask değeridir. Şimdi bu değeri nasıl yorumlayacağımızı adım adım görelim:
Umask, üç basamaktan oluşur. Bu üç basamağın her biri, kullanıcı (owner), grup (group) ve diğer herkes (others) için hangi izinlerin verilmeyeceğini gösterir.
Örneğin, 0022 umask'ı şu şekilde yorumlanır:
0: Özel bir güvenlik özelliği olan sticky bit için ayrılmıştır (şu anda bunu geçiyoruz).
2: Kullanıcıya yazma izni verilmez.
2: Grup üyelerine yazma izni verilmez.
0: Diğer herkese yazma izni verilmez.
Oktal İzinler ve Umask Umask, dosya ve dizinlerin izinlerini "maskeler". Bir dosya veya dizin için başlangıçta tam izinler vardır:
Dosyalar için: 666 (okuma ve yazma izni tüm kullanıcılara verilir)
Dizinler için: 777 (okuma, yazma ve çalıştırma izni tüm kullanıcılara verilir)
Umask değeri bu izinlerden çıkarılır. Örneğin, umask 0022 ile:
Dosya için: 666 - 022 = 644 → Bu, dosya sahibine okuma ve yazma izni, grup ve diğer kullanıcılara ise sadece okuma izni verir.
Dizin için: 777 - 022 = 755 → Bu, dizin sahibine okuma, yazma ve çalıştırma izni verir, grup ve diğer kullanıcılara ise okuma ve çalıştırma izni verir.
Bu izinlerin ne anlama geldiğini aşağıdaki tablodan bakabilirsiniz:
İzinler | İkili | Oktal | Açıklama |
--- | 000 | 0 | Hiçbir izin yok |
--x | 001 | 1 | Yalnızca çalıştırma izni |
-w- | 010 | 2 | Yalnızca yazma izni |
-wx | 011 | 3 | Yazma ve çalıştırma izni |
r-- | 100 | 4 | Yalnızca okuma izni |
r-x | 101 | 5 | Okuma ve çalıştırma izni |
rw- | 110 | 6 | Okuma ve yazma izni |
rwx | 111 | 7 | Okuma, yazma ve çalıştırma izni |
İstersek farklı bir umask değeri ayarlayabiliriz. Bu değeri ayarlayalım ve çıktıya bakalım.
darkside@debian:~$ umask 026
Burada umask değerini değiştirdik.
darkside@debian:~$ touch linuxshfile
Yeni bir dosya oluşturduk ve bu izinleri hesaplayacak olursak:
666 - 026 = 640
Burada, umask 026 ile dosyanın izinleri 640 olur. Bu, dosya sahibine okuma ve yazma, grubun yalnızca okuma, diğer herkesin ise hiç bir izne sahip olmadığı anlamına gelir. Burada bir dosya olduğu için 666 üzerinden işlem yaptık eğer bir dizin olsaydı 777 üzerinden hesaplama yapacaktık.
-rw-r----- 1 darkside darkside 0 Mar 23 14:18 linuxshfile
İşte yeni oluşan dosyamız tam olarak beklediğimiz izinlere sahiptir. Yani umask komutu ile yukarıdaki hesaplamaları yaparak dosyamızın veya dizinimizin nasıl bir izne sahip olacağını belirleyebiliriz.
Güvenlik Ayarlarını Değiştirmek
Bir dosya ve dizin oluşturduktan sonra izinleri değiştirmek isteyebilirsiniz. Sistem bunun için chmod adında bir komut sunar. Bu komut çeşitli şekillerde dosya izinlerini değiştirmenize olanak sağlar. Aşağıdaki örnekler ile bunu nasıl yapabileceğiniz gösterilmiştir. chmod komutunun kullanımı bu şekildedir.
chmod seçenekler mod dosya
chmod kullanımının birinci yolu oktal yol ile değiştirmektir. Yukarıdaki tabloda oktal değerlerin ne anlama geldiğini vermiştik isterseniz oradan tekrar bakabilirsiniz.
darkside@debian:~$ chmod 760 linuxshfile
Dosya izinlerini ayarlamış olduk bu kullanıcı için tüm izinleri verirken, grup için okuma ve yazma izni ve diğer kullanıcılar için ise hiçbir izin vermeyecektir. Peki dosyayı ls -l ile kontrol edelim. Bakalım işe yaradı mı ?
-rwxrw---- 1 darkside darkside 0 Mar 23 14:18 linuxshfile
Evet gerçeken komutumuz çalıştı ve gerekli izinleri beklediğimiz gibi verdi.
Diğer bir yöntem ise sembolik olarak dosya iziznlerini değiştirmektir. Bu oktal işleme göre daha anlaşılır ve kolaydır. İşte bu izinlerin nasıl kullanılacağına ve bu sembollerin ne anlama geldiğini görelim.
[ugoa…][[+-=][rwxXstugo…]
ugoa: İzinlerin hangi kullanıcı türlerine uygulanacağını belirtir:
u: Kullanıcı (owner)
g: Grup (group)
o: Diğer herkes (others)
a: Hepsi (tüm kullanıcılar)
+: İzin ekler.
-: İzin çıkarır.
=: İzinleri belirtilen değerle eşitler (tam olarak ayarlar).
rwxXstugo: İzin türleri:
r: Okuma izni (read)
w: Yazma izni (write)
x: Çalıştırma izni (execute)
X: Sadece dizinlere veya zaten çalıştırma iznine sahip dosyalara çalıştırma izni ekler.
s: UID veya GID ayarlarını belirler.
t: Program metni kaydeder (sticky bit).
u: Kullanıcı izinlerini ayarlar.
g: Grup izinlerini ayarlar.
o: Diğer kullanıcı izinlerini ayarlar.
Birkaç örnek üzerinden verelim.Örneğin diğer kullanıcılara okuma izni verelim:
darkside@debian:~$ chmod o+r linuxshfile
Dosyayı kontrol edin yine ls -l komutu ile:
-rwxrw-r-- 1 darkside darkside 0 Mar 23 14:18 linuxshfile
Evet okuma izni gerçekten verilmiş. Ancak bu izni geri kaldırmak isteyebilirsiniz bunun için:
darkside@debian:~$ chmod o-r linuxshfile
Bu şekilde izin eklemiş ve kaldırmış olduk. Sizde kullanıcı veya grup için aynı işlemleri yapabilirsiniz. Bu yöntem daha kolay görünüyor değil mi ?
Dosya Sahibi ve Grubunu Değiştirmek
ls komutu ile dosyayı hangi kullanıcının oluşturduğunu görmüştük. Burada bu dosyanın sahibini ve dosyanın ait olduğu grubu nasıl değiştrebileceğimizi göreceğiz.
Bunun için chown komutunu kullanacağız.
chown seçenekler sahip[.grup] dosya
sahip: Dosyanın yeni sahibi. Bu, kullanıcı adı veya sayısal UID (kullanıcı kimliği) olabilir.
grup (isteğe bağlı): Dosyanın ait olduğu grup. Bu da kullanıcı adı veya sayısal GID (grup kimliği) olabilir.
Dosyanın sadece sahibini değiştirmek için aşağıdaki komutu kullanın:
darkside@debian:~$ chown testuser linuxshfile
Burada dosyanın yeni sahibi testuser kullanıcısı olmuştur.
Dosyanın hem sahibini hemde grubunu değiştirmek için ise:
darkside@debian:~$ chown testuser.testgroup linuxshfile
Dosyanın sadece bulunduğu grubu değiştirmek için:
darkside@debian:~$ chown .testgroup linuxshfile
Burada parametreler ile kullanım sağlayabilirsiniz. Bir klasör kullanıcısını ve grubunu değiştirdiğinizde bu klasör içindeki dosyaların sahibi ve grubuda değişmesini sitiyorsanız -R(recursive) parametresini kullanın.
darkside@debian:~$ chown -R testuser.testgroup linuxshdir
Burada dizin içindeki dosyalarında kullanıcı ve grubu değişmiştir.
Aslında dosya veya kalsörlerin sadece grubunu değiştirmek için chgrp komutunu kullanabiliriz.
darkside@debian:~$ chgrp testgroup linuxshfile
Özetle komutlar:
chown komutu, dosyanın sahibini ve/veya grubunu değiştirmek için kullanılır.
chgrp komutu ise yalnızca dosyanın grubunu değiştirmek için kullanılır.
-R seçeneği, tüm alt dizinlerdeki dosyaların sahipliğini değiştirmek için kullanılır (rekürsif işlem).
gibi işlemleri yapmak için kullanılır.
Dosya Paylaşımı ve SGID Biti
Bu yazıda, SGID (Set Group ID) bitinin nasıl çalıştığını ve umask komutunu nasıl ayarlayarak grup bazlı dosya paylaşımını nasıl etkinleştirebileceğinizi öğreneceksiniz. Ayrıca, dosya izinlerini sembolik ve oktal modda nasıl değiştirebileceğimizi göreceğiz.
Linux'ta dosyalar ve dizinler üzerinde erişim kontrolü sağlamak için SGID (Set Group ID) bitini kullanabilirsiniz. SGID, bir dosya veya dizin için özel bir güvenlik özelliğidir. Özellikle bir dizinde yeni dosyalar oluşturulurken bu bitin kullanılması, tüm dosyaların varsayılan olarak dizinin grubuyla ilişkilendirilmesini sağlar. Böylece, dizine kim dosya eklerse, dosyanın grubu dizinin grubuyla aynı olur.
darkside@debian:~$ chmod g+s linuxshdir
Artık burada SGID bitini gruba ekleyerek linuxshdir içinde oluşturulan her dosya artık bu klasördeki grup ile aynı olacaktır.
Bu blog yazımızda dosya izinlerini ele aldık ve bu izinleri nasıl değiştirebileceğimizi gördük. Bir sonraki blog yazılarında görşmek üzere ....
Comentarios