SSD Nodes Learn Hosting plans →
Rehberler Matt ConnorYazan Matt Connor

drwxr-xr-x ifadesi ne anlama gelir?

Linux dosya izinlerini 755 moduna göre analiz edin. drwxr-xr-x dizgisindeki her karakterin işlevini, dizinlerdeki x yetkisini ve chmod 777 komutunun neden hatalı olduğunu öğrenin.

drwxr-xr-x ifadesinin anlamı

drwxr-xr-x, sahibinin değişiklik yapabildiği, diğer tüm kullanıcıların ise yalnızca okuyabildiği ve içeriğine erişebildiği bir dizini tanımlar. Sekizlik (octal) sistemde bu mod 755 olarak ifade edilir. Linux, ls -l çıktısının her satırının başında bu on karakteri görüntüler. Bu karakterler her zaman aynı sırada ve aynı anlama gelir; dolayısıyla bir dizgiyi öğrenmek, hepsini anlamanızı sağlar.

Kendi testlerinizin sonuçlarını doğru yorumlayabilmeniz için bir kural diğerlerinden önce gelir: root kullanıcısı izin bitlerini yok sayar. Çekirdek, root kullanıcısına CAP_DAC_OVERRIDE yetkisini (isteğe bağlı erişim denetimi geçersiz kılma) tanır; bu nedenle root, mod izin vermese dahi dosyaları açabilir. Bu sayfadaki her örnek, bitler ne olursa olsun root için başarılı olur. Kuralların nasıl işlediğini gözlemlemek istediğinizde normal bir kullanıcı ile oturum açın.

On karakter, teker teker

İncelemek üzere bir dizin ve bir dosya oluşturun. Buradaki işlemler yeni dizinin dışındaki hiçbir şeye dokunmaz.

mkdir -p ~/permdemo/inner
printf 'hello\n' > ~/permdemo/inner/notes.txt
ls -ld ~/permdemo ~/permdemo/inner ~/permdemo/inner/notes.txt

Varsayılan umask değeri olan 022 ile, iki dizin satırı drwxr-xr-x ile başlar ve dosya satırı -rw-r--r-- ile başlar.

  1. karakter bir izin değil, dosya türüdür. d bir dizindir. - normal bir dosyadır. l sembolik bir bağdır. c ve b karakter ve blok aygıt düğümleridir. s bir soket, p ise adlandırılmış bir borudur (named pipe). Bu karakter sekizlik değerin dışında yer alır; bu yüzden drwxr-xr-x, d ile başlayan bir değer yerine 755 olur.

Bundan sonra gelen dokuz karakter üçerli üç gruptur ve sıraları asla değişmez.

  • 2 ila 4. karakterler sahip üçlüsüdür; dosyanın sahibine uygulanan bitlerdir.
  • 5 ila 7. karakterler grup üçlüsüdür; dosyanın grubuna uygulanan bitlerdir.
  • 8 ila 10. karakterler diğerleri üçlüsüdür; diğer herkese uygulanan bitlerdir.

Bir üçlü içindeki yuvalar her zaman r, ardından w ve x şeklindedir; tire işareti ilgili bitin kapalı olduğu anlamına gelir. Harflerin konumu asla değişmez. r-x, yazma izni olmadan okuma iznidir. -w-, okuma izni olmadan yazma iznidir; bu yasal ancak nadir görülen bir durumdur.

Bu durumda drwxr-xr-x şu şekilde ayrılır: dizin için d, sahip için rwx, grup için r-x ve diğerleri için r-x.

Bazı sistemler on birinci bir karakter daha yazdırır. Sondaki bir nokta, drwxr-xr-x., dosyanın bir SELinux (security enhanced Linux) bağlamı taşıdığı anlamına gelir; Fedora ve Rocky gibi SELinux dağıtımları bunu varsayılan olarak yazdırır. Sondaki bir artı işareti, drwxr-xr-x+, dosyanın bu dokuz bitin ötesinde ek kurallar kümesi olan bir POSIX ACL (erişim denetim listesi) taşıdığı anlamına gelir. Bu ek kuralları getfacl <path> ile okuyabilirsiniz.

r, w ve x izinleri bir dizin üzerinde farklı işlevlere sahiptir

Yeni başlayanların en sık yaptığı hata budur. Harfler hem dosya hem de dizin için aynıdır. Ancak sağladıkları yetkiler farklıdır.

  • Bir dosya üzerindeki r içeriği okumayı sağlar. Bir dizin üzerindeki r ise içindeki dosya isimlerini listeler; bu da düz ls komutunun ihtiyaç duyduğu şeydir.
  • Bir dosya üzerindeki w içeriği değiştirir. Bir dizin üzerindeki w ise dizin içindeki girdileri eklemeyi veya silmeyi sağlar. Bir dosyayı silmek dizin üzerinde yapılan bir değişikliktir; bu nedenle silme yetkisi dizin üzerindeki yazma iznine bağlıdır, dosyanın kendi izinlerinin bu konuda bir etkisi yoktur.
  • Bir dosya üzerindeki x onu bir program olarak çalıştırır. Bir dizin üzerindeki x ise dizin içinde gezinmeyi (traverse) sağlar; bu, çekirdeğin bir yol çözümlemesi sırasında dizin içindeki bir ismi çözümleyebileceği anlamına gelir.

Gezinme (traverse) yetkisi insanları şaşırtan kısımdır. Bir dizin üzerindeki x hiçbir şeyi çalıştırmaz. /srv/site/index.html dosyasını açmak için sırasıyla / üzerinde x, /srv üzerinde x, /srv/site üzerinde x ve son olarak dosyanın kendisi üzerinde r izni gerekir. Eğer bu zincirdeki bir dizin sizin için x iznine sahip değilse, yol çözümlemesi orada durur ve dosyanın kendisi herkes tarafından okunabilir olsa bile çağrıyı yapan kişiye Permission denied hatası döndürülür. namei -l /srv/site/index.html komutu, zincirdeki her adımı izinleri ve sahibiyle birlikte yazdırır; böylece hangi halkanın erişimi engellediğini görebilirsiniz.

r iznine sahip ancak x izni olmayan bir dizin, tanınması gereken tuhaf bir ara durumdur. Normal bir kullanıcı isimleri listeleyebilir, çünkü listeleme yetkisi r ile verilir; ancak hiçbir girdinin durumunu (stat) sorgulayamaz. Bu nedenle ls -l komutu boyut ve izin sütunlarını soru işaretleri ile doldurur ve her biri için ls: cannot access ...: Permission denied çıktısını verir.

İzinleri 755 biçimine dönüştürme

Her üçlü, üç bitlik bir sayıdır. r 4, w 2, x 1 değerindedir. Aktif olan bitleri toplayın.

  • rwx 4 + 2 + 1 = 7 eder
  • rw- 4 + 2 = 6 eder
  • r-x 4 + 1 = 5 eder
  • r-- 4 eder
  • --- 0 eder

Bu durumda drwxr-xr-x sahibi için 7, grup için 5 ve diğerleri için 5 değerindedir: 755. -rw-r--r-- 6, 4, 4 değerindedir: 644. drwxrwxr-x 7, 7, 5 değerindedir: 775; bu, 755'in grup için yazma izni eklenmiş halidir. Karakterleri elle saymanıza gerek yoktur, çünkü stat her iki biçimi de aynı anda görüntüler.

stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt

%A harf biçimini, %a sekizlik (octal) biçimi, %U ve %G ise dosya sahibini ve grubunu belirtir.

İnsanların aradığı izin dizgeleri

Bunlar, gerçek bir sunucuda karşılaştığınız, sekizlik değerleri ve nerede kullanıldıklarıyla birlikte izin modlarıdır.

  • -rw-r--r-- değeri 644'tür. Bir servisin yalnızca okuduğu, yapılandırma dosyası veya HTML sayfası gibi sıradan dosyalar.
  • -rw------- değeri 600'dür. Gizli veriler: bir SSH özel anahtarı veya bir uygulamanın .env dosyası.
  • -rw-rw-r-- değeri 664'tür. Ekip üyelerinin yazma erişimine ihtiyaç duyduğu, bir grup tarafından paylaşılan dizindeki dosyalar.
  • -rwxr-xr-x değeri 755'tir. /usr/local/bin/backup.sh ve /usr/bin dizinlerinin çoğu gibi betikler ve ikili dosyalar.
  • -rwx------ değeri 700'dür. Yalnızca sahibinin çalıştırabileceği özel bir betik.
  • drwxr-xr-x değeri 755'tir. Neredeyse tüm sistem dizinleri ve bir web sitesinin belge kök dizini.
  • drwx------ değeri 700'dür. ~/.ssh ve kısıtlanmış bir sunucudaki ev dizinleri.
  • drwxrwxr-x değeri 775'tir. Sahibinin grubunun yazabileceği bir dizin.
  • drwxrwsr-x değeri 2775'tir. Aynı dizin, artı setgid biti; böylece içeride oluşturulan yeni dosyalar dizinin grubunu devralır.
  • drwxrwxrwt değeri 1777'dir. /tmp. Sondaki t sticky bit'tir; bu sayede bir kullanıcı yalnızca kendi dosyalarını silebilir.
  • -rwsr-xr-x değeri 4755'tir. /usr/bin/passwd ve /usr/bin/sudo gibi, sahibi yetkileriyle çalışan bir setuid ikili dosyası.
  • -rw-rw-rw- değeri 666, drwxrwxrwx değeri ise 777'dir. Herkese yazma izni verir; sunucu ortamında bu neredeyse her zaman bir hatadır.
  • lrwxrwxrwx değeri, her sembolik bağın gösterdiği değerdir. Linux, bir bağ üzerindeki mod bitlerini görmezden gelir ve hedefi denetler; bu nedenle bu dizge hiçbir anlam taşımaz.

Hangi üçlü sizin için geçerli

Yeni başlayanların yanlış anladığı ikinci kural şudur: Çekirdek tam olarak bir üçlü seçer ve orada durur.

Kullanıcı kimliğiniz dosyanın sahibiyle eşleşirse, sahip üçlüsünü alırsınız; grup ve diğer bitlerine asla bakılmaz. Aksi takdirde, dosyanın grubu sizin gruplarınızdan biriyse, grup üçlüsünü alırsınız. Bu da değilse, diğer üçlüsünü alırsınız.

Buradan iki sonuç çıkar. Sahip üçlüsü, en kısıtlayıcı olduğu durumlarda bile geçerlidir. -r--rw-rw- olarak yazdırılan 0466 moduna sahip bir dosya, sahibine yalnızca okuma izni verirken diğer herkesin yazmasına izin verir; çünkü sahip kontrolü ilk sırada eşleşmiştir ve sonrasındaki hiçbir şey okunmamıştır. Bu yasal bir durumdur ve ilk kez karşılaşıldığında herkesin kafasını karıştırır.

Grup üçlüsü, sizin üyesi olduğunuz gruplar listesine göre değil, dosyanın grubu tarafından seçilir. ls -l her satırda iki isim yazdırır: önce sahip, sonra grup. Dosya üzerinde yalnızca o ikinci grubun söz hakkı vardır. Yirmi gruba üye olmanız, yalnızca dosya bu gruplardan birine ait olduğunda işinize yarar.

id
stat -c '%U %G %A %n' ~/permdemo/inner/notes.txt

id kullanıcınızı ve dahil olduğunuz tüm grupları yazdırır. stat dosyanın sahibini ve grubunu yazdırır. İkisini karşılaştırdığınızda, çekirdeğin sizin için hangi üçlüyü kullanacağını anlarsınız.

Paylaşımlı bir dizinin genellikle bir grup ve setgid biti almasının nedeni budur. sudo chmod 2775 /srv/shared, drwxrwsr-x olarak yazdırılır ve içinde oluşturulan dosyalar, oluşturucunun kişisel grubu yerine dizinin grubunu devralır; yeni alt dizinler de setgid bitini alır. Setgid modu değil, grubu ayarlar. Varsayılan 022 umask değeri ile içeride oluşturulan yeni bir dosya yine 644 modunda çıkar; bu nedenle ekip arkadaşları dosyayı okuyabilir ancak yazamaz. Grup yazma izni için orada çalışan herkesin 002 umask değerine sahip olması veya dizin üzerinde, içeride oluşturulan dosyalar için umask değerinin yerini alan varsayılan bir ACL tanımlanması gerekir. Her servise kendi hesabını vermek bu hikayenin diğer yarısıdır ve bu konu VPS üzerinde servis başına bir Linux kullanıcısı başlığında ele alınmıştır.

umask her yeni dosyanın modunu belirler

Yeni bir dosya, modunu sizden almaz. Dosyayı oluşturan programdan alır ve bu değerden umask tarafından temizlenen bitler çıkarılır. umask, kaldırılacak bitlerin bir maskesidir; dolayısıyla daha büyük bir umask değeri, daha gizli dosyalar oluşturulmasını sağlar.

Çoğu dağıtım 022 değeriyle gelir. Normal bir dosya oluşturan program genellikle 0666 ister. Dizin oluşturan bir program ise genellikle 0777 ister. umask, her iki talepten de 022 değerini temizler; böylece dosyalarda 644, dizinlerde ise 755 izinlerini alırsınız. Bu, yeni bir VPS üzerinde her yerde gördüğünüz ikilinin aynısıdır.

umask
umask -S
touch ~/permdemo/new.txt && mkdir -p ~/permdemo/newdir
ls -ld ~/permdemo/new.txt ~/permdemo/newdir

umask -S, 0022 komutuna göre okunması daha kolay olan harf tabanlı değerleri yazdırır. Daha katı bir varsayılan için ~/.profile içerisinde umask 027 değerini ayarlayın: dosyalarda 640, dizinlerde 750. Böylece grubunuz çalışmalarınızı okuyabilir ancak başkaları erişemez. Bu sonuçlar, standart 0666 ve 0777 taleplerini varsayar.

İki sınır önemlidir. umask yalnızca bitleri temizleyebilir, asla ekleyemez. touch komutunun talep ettiği 0666 izinli bir dosya, siz ne ayarlarsanız ayarlayın asla çalıştırılabilir olmaz. Sadece sahip erişimi isteyen bir program ise bu kısıtlamayı korur: mktemp, 022 veya 027 umask değerleri altında dosyaları 600, dizinleri ise 700 izinleriyle oluşturur. Ayrıca bir systemd servisi shell profilinizi okumaz; bu nedenle değeri doğrudan unit dosyası içerisinde ayarlayın.

[Service]
UMask=0027

Bir durum umask değerini tamamen atlar. Üst dizinin varsayılan bir ACL değeri varsa umask göz ardı edilir ve yeni dosyanın izin bitleri bunun yerine devralınan ACL'den gelir.

Web dosyaları neden 644, web dizinleri neden 755 izinlerine sahiptir

Bir web sunucusu kendi kullanıcı hesabı altında çalışır; bu hesap Debian ve Ubuntu üzerinde www-data, Rocky ve Alma üzerinde ise nginx olarak adlandırılır. Bu süreç, sunduğu dosyaları okumaya ve üzerlerindeki dizinleri geçmeye (traverse) ihtiyaç duyar. Dosyaları yazması için bir neden yoktur ve statik bir site buna asla izin vermemelidir.

Bir dosyadaki 644 izni, dosya sahibine yazma, herkese ise okuma yetkisi verir; böylece dağıtım kullanıcısı yayın yapabilir ve web kullanıcısı dosyaları sunabilir. Bir dizindeki 755 izni, dizin sahibine yazma, herkese ise dizin içine girme (traverse) yetkisi verir; böylece web kullanıcısı, herhangi bir dosya ekleyemeden veya silemeden dizin yolunu takip edebilir. Bu sayede uygulamadaki bir hata, sunulan sayfaların üzerine yazılamamasını sağlar.

Dizin geçiş kuralı tam bu noktada devreye girer. Eğer site /home/deploy/site altında barındırılıyorsa, /home/deploy dizininin izinleri 750 ise ve web kullanıcısı bu dizinin grubuna dahil değilse, web kullanıcısı ana dizine hiçbir şekilde giremez ve istek, /var/log/nginx/error.log içinde şuna benzer bir satırla HTTP 403 hatasıyla sonuçlanır:

open() "/home/deploy/site/index.html" failed (13: Permission denied), client: 203.0.113.5

Buradaki 13 değeri, çekirdeğin izin reddini belirten EACCES hatasıdır. Ağ ile ilgili bir sorun yoktur: port dinlenmektedir ve istek ulaşmıştır; bu durum Linux üzerinde dinleme portlarının nasıl çalıştığı konusunu öğrenirken kafa karıştırıcı olabilir. namei -l /home/deploy/site/index.html komutunu çalıştırın ve diğer kullanıcılar (other) için x iznine sahip olmayan ilk dizini bulana kadar dizin zincirini inceleyin.

Uygulamanın veri yazdığı, örneğin yükleme dizini gibi bir dizin bu kuralın istisnasıdır. Bu dizine daha geniş bir izin modu vermek yerine sahiplik (ownership) üzerinden yetki verin: sudo chown -R www-data:www-data /srv/site/uploads komutunu kullanın ve modu 755 olarak bırakın. Yazma erişimini yalnızca ihtiyaç duyan tek bir dizinle sınırlı tutun.

chmod, tüm dizin ağacını bozmadan kullanma

chmod her iki biçimi de destekler. Sekizlik (octal) gösterim dokuz bitin tamamını aynı anda ayarlar: chmod 644 notes.txt. Sembolik gösterim ise yalnızca belirttiğiniz kısımları değiştirir ve geri kalanına dokunmaz: chmod u+x deploy.sh sahibi için çalıştırma izni ekler, chmod go-w notes.txt ise grup ve diğerleri için yazma iznini kaldırır.

Özyinelemeli (recursive) işlemler, dizin ağaçlarının zarar görmesine neden olabilir. chmod -R 755 . komutu, her görseli ve her yapılandırma dosyasını çalıştırılabilir hale getirir; çünkü chmod bir betik ile bir JPEG dosyasını birbirinden ayırt edemez. Bunun yerine büyük harfli X parametresini kullanın.

chmod -R u=rwX,go=rX ~/permdemo
stat -c '%a %n' ~/permdemo ~/permdemo/inner/notes.txt

Büyük harfli X parametresi, çalıştırma iznini dizinlere ve halihazırda herhangi bir yerinde çalıştırma biti bulunan dosyalara uygular. Dizinler 755, normal dosyalar 644 izinlerine sahip olur; halihazırda çalıştırılabilir olan betikler ise bu özelliklerini korur. Güvendiğiniz bir dosyanın izinlerini başka bir dosyaya uygulamak istediğinizde, chmod --reference=good.sh other.sh komutu bu izinleri kopyalar.

Bir bit hatalı olduğunda görülen mesajlar

bash: ./deploy.sh: Permission denied, betiğin size uygulanan üçlüde x bitine sahip olmadığını veya yol üzerindeki bir dizinin x iznine sahip olmadığını belirtir. chmod u+x deploy.sh, ilk durumu düzeltir.

bash: ./deploy.sh: cannot execute: required file not found, kafa karıştırıcı bir isme sahip farklı bir hatadır. x biti doğrudur ancak ilk satırda belirtilen yorumlayıcı eksiktir. Yaygın neden Windows satır sonlarıdır; bu durumda çekirdek, /bin/bash\r adında bir yorumlayıcı arar. Bunu sed -i 's/\r$//' deploy.sh ile onarın.

Permissions 0644 for '/home/deploy/.ssh/id_ed25519' are too open., diğer hesapların okuyabildiği bir özel anahtarı kullanmayı reddeden SSH istemcisinden kaynaklanır. Anahtar 600, ~/.ssh ise 700 iznine sahip olmalıdır. Anahtar yönetimi ile ilgili tüm detaylar SSH anahtarlarını ve dosya izinlerini yönetme bölümündedir.

Authentication refused: bad ownership or modes for directory /home/deploy/.ssh, bir ev dizini veya onun .ssh dizini grup tarafından yazılabilir olduğunda sunucunun günlük kayıtlarında görünür. sshd StrictModes ayarı anahtarı reddeder; bu durum istemci tarafında açıklamasız ve beklenmedik bir parola istemi olarak yansır.

sudo: no valid sudoers sources found, quitting ile takip edilen sudo: /etc/sudoers is world writable, sudo'nun kendi yapılandırma dosyasının modunu kontrol ettiği ve çalışmayı reddettiği anlamına gelir. Bu dosya 0440 iznine sahip olmalı ve asla herkes tarafından yazılabilir olmamalıdır. Bu, geniş kapsamlı ve özyinelemeli bir chmod işleminin klasik sonucudur ve yukarıdaki sshd mesajıyla birlikte ortaya çıkabilir; bu durumda sunucuya tekrar erişmenin tek yolu sağlayıcının konsoludur.

Neden 777 bir çözüm değildir

777 izni, makinedeki her hesaba ve bu hesaplar altında çalışan her sürece yazma erişimi sağlar. Bir sunucu, servisleri kendi kullanıcıları altında çalıştırır; bu nedenle "herkes" ifadesi, bir VPS üzerinde dizüstü bilgisayara kıyasla çok daha geniş bir kapsamı ifade eder. Güvenliği ihlal edilen bir servis, 777 izninin bulunduğu her yere yazabilir.

Web kök dizininde bu durumun zararı doğrudan gerçekleşir. Sunucunun da servis ettiği, herkesin yazabildiği bir dizin, bir dosya yükleme açığının bir betik yerleştirmek ve ardından bu betiği tekrar çağırmak için kullanılmasına olanak tanır.

777, sahiplik sorunu için neredeyse her zaman yanlış cevaptır. Belirti "uygulama bu dizine yazamıyor" şeklindedir. Bunun nedeni, dizinin yanlış kullanıcıya ait olmasıdır. 755 modu ile sudo chown -R appuser:appuser /srv/app/storage kullanmak sorunu çözer: uygulama dizine yazabilir, diğer tüm hesaplar dizini listeleyip içine girebilir ancak dizin içine yazamaz. Uygulama dağıtılmadan önce bu hesapların oluşturulması, yeni bir VPS üzerindeki ilk on dakika sürecinin bir parçasıdır.

Herkesin yazma iznine sahip olması durumu, tek bir tanıdık yerde meşrudur: /tmp ve bu durum drwxrwxrwt olarak ifade edilir. Sondaki t, sticky bit (yapışkan bit) özelliğidir: dizin herkes tarafından yazılabilir durumdadır ancak bir kullanıcı yalnızca kendi sahip olduğu dosyaları silebilir. Bu bit olmadan, herhangi bir hesap başka bir hesabın geçici dosyalarını silebilir.

Bir modu değiştirmeden önce okuyun

Bu komutlar yalnızca durumu okur, bu nedenle her yerde güvenle çalıştırılabilirler.

id
umask
stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt
namei -l ~/permdemo/inner/notes.txt
find ~/permdemo -perm -0002

find <path> -perm -0002, dünya tarafından yazılabilir biti ayarlanmış bir yol altındaki her şeyi listeler; bu, birisi chmod 777 ile onarım yaptıktan sonra bir sunucuyu denetlemenin en hızlı yoludur.

Belirli bir servis hesabının bir dizine girip giremeyeceğini sorgulamak için, o hesap olarak sorgulama yapın. sudo -u www-data test -x /srv/site && echo yes || echo no, kullanıcı dizin üzerinde geçiş (traverse) yetkisine sahip olduğunda yes, sahip olmadığında ise no çıktısını verir. root olarak sorgulama yapmak hiçbir şeyi kanıtlamaz, çünkü root denetimi atlar ve cevap her zaman yes olur.

FAQ

Linux'ta drwxr-xr-x ne anlama gelir?

Bu, en baştaki d karakteriyle gösterilen bir dizindir ve 755 modundadır. Sahip üçlüsü rwx şeklindedir, yani dosya sahibi dizin üzerinde tüm yetkilere sahiptir. Grup üçlüsü r-x ve diğerleri üçlüsü r-x şeklindedir; bu sayede diğer tüm kullanıcılar dizin içeriğini listeleyebilir ve dizin içine girebilir, ancak dosya sahibi dışında hiç kimse dizine yeni bir öğe ekleyemez veya mevcut olanı silemez. Herhangi bir yolu stat -c '%A %a %U %G %n' <path> ile doğrulayabilirsiniz; bu komut hem harf hem de sekizlik (octal) biçimindeki izinleri yan yana yazdırır.

Web dosyaları neden 644, web dizinleri neden 755 olmalıdır?

Web sunucusu, Ubuntu üzerinde www-data gibi farklı bir kullanıcı hesabı altında çalışır. Sunulan dosyalar üzerinde okuma, dosyaların bulunduğu dizinler üzerinde ise geçiş (traverse) yetkisine ihtiyaç duyar; hiçbirinde yazma yetkisine sahip olması gerekmez. 644 modu, dosya sahibine yazma yetkisi verirken diğerlerine yalnızca okuma yetkisi tanır. 755 modu ise dosya sahibine yazma, diğerlerine ise dizin içinde geçiş yapma yetkisi verir. Uygulamanın gerçekten yazması gereken bir dizin varsa, izinleri herkes için genişletmek yerine chown komutuyla dizin sahipliği ilgili uygulama kullanıcısına devredilmelidir.

x biti bir dizini çalıştırabileceğim anlamına mı gelir?

Hayır. Bir dizin üzerinde x, geçiş yetkisi anlamına gelir; bu, çekirdek bir dosya yolunu izlerken dizin içindeki bir ismi çözümleme hakkıdır. cd komutu ve altındaki herhangi bir dosyayı açma işlemi bu yetkiye ihtiyaç duyar. Yol üzerindeki her dizinin x yetkisine sahip olması gerekir; bu nedenle, üst dizinlerden birinde x yetkiniz yoksa, 644 modundaki bir dosyaya erişemezsiniz. namei -l /path/to/file komutu, zincirdeki her dizinin modunu yazdırarak aramanın nerede durduğunu gösterir.

chmod 777 hiçbir zaman doğru çözüm müdür?

Sunucularda neredeyse hiçbir zaman doğru çözüm değildir. Bu komut, makinedeki tüm hesaplara (servislerin çalıştığı hesaplar dahil) yazma yetkisi verir; bu da güvenliği ihlal edilmiş bir servisin dosyayı yeniden yazabileceği anlamına gelir. Bir uygulama bir dizine yazamadığında, asıl sorun genellikle sahiplikle ilgilidir: 755 modundaki bir dizinin sudo chown -R appuser:appuser /srv/app/storage ile ilgili uygulamaya devredilmesi, uygulamaya yazma erişimi sağlarken diğer hesapların dizini okumaya devam etmesine ancak yazamamasına olanak tanır. Bilinen tek istisna 1777 modundaki /tmp dizinidir; bu dizin yalnızca sticky bit sayesinde kullanıcıların birbirlerinin dosyalarını silmesini engellediği için güvenli çalışır.

ls komutu izinlerden sonra neden nokta veya artı işareti yazdırır?

On birinci karakter, dokuz izin bitinin ötesindeki kuralları tanımlar. drwxr-xr-x. örneğindeki gibi bir nokta, Fedora ve Rocky sistemlerinde normal olan bir SELinux güvenlik bağlamının (context) eklendiğini gösterir. drwxr-xr-x+ örneğindeki gibi bir artı işareti ise bir POSIX ACL (erişim kontrol listesi) tanımlandığını belirtir; bu durumda bazı kullanıcılar veya gruplar, üçlü izin gruplarının göstermediği ek haklara sahiptir. Bu ek girdileri listelemek için getfacl <path> komutunu çalıştırın.

#permissions#ls#chmod#linux-basics#octal