Bir 'web uygulamasının' bir sunucuda (apache, nginx, vb.) Çalıştığını ve bazı dinamik kodlama dillerinde (PHP, Ruby, vb.) Yazıldığı varsayılarak, 'kullanıcının' kim olduğu konusunda bir yanlış anlaşmanız vardır.
Kullanıcı, uygulamanızda oturum açmış olan kişi değildir; uygulamadaki rolleri (admin, vb.) Senaryo ile tamamen ilgisizdir. Kullanıcı, işlemin altında çalıştığı linux sistem kullanıcısıdır. Web sitenizin kodu yalnızca bir kullanıcı olarak çalıştırılır - web sunucunuzun kullanıcısı olabilir (bu gerçekten iyi bir şey değildir) veya sitenize özgü bir kullanıcı olabilir (ki bu çok daha iyidir).
Linux'ta kullanıcılar gruplara aittir - başka bir gruba kullanıcı ekleyebilir ve bu gruba ayrıcalıklar atayabiliriz.
İyi bir kurulum sunucunuzun bir kullanıcı olarak çalışmasına (bu kullanıcıya 'web sunucusu' diyelim) ve dinamik komut dosyası dilinizin (örn. FastCGI aracılığıyla) kendi kullanıcısı olarak (site başına bir kullanıcı - ilk kullanıcı 'site1' 'diyelim) .
Dosyalarınızı sunmak için web sunucusunun dosyalara erişmesi ve komut dosyası dilinin dosyalara erişmesi gerekir. Bu şu anlama gelir: 'site1' ve 'webserver' dosyalarınızı okuyabilmelidir. Ancak bunlardan sadece biri dosyalara 'sahip' olabilir. Sahibi 'kullanıcı'dır (kullanıcı, grup, diğer). Ayrıca dizine yazabilmek (ve yazdığı dosyaları okuyabilmek için) komut dosyası dilimize ihtiyacımız var. Bu nedenle 'site1' kullanıcısının okuma ve yazma izinlerine ihtiyacı vardır. Grup ve diğer izinlerin olabildiğince kısıtlayıcı olmasını istediğimizden, 'sahip'imiz' site1 'olacak ve ilgili kullanıcı izinleri okunacak ve yazılacaktır.
Web sunucumuzun izinlerini başka bir 'kullanıcı' olarak belirleyemediğimiz için, 'site1' grubuna 'webserver' ekleyeceğiz (elbette, hem 'site1' hem de 'webserver' ile farklı bir grup oluşturabilirsiniz. bu grubun üyelerine aynı izinler verilecektir İzinlerini belirlemek için herhangi bir kullanıcıya en gevşek izinler (kullanıcının, grubun, diğer kümenin) uygulanacaktır.
İyi bir kurulumun, dosyaların dinamik bir dil için yürütme izinlerine sahip olmasını gerektirmemesi gerektiğini belirtmek gerekir. Dosyalar doğrudan çalıştırılmaz, ancak bir yorumlayıcıya okunur - tipik bir komut dosyasını (hiçbir şey yazmayan) çalıştırmak için yalnızca okuma izinleri gerekir.
Dizinlerdeki 'yürütme' izninin farklı bir anlamı vardır - içeriği okuyamadan çapraz geçişe izin verir. Bir dizindeki bir dosyayı okuyabilmek için kullanıcının üstündeki HER dizinde 'yürütme' iznine sahip olması gerekir.
Bir web uygulaması için, her dosyanın sahibi tarafından okuma izinleri olmalıdır - aksi takdirde oldukça anlamsız bir dosyadır. Bir kullanıcı veya yöneticinin dosyaları (web uygulamanız üzerinden) yükleyip yüklemediği, 'sahip' (yani dinamik dil) yazma izinlerine ihtiyaç duyar. Etkili bir kurulum, statik dosyalar doğrudan web sunucusu üzerinden sunulmaya çalışacaktır, çünkü dinamik diller büyük dosyaları okumada ve içeriği yankılamada yavaştır. Bu nedenle web sunucusunun statik dosyalarınıza okuma erişimine ihtiyacı vardır.
Bu nedenle, en az dosya izinleri şunlar olabilir:
- Kullanıcının statik dosyaları (images / swf / js dosyaları) yüklediği bir dizinde bulunan bir dosya: 640
- Yöneticinin statik dosyaları (images / swf / js dosyaları) yüklediği bir dizindeki dosya: 640
- Uygulamada kullanılan kitaplıkların bulunduğu bir dizindeki dosya: 400 (veya 440)
- Yürütülebilir / göz atılabilir sunucu tarafı komut dosyalarının yer aldığı bir dizindeki dosya: 400 (veya 440)
- Zaten varolan dosyaların (txt veya xml) sunucu tarafındaki kodla düzenleneceği bir dosya: 640 veya 600
- (web sunucusunun bunları zaman zaman değiştirip değiştirmeyeceğine bağlıdır)
Ancak, en düşük dizin izinleri şunlar olabilir:
- Kullanıcının statik dosyaları (images / swf / js dosyaları) yüklediği bir dizin bulunur: 750
- Yöneticinin statik dosyaları (images / swf / js dosyaları) yüklediği bir dizin: 750
- Uygulamada kullanılan kitaplıkların bulunduğu bir dizin: 500 (veya 550) [en az 510 olmalıdır]
- Yürütülebilir / göz atılabilir sunucu tarafı komut dosyalarının yer aldığı bir dizin: 500 (veya 550) [en az 510 olmalıdır]
- Zaten varolan dosyaların (txt veya xml) sunucu tarafındaki kodla düzenleneceği dizin: 750 veya 700
- (web sunucusunun zaman zaman değiştirilmemiş, buradan dosya sunup sunmayacağına bağlıdır)
Bir kez daha - web sunucunuzun erişmesi gereken dizinin üzerindeki her dizinde 'yürütme' iznine sahip olmalıdır - bu nedenle web sunucusu belirli bir dizinden dosya sunmasa bile, yürütme izinleri vermeliyiz.
Web sunucusuna dosyaların çoğuna okuma erişimi vermek oldukça yaygındır (bu yüzden 500 ile 550 arasında değiştirin). Varsayılan 'biraz güvenli' izinler genellikle dizinler için 755 ve dosyalar için 644'tür - yürütme izni yoktur, herkes okuyabilir ve yalnızca kullanıcı yazabilir - bir linux sistemindeki dosyaların büyük çoğunluğunun bu izinlere sahip olduğunu fark edeceksiniz.
'Diğer' izinlerin sahibi veya grupta olmayan sistem kullanıcılarını (yani kalan tüm sistem kullanıcılarını) ifade ettiğini unutmayın. 'Diğer' izinlerinizi kısıtlayıcı tutmak iyidir, çünkü bu kullanıcılar bilinmemektedir - onlara açıkça izin vermediniz. Diğer izinler, güvenliği ihlal edilmiş bir sistemden yararlanmanın en kolay yoludur (örneğin / tmp'nin ortak bir hedef olmasının nedenlerinden biri).
Yukarıdakiler bağlamında, son iki sorunuzun bu kadar alakalı olduğunu düşünmüyorum. Dizin izinlerinizi 550 (ve dosya izinleri 440 olarak) olarak ayarlayın ve ardından uygulamanızın yazacağı dizinler için kullanıcıya yazma izinleri verin (örn. Dizin: 750; dosya: 640).
(Dosyaları yüklemek için yazma iznine ihtiyacınız olacaktır - ancak isterseniz bunları daha sonra kaldırabilirsiniz - tartışmalı olsa da, eğer birisi yalnızca sahibin yazabileceği - hesabınızın güvenliği ihlal edilmiş - bir dizine yazıyorsa kısıtlayıcı izinleri tutma nedenleri).