Örneklerle Linux’ta Chmod Komutu Nasıl Kullanılır

Merhabalar,

Linux’ta dosyalara erişim, dosya izinleri, öznitelikler ve sahiplik aracılığıyla yönetilir. Bu, yalnızca yetkili kullanıcıların ve işlemlerin dosyalara ve dizinlere erişmesini sağlar.

Bu eğitim yazısında, dosya ve dizinlerin erişim izinlerini değiştirmek için chmod komutunun nasıl kullanılacağını anlatmaya çalışacağım.

 

Linux Dosya İzinleri:

Daha ileri gitmeden önce, temel Linux izinleri modelini açıklayalım.

Linux’ta her dosya bir sahip ve bir grupla ilişkilendirilir ve üç farklı kullanıcı sınıfı için izin erişim haklarıyla atanır:

 

Dosya sahibi.

Grup üyeleri.

Diğerleri (Diğer herkes).

 

Dosya sahipliği chown ve chgrp komutları kullanılarak değiştirilebilir.

 

Her sınıf için geçerli olan üç dosya izni türü vardır:

Okuma izni.

Yazma izni.

Yürütme izni.

 

Bu kavram, hangi kullanıcıların dosyayı okumasına, dosyaya yazmasına veya dosyayı yürütmesine izin verileceğini belirlemenize olanak tanır.

 

Dosya izinleri ls komutu kullanılarak görüntülenebilir.

ls -l linux-data.txt

 

İlk karakter dosya türünü gösterir. Normal bir dosya (-), dizin (d), sembolik bir bağlantı (l) veya başka herhangi bir özel dosya türü olabilir.

Sonraki dokuz karakter, her biri üç karakterden oluşan üç üçlü dosya izinlerini temsil eder. İlk üçlü sahip izinlerini, ikincisi grup izinlerini ve son üçlü diğer herkesin izinlerini gösterir. İzinler, dosya türüne bağlı olarak farklı bir anlama sahip olabilir.

Yukarıdaki örnekte (rwx-rwx-rwx), dosya sahibine,  gruba ve diğer herkese okuma,  yazma ve uygulama izinleri verildiği gösterir.

 

 

İzinlerin Dosyalar Üzerindeki Etkisi:

İzinler karakter Açıklama
Read - Dosyayı okuyamazsın. Dosya içeriğini görüntüleyemezsiniz.
r Dosya okunabilir.
Write - Dosya değiştirilemez
w Dosyayı değiştirebilirsiniz.
Execute - Dosyayı çalıştıramazsın
x Dosyayı çalıştırabilirsin
s Kullanıcı üçlüsünde bulunursa, setuid bitini ayarlar. Grup üçlüsünde bulunursa, setgid bitini ayarlar. Ayrıca x bayrağının ayarlandığı anlamına gelir.
Yürütülebilir bir dosyada setuid veya setgid bayrakları ayarlandığında, dosya, dosyanın sahibi ve/veya grup ayrıcalıklarıyla yürütülür.
S Büyük S küçük s  ile aynı ama x bayrağı ayarlı değil. Bu bayrak dosyalarda nadiren kullanılır.
t t Diğer üçlüde bulunursa, yapışkan biti ayarlar.
Ayrıca x bayrağının ayarlandığı anlamına gelir. Bu bayrak dosyalarda işe yaramaz.
T Büyük T küçük t ile aynı, ancak x bayrağı ayarlanmadı. Bu bayrak dosyalarda işe yaramaz.

 

 

İzinlerin Dizinler (Klasörler) Üzerindeki Etkisi

Linux’ta Dizinler, diğer dosya ve dizinleri içeren özel dosya türleridir.

İzinler Karakter Açıklama
Read - Dizinin içeriği gösterilemez.
r Dizinin içeriği gösterilebilir.
Write - Dizinin içeriği değiştirilemez.
w Dizinin içeriği değiştirilebilir.
Execute - Dizin olarak değiştirilemez.
x Dizin cd kullanılarak gezilebilir
s Kullanıcı üçlüsünde bulunursa, setuid bitini ayarlar. Grup üçlüsünde bulunursa, setgid bitini ayarlar. Ayrıca x bayrağının ayarlandığı anlamına gelir. Setgid bayrağı bir dizinde ayarlandığında, içinde oluşturulan yeni dosyalar, dosyayı oluşturan kullanıcının birincil grup kimliği yerine dizin grubu kimliğini (GID) devralır.

setuid’in dizinler üzerinde hiçbir etkisi yoktur.

S s ile aynı, ancak x bayrağı ayarlanmadı. Bu bayrak dizinlerde işe yaramaz.
t Diğer üçlüde bulunursa, yapışkan biti ayarlar.
Ayrıca x bayrağının ayarlandığı anlamına gelir. Yapışkan bit bir dizinde ayarlandığında, yalnızca dosyanın sahibi, dizinin sahibi veya yönetici kullanıcı dizindeki dosyaları silebilir veya yeniden adlandırabilir.
T t ile aynı, ancak x bayrağı ayarlanmadı. Bu bayrak dizinlerde işe yaramaz.

 

chmod’u kullanma:

chmod komutu aşağıdaki şekilde kullanılır.

chmod [SEÇENEKLER] MODE DOSYA

chmod komutu, sembolik veya sayısal mod veya bir referans dosyası kullanarak bir dosyadaki izinleri değiştirmenize olanak tanır. Modları bu makalenin ilerleyen kısımlarında daha ayrıntılı olarak açıklayacağız. Komut, argüman olarak boşlukla ayrılmış bir veya daha fazla dosya ve/veya dizini kabul edebilir.

 

Yalnızca root, dosya sahibi veya sudo ayrıcalıklarına sahip kullanıcı bir dosyanın izinlerini değiştirebilir. Chmod’u kullanırken, özellikle de izinleri tekrar tekrar değiştirirken çok dikkatli olun.

 

Sembolik Yöntem İle İzinleri Değiştirme:

Sembolik modu kullanırken chmod komutunun söz dizimi aşağıdaki şekildedir.

chmod [OPTIONS] [ugoa…][-+=]izinler…[,…] DOSYA...

 

İlk bayrak seti ([ugoa…]), kullanıcı bayrakları, hangi kullanıcıların dosya izinlerinin değiştirileceğini tanımlar.

u – Dosya sahibi.

g – Grubun üyesi olan kullanıcılar.

o – Diğer tüm kullanıcılar.

a – Tüm kullanıcılar, ugo ile aynıdır.

 

Kullanıcı bayrağı atlanırsa, varsayılan bir a’dır ve umask tarafından ayarlanan izinler etkilenmez.

İkinci bayrak grubu ([-+=]), işlem bayrakları, izinlerin kaldırılmasını, eklenmesini veya ayarlanmasını tanımlar.

 

– Belirtilen izinleri kaldırır.

+ Belirtilen izinleri ekler.

= Geçerli izinleri belirtilen izinlerle değiştirir.

= sembolünden sonra herhangi bir izin belirtilmezse, belirtilen kullanıcı sınıfına ait tüm izinler kaldırılır.

 

İzinler (izinler…), sıfır veya şu harflerden biri veya daha fazlası kullanılarak açıkça ayarlanabilir: r, w, x, X, s ve t. İzinleri bir kullanıcı sınıfından diğerine kopyalarken u, g ve o kümesinden tek bir harf kullanın.

 

 

Birden fazla kullanıcı sınıfı ([,…]) için izinleri ayarlarken, sembolik kipleri ayırmak için virgül (boşluksuz) kullanın.

 

Aşağıda chmod komutunun sembolik modda nasıl kullanılacağına dair bazı örnekler yapalım.

Grup üyelerine dosyayı okuma izni verin, ancak yazma ve yürütme izni vermeyin

sudo chmod g=r ./1/2.txt

 

Tüm kullanıcılar için yürütme iznini kaldırın:

sudo chmod a-x ./1/2.txt

 

 

 

Diğer bütün kullanıcılar için yazma iznini  kaldıralım.

sudo chmod o-w ./1/2.txt

 

 

Dosyanın sahibi dışındaki tüm kullanıcılar için okuma, yazma ve yürütme iznini kaldıralım.

sudo chmod og-rwx ./1/2.txt

 

Aynı şey aşağıdaki formu kullanarak da gerçekleştirilebilir:

sudo chmod og= ./1/2.txt

 

Dosyanın sahibine okuma, yazma ve yürütme izni verin, dosya grubuna okuma izinleri verin ve diğer tüm kullanıcılara izin vermeyelim.

sudo chmod u=rwx,g=r,o= ./1/2.txt

 

Dosyanın grup üyelerinin sahip olduğu izinlere dosyanın sahibi izinlerini ekleyelim.

sudo chmod g+u ./1/2.txt

 

 

Sayısal Yöntem:

Sayısal yöntem kullanılırken chmod komutunun sözdizimi aşağıdaki biçime sahiptir.

chmod [SEÇENEKLER] SAYI DOSYA...

Sayısal modu kullanırken, aynı anda üç kullanıcı sınıfının tümü (sahip, grup ve diğerleri) için izinleri ayarlayabilirsiniz.

SAYI 3 veya 4 basamaklı bir sayı olabilir.

 

3 basamaklı bir sayı kullanıldığında, ilk basamak dosya sahibinin izinlerini, ikincisi dosyanın grubunu ve sonuncusu diğer tüm kullanıcıların izinlerini temsil eder.

Her yazma, okuma ve yürütme izinleri aşağıdaki sayı değerlerine sahiptir.

 

r (okuma) =4

4 w (yazma) = 2

x (yürüt) = 1

izin yok = 0

 

Belirli bir kullanıcı sınıfının izin sayısı, o grup için izinlerin değerlerinin toplamı ile temsil edilir.

 

Sayısal modda dosyanın izinlerini bulmak için tüm kullanıcı sınıflarının toplamlarını hesaplamanız yeterlidir. Örneğin, dosyanın sahibine okuma, yazma ve yürütme izni vermek, dosya grubuna okuma ve yürütme izinleri vermek ve diğer tüm kullanıcılara sadece okuma izinleri vermek için aşağıdakileri yapmanız gerekir:

 

Sahip: rwx=4+2+1= 7

Grup: r-x=4+0+1= 5

Diğerleri: r=4+0+0=4

 

Yukarıdaki yöntemi kullanarak, istenen izinleri temsil eden 754 sayısına ulaşıyoruz.

Setuid, setgid ve yapışkan bit bayraklarını kurmak için dört basamaklı bir sayı kullanın.

4 basamaklı sayı kullanıldığında, ilk basamak şu anlama gelir:

 

setuid=4

setgid=2

yapışkan=1

değişiklik yok = 0

 

Sonraki üç basamak, 3 basamaklı sayı kullanıldığındakiyle aynı anlama gelir.

İlk hane 0 ise atlanabilir ve mod 3 hane ile temsil edilebilir. Sayısal mod 0755, 755 ile aynıdır.

Sayısal modu hesaplamak için başka bir yöntem (ikili yöntem) de kullanabilirsiniz, ancak bu biraz daha karmaşıktır. 4, 2 ve 1 kullanarak sayısal modun nasıl hesaplanacağını bilmek çoğu kullanıcı için yeterlidir.

 

stat komutunu kullanarak sayısal gösterimde dosyanın izinlerini kontrol edebilirsiniz.

stat ./1/2.txt
stat -c "%a" ./1/2.txt

 

Sayısal modda chmod komutunun nasıl kullanılacağına ilişkin bazı örnekler yapalım.

Dosyanın sahibine okuma ve yazma izinleri verin ve yalnızca grup üyelerine ve diğer tüm kullanıcılara okuma izinleri verelim.

sudo chmod 664 ./1/2.txt

 

Dosyanın sahibine okuma, yazma ve yürütme izinleri verin, grup üyelerine okuma ve yürütme izinleri verin ve diğer tüm kullanıcılara izin vermeyin:

sudo chmod 750 ./1/2.txt

 

Belirli bir dizine  herkes için  okuma, yazma ve yürütme izinleri ve yapışkan bir bitini verelim.

sudo chmod 1777 ./1/2.txt

 

 

Dosya sahibine okuma, yazma ve yürütme izinlerini ayarlayalım ve diğer  tüm kullanıcılar için izin vermeyelim.

sudo chmod 700 ./1/2.txt

 

 

Referans Dosyası Kullanma:

–reference=ref_file seçeneği, dosyanın izinlerini belirtilen referans dosyasıyla (ref_file) aynı olacak şekilde ayarlamanıza izin verir.

Örneğin, aşağıdaki komut 2.txt’in izinlerini 3.txt’ye atayacaktır.Hadi deneyelim.

sudo chmod --reference=2.txt 3.txt

 

Yukarıda görüldüğü gibi 2.txt dosyası üzerinde herkesin sadece okuma hakkı var.Bu izinlerin aynısını 3.txt dosyasına aktarılmasını sağladım.Komutu uygulamadan önce 3.txt üzerinde herkes tam yetkiye sahipti.Komutu uyguladıktan sonra sadece okuma hakkının olduğunu görüyorum.

 

Dosyanın İzinlerini Alt dizinlerden bulunan dosya ve klasörlere Aktarılması (recursively) =

Verilen dizin altındaki tüm dosya ve dizinlerde uyguladığımız izinlerin aktarılabilmesi için  -R (–recursive) seçeneğini kullanmalıyız.

İlk önce R parametresini kullanmadan işlem yapalım ve etkiyi görelim.Aşağıda görüldüğü gibi R olmadan yaptım 1 isimli klasörün altındaki dosyalara izinler aktarılmadı.

sudo chmod 0755 ./1/

 

 

Şimdi R parametresini kullanarak yapalım ve sonucu görelim.Üst dizinlerde dosya sahibine tam yetki diğerlerine okuma ve uygulama hakkı verdim.Kontrol ettiğimde izinlerin alt dizinlerede uygulandığını görebiliyorum.

sudo chmod -R 0755 ./1/

 

 

Sembolik Bağlantılarla Çalışma:

Sembolik bağlantıların her zaman 777 izni vardır.

Varsayılan olarak, sembolik bağlantının izinlerini değiştirirken chmod, bağlantının işaret ettiği dosyadaki izinleri değiştirir.

Eğer Şanlıysnız  hedef sahipliğini değiştirmek yerine, “sembol bağlantısına erişilemiyor: İzin reddedildi” hatası alırsınız.Eğer bu hata gelmezse bağlantının gösterildiği dosyanını izini değiştirilir.

sudo chmod 700 link

 

Yukarıda da görüldüğü gibi link sembolik bağlantının izinlerini değiştirmey çalıştım.Onun izinleri değişmedi onun işaret ettiği 2.txt dosyasının izinleri değişti.

 

Hata, çoğu Linux dağıtımında varsayılan olarak sembolik bağların korunmasından ve hedef dosyalarda işlem yapamamanızdan kaynaklanır. Bu seçenek /proc/sys/fs/protected_symlinks içinde belirtilir. 1, etkin ve 0 devre dışı anlamına gelir. Sembolik bağlantı korumasını devre dışı bırakmamanızı öneriyorum

 

 

Toplu Olarak Dosya İzinlerini Değiştirme:

 

Bazen dosya ve dizin izinlerini toplu olarak değiştirmeniz gereken durumlar olabilir.

En yaygın senaryo, web sitesi dosyasının izinlerini tekrar tekrar 644 ve dizinin izinlerini 755 olarak değiştirmektir.

 

Sayısal yöntemi kullanarak:

find ./web-site/ -type d -exec chmod 755 {} \;
find ./web-site/ -type f -exec chmod 644 {} \;

 

Sembolik yöntemi kullanarak:

find ./web-site/ -type d -exec chmod u=rwx,go=rx {} \;
find ./web-site/ -type f -exec chmod u=rw,go=r {} \;

 

find komutu /web-site altındaki dosya ve dizinleri arayacak ve bulunan her dosya ve dizini izinleri ayarlamak için chmod komutuna iletecektir.

 

Konuyu özetlersek; chmod komutu dosyanın izinlerini değiştirir. İzinler, sembolik veya sayısal mod kullanılarak ayarlanabilir.

 

Umarım bu eğitim sizler için faydalı olur.

 

 

 

Bu eğiticiye oy ver
[Total: 1 Average: 5]
Firat CANOĞLU TAĞ