Linux/Unix'te Dosya İzinleri: Okuma, Yazma ve Değiştirme İşlemleri

⚡ Akıllı Özet

Linux ve Unix'te dosya izinleri, her dosyanın kimler tarafından okunabileceğini, yazılabileceğini ve çalıştırılabileceğini kontrol ederek, çok kullanıcılı bir sistemi iki katman üzerinden korur: kullanıcıyı, grubu ve diğerlerini atayan sahiplik ve okuma, yazma ve çalıştırma izin bitleri.

  • 👥 mülkiyet: Her dosya ve dizin bir kullanıcıya (sahibe), bir gruba ve bazen "dünya" olarak adlandırılan diğerlerine aittir.
  • 🔑 İzinler: Her sahip sınıfı için üç izin geçerlidir: okuma (r), yazma (w) ve yürütme (x).
  • 📃 İlan: `ls -l` komutu, sahip, grup ve dünya için `-rw-rw-r–` gibi bir izin dizesi gösterir.
  • 🔢 Mutlak mod: Üç basamaklı sekizli bir sayı ile `chmod` komutu, örneğin 764 gibi, üç sınıfın tümü için aynı anda izinleri ayarlar.
  • ➕ Sembolik mod: `chmod` komutu `u`, `g`, `o`, `a` ve `+`, `-`, `=` parametreleriyle birlikte kullanıldığında, diğer sahip sınıflarına dokunmadan yalnızca bir sahip sınıfını değiştirir.
  • 🧭 Sahiplik komutları: `chown` komutu hem sahibi hem de grubu değiştirirken, `chgrp` yalnızca grubu değiştirir.
  • 🤖 Yapay zekâ yardımı: Yapay zekâ asistanları ve GitHub Copilot, chmod ve chown komutlarını oluşturabilir ve açıklayabilir.

Linux ve Unix'te Dosya İzinleri: Nasıl okunur, yazılır ve değiştirilir

Dosya izinleri Linux Unix, her bir dosyayı kimin okuyabileceğine, değiştirebileceğine veya çalıştırabileceğine karar verir; bu da paylaşımlı, çok kullanıcılı bir sistemin güvenliğini sağlar. Bu sayfa, dosya sahipliği, okuma, yazma ve çalıştırma izinleri ve bunları değiştiren komutlar hakkında bilgi vermektedir.

Linux, aynı anda birçok kullanıcının erişebileceği çok kullanıcılı bir işletim sistemi olan Unix'in bir klonudur. Linux, herhangi bir değişiklik yapılmadan ana bilgisayarlarda ve sunucularda da kullanılabilir. Ancak bu, istenmeyen veya kötü niyetli bir kullanıcının önemli verileri bozabileceği, değiştirebileceği veya silebileceği için güvenlik endişelerini artırır. Etkin güvenlik için Linux, yetkilendirmeyi iki seviyeye ayırır:

  • Mülkiyet
  • Izin

Linux'ta dosya izinleri ve sahipliği kavramı çok önemlidir. Burada, Linux izinlerini ve sahipliğini açıklayacak ve her ikisini de ele alacağız. Sahiplikle başlayalım.

Linux Dosya Sahipliği

Unix/Linux sisteminizdeki her dosya ve dizine aşağıda verilen üç tür sahip atanır. Aşağıdaki şema, sahipliğin kullanıcıya, gruba ve diğerlerine nasıl eşlendiğini göstermektedir.

Linux dosya sahipliği şeması, kullanıcı, grup ve diğer izin sınıflarını göstermektedir.

kullanıcı

Kullanıcı dosyanın sahibidir. Varsayılan olarak dosyayı oluşturan kişi dosyanın sahibi olur. Bu nedenle kullanıcıya bazen sahip de denir.

Grup

A kullanıcı grubu Bir grup birden fazla kullanıcı içerebilir. Bir gruba ait tüm kullanıcılar, dosyaya aynı Linux grup izinlerine sahiptir. Diyelim ki, bir projede birçok kişinin bir dosyaya erişmesi gerekiyor. Her kullanıcıya manuel olarak izin atamak yerine, tüm kullanıcıları bir gruba ekleyebilir ve dosyaya grup izni atayabilirsiniz; böylece yalnızca bu grup üyeleri, başka hiç kimse dosyayı okuyamaz veya değiştiremez.

Diğer

Dosyaya erişimi olan diğer tüm kullanıcılar. Bu kişi dosyayı oluşturmamış veya dosyaya sahip olabilecek bir kullanıcı grubuna ait değildir. Pratikte, bu herkes anlamına gelir. Bu nedenle, başkaları için izin ayarladığınızda, buna "dünya için izin ayarlama" da denir.

Şimdi büyük soru ortaya çıkıyor: Linux, bir kullanıcı 'A'nın başka bir kullanıcı 'B'nin hayati bilgilerini veya verilerini içeren bir dosyayı etkilemesini engelleyecek şekilde bu üç kullanıcı türünü nasıl ayırt ediyor? Bu, sizin bilgisayarınızda çalışan bir meslektaşınızın size erişmesini istememek gibidir. Linux bilgisayar Resimlerinizi görüntülemek için. İşte burada izinler devreye giriyor ve kullanıcı davranışını tanımlıyor.

Linux'taki izin sistemini anlayalım.

Linux Dosya İzinleri

Unix/Linux sisteminizdeki her dosya ve dizin, yukarıda bahsedilen üç sahip için tanımlanmış şu üç izne sahiptir.

  • Okuyun: Bu izin size bir dosyayı açma ve okuma yetkisi verir. Bir dizin üzerindeki okuma izni ise içeriğini listeleme olanağı sağlar.
  • Yazmak: Yazma izni, bir dosyanın içeriğini değiştirme yetkisi verir. Bir dizine yazma izni ise, dizinde depolanan dosyaları ekleme, kaldırma ve yeniden adlandırma yetkisi verir. Dosyaya yazma izniniz olduğunu ancak dosyanın depolandığı dizine yazma izniniz olmadığını düşünün. Dosyanın içeriğini değiştirebilirsiniz, ancak dosyayı yeniden adlandıramaz, taşıyamaz veya dizinden kaldıramazsınız.
  • Yürüt: In WindowsÇalıştırılabilir bir program genellikle ".exe" uzantısına sahiptir ve kolayca çalıştırabilirsiniz. Unix/Linux'ta, çalıştırma izni verilmedikçe bir programı çalıştıramazsınız. Çalıştırma izni verilmemişse, program kodunu görebilir veya değiştirebilirsiniz (okuma ve yazma izinleri verilmişse), ancak çalıştıramazsınız.

Linux'ta dosya izinlerini örneklerle inceleyelim. Terminalde `ls -l` komutunu çalıştırdığımızda şu çıktıyı alırız:

ls -l

Aşağıdaki ekran görüntüsü, izin dizesini uzun bir liste halinde göstermektedir.

Terminalde `ls -l` komutunun çıktısı, bir dosya için `rw-rw-r--` izin dizesini göstermektedir.

Burada '-rw-rw-r–' ifadesini vurguladık ve bu garip görünümlü kod, bize sahibine, kullanıcı grubuna ve dünyaya verilen Unix izinleri hakkında bilgi veriyor.

Burada, ilk '-' işareti bir dosya seçtiğimizi gösteriyor. Aşağıdaki simge ise normal bir dosyayı işaret ediyor.

Listelenen öğenin normal bir dosya olduğunu gösteren küçük simge.

Aksi takdirde, eğer bir dizin olsaydı, aşağıdaki listede olduğu gibi 'd' harfi gösterilirdi.

Terminalde, izin dizesinde başında "d" harfi bulunan bir dizini gösteren liste.

Karakterleri hatırlaması oldukça kolaydır.

  • r = okuma izni
  • w = yazma izni
  • x = yürütme izni
  • – = izin yok

Şöyle bakalım. Kodun ilk kısmı 'rw-'. Bu, 'Home' adlı sahibin şunları yapabileceğini gösteriyor:

  • Dosyayı oku
  • Dosyayı yazın veya düzenleyin

Dosya sahibi dosyayı çalıştıramaz çünkü yürütme biti '-' olarak ayarlanmıştır. Aşağıdaki simge, yürütme bitinin tireye dönüştürüldüğünü göstermektedir.

Yürütme izni bitinin sıfırlandığını gösteren küçük simge (tire işaretiyle).

Tasarım gereği, Fedora, CentOS ve benzeri birçok Linux dağıtımı Ubuntu Bir kullanıcıyı, kullanıcının adıyla aynı ada sahip bir gruba ekleyin. Dolayısıyla, 'tom' adlı kullanıcı 'tom' adlı bir gruba eklenir.

İkinci kısım 'rw-'dir. Bu, 'Ana Sayfa' kullanıcı grubu içindir ve grup üyeleri şunları yapabilir:

  • Dosyayı oku
  • Dosyayı yazın veya düzenleyin

Üçüncü kısım ise tüm dünya için, yani herhangi bir kullanıcı için geçerlidir. 'r-' ifadesi yer alır. Bu, kullanıcının yalnızca şunları yapabileceği anlamına gelir:

  • Dosyayı oku

Aşağıdaki açıklama, izin dizesinin her bir bölümünü sahibine, gruba ve dünyaya eşleştirir.

rw-rw-r-- izin dizesinin sahip, grup ve dünya bölümlerine ayrılması

Linux'ta 'chmod' komutunu kullanarak dosya/dizin izinlerini değiştirme

Örneğin, bir iş arkadaşınızın kişisel fotoğraflarınızı görmesini istemiyorsunuz. Bu, dosya izinlerini değiştirerek sağlanabilir.

'chmod' komutunu kullanabiliriz. komuta'Değiştirme modu' anlamına gelen `change mode` komutunu kullanarak, bir dosya veya dizin üzerinde sahip, grup ve dünya için izinler (okuma, yazma, çalıştırma) ayarlayabiliriz.

Sözdizimi:

chmod permissions filename

Bu komutu kullanmanın iki yolu vardır:

  • Mutlak mod
  • sembolik mod

Linux'ta Mutlak (Sayısal) Mod

Bu modda, dosya izinleri karakterlerle değil, üç basamaklı sekizli sayı olarak temsil edilir. Aşağıdaki tabloda tüm izin türleri için sayılar verilmiştir.

Numara İzin Türü sembol
0 İzin yok -
1 Gerçekleştirmek –X
2 Yazmak -W-
3 Yürüt + Yaz -wx
4 Okumak r-
5 Okuma + Yürütme rx
6 Oku + Yaz rw
7 Okuma + Yazma + Yürütme rwx

Aşağıdaki terminal penceresinde gösterildiği gibi, chmod komutunun nasıl çalıştığını görelim.

Terminalde, sample dosyasının izinlerini değiştirmek için chmod 764 komutunu çalıştırıyorum.

Yukarıdaki terminal penceresinde, 'sample' dosyasının izinlerini '764' olarak değiştirdik. '764' mutlak kodu şu anlama geliyor:

  • Sahibi okuma, yazma ve yürütme yetkisine sahiptir.
  • Kullanıcı grubu okuma ve yazma yetkisine sahiptir.
  • Dünya sadece okuyabilir.

Bu, aşağıdaki sonuçta olduğu gibi '-rwxrw-r–' şeklinde gösterilir.

chmod 764 komutundan sonra -rwxrw-r-- izin dizesiyle örnek dosyayı gösteren terminal çıktısı.

Linux'ta bir dosyaya mutlak bir sayı atayarak kullanıcı izinlerini nasıl değiştirebileceğiniz aşağıda açıklanmıştır.

Linux'ta Sembolik Mod

Mutlak modda, üç sahibin tümünün izinlerini değiştirirsiniz. Sembolik modda ise belirli bir sahibin izinlerini değiştirebilirsiniz. Bu mod, Unix dosya izinlerini değiştirmek için matematiksel semboller kullanır.

Kullanım Açıklama
+ Bir dosyaya veya dizine izin ekler
- İzni kaldırır
= İzinleri ayarlar ve daha önce ayarlanmış olan izinleri geçersiz kılar.

Çeşitli sahipler aşağıdaki şekilde temsil edilmektedir.

kullanıcı Gösterimler
u kullanıcı / sahibi
g Grup
o Diğer
a herşey

İzinleri 755 gibi sayılarla değil, rwx gibi karakterlerle ifade edeceğiz. Aşağıdaki örneğe bakalım.

Terminalde u, g, o ve +, -, = sembolik komutlarıyla chmod kullanarak belirli izinleri değiştirmek

Linux'ta Sahipliği ve Grubu Değiştirmek

Bir dosyanın veya dizinin sahipliğini değiştirmek için aşağıdaki komutu kullanabilirsiniz:

chown user filename

Bir dosya veya dizin için hem kullanıcıyı hem de grubu değiştirmek istiyorsanız, şu komutu kullanın:

chown user:group filename

Aşağıda gösterildiği gibi bunu uygulamada görelim.

Dosyanın sahibini ve grubunu değiştirmek için `chown` komutunu çalıştıran terminal.

Sadece grup sahibini değiştirmek istiyorsanız şu komutu kullanın:

chgrp group_name filename

'chgrp', "change group" (grup değiştirme) anlamına gelir. Aşağıdaki ekran görüntüsü, chgrp komutunun kullanımını göstermektedir.

Terminalde chgrp komutu çalıştırılarak yalnızca dosyanın grup sahibi değiştiriliyor.

Bahşiş

  • /etc/group dosyası, sistemde tanımlanmış tüm grupları içerir.
  • Aşağıda gösterildiği gibi, üyesi olduğunuz tüm grupları bulmak için "gruplar" komutunu kullanabilirsiniz.

Terminalde `groups` komutunu çalıştırarak kullanıcının üye olduğu grupları listelemek.

  • Aşağıda gösterildiği gibi, varsayılan grubunuz dışında bir grubun üyesi olarak çalışmak için `newgrp` komutunu kullanabilirsiniz.

Terminalde farklı bir gruba geçmek için `newgrp` komutu çalıştırılıyor.

  • Aynı dosyaya iki farklı grubun sahip olması mümkün değildir.
  • Linux'ta iç içe gruplar bulunamaz. Bir grup, başka bir grubun alt grubu olamaz.
  • x — bir dizini çalıştırmak, o dizine "girmeye" ve alt dizinlere olası erişim elde etmeye izin verilmesi anlamına gelir.
  • Dosyalar ve dizinler üzerinde ayarlayabileceğiniz başka izinler de vardır; bunlar daha sonraki bir ileri düzey eğitimde ele alınacaktır.

SSS

`chmod` komutuyla çalıştırma izni ekleyin. Sembolik biçim olan `chmod +x script.sh` herkese çalıştırma izni verirken, `chmod u+x script.sh` yalnızca sahibine verir. Bundan sonra, betiği doğrudan dizininden `./script.sh` komutuyla çalıştırabilirsiniz.

`umask`, yeni oluşturulan dosya ve dizinlerden kaldırılan varsayılan izinleri ayarlar. Dosyalar 666'dan, dizinler ise 777'den başlar, ardından `umask` değeri `sub` olur.tracted. Yaygın olarak kullanılan 022 umask değeri, dosyalara 644, dizinlere ise 755 erişim izni verir. Geçerli değeri görmek için umask komutunu çalıştırın.

Bunlar özel izin bitleridir. setuid, bir programı sahibinin haklarıyla çalıştırır; setgid, programı grubun haklarıyla çalıştırır veya yeni dosyaların bir dizinin grubunu devralmasını sağlar; sticky biti ise yalnızca dosya sahibinin /tmp gibi paylaşılan bir dizin içindeki dosyayı silmesine izin verir.

Evet. Sadece root kullanıcısı veya sudo çalıştıran bir kullanıcı chown komutuyla bir dosyanın sahibini değiştirebilir. Normal bir sahip, dosyasını ait olduğu gruba devredebilir, ancak güvenlik nedenleriyle dosyayı başka bir kullanıcıya yeniden atamak için root ayrıcalıkları gerekir.

Bu hata, dosyayı değiştirme yetkinizin olmadığını gösteriyor. `chmod` komutunu çalıştırmak için dosyanın sahibi olmanız veya root yetkisine sahip olmanız gerekir; `chown` komutunu çalıştırmak için genellikle root yetkisine ihtiyacınız vardır. Komutun başına `sudo` ekleyin veya dosyanın sahibine geçin ve tekrar deneyin.

Özyinelemeli -R seçeneğini kullanın. `chmod -R 755 myfolder` komutu, izinleri klasöre ve içindeki her dosya ve alt klasöre uygular; `chown -R user:group myfolder` komutu ise sahiplik için aynı işlemi yapar. -R seçeneğini dikkatli kullanın, çünkü klasörün altındaki her öğeyi etkiler.

Yapay zekâ asistanları, "bu komut dosyasını yalnızca benim için çalıştırılabilir yap" gibi bir isteği doğru chmod komutuna çevirebilir, 755 gibi bir modun ne anlama geldiğini açıklayabilir ve 777 gibi riskli ayarlara karşı uyarıda bulunabilir. Makine öğrenimi tabanlı güvenlik araçları ayrıca izinleri tehlikeli derecede açık görünen dosyaları da işaretler.

Evet. GitHub Yardımcı Pilotu İstediğiniz izinleri veya sahibi açıklayan kısa bir yorumdan chmod, chown ve chgrp komutlarını önerebilir ve siz yazarken bunları tamamlayabilir. Revİzin ve sahiplik değişiklikleri güvenliği etkilediğinden, çalıştırmadan önce her öneriyi inceleyin.

Bu yazıyı şu şekilde özetleyin: