Hangi izinlerin kullanılacağına karar verirken, kullanıcılarınızın tam olarak kim olduğunu ve neye ihtiyaçları olduğunu bilmeniz gerekir. Bir web sunucusu iki tip kullanıcı ile etkileşime girer.
Kimliği doğrulanmış kullanıcılar sunucuda bir kullanıcı hesabına sahiptir ve belirli ayrıcalıklarla sağlanabilir. Bu genellikle sistem yöneticilerini, geliştiricilerini ve servis hesaplarını içerir. Genellikle SSH veya SFTP kullanarak sistemde değişiklikler yaparlar.
Anonim kullanıcılar web sitenize gelen ziyaretçilerdir. Dosyalara doğrudan erişim iznine sahip olmasalar da, bir web sayfası talep edebilirler ve web sunucusu kendi adına hareket eder. Anonim kullanıcıların erişimini, web sunucusu işleminin hangi izinlere sahip olduğuna dikkat ederek sınırlayabilirsiniz. Birçok Linux dağıtımında, Apache www-data
kullanıcı olarak çalışır ancak farklı olabilir. Apache'nin sisteminizde hangi kullanıcıyı kullandığını görmek için ps aux | grep httpd
veya ps aux | grep apache
düğmesini kullanın .
Linux izinleriyle ilgili notlar
Linux ve diğer POSIX uyumlu sistemler geleneksel unix izinlerini kullanır. Wikipedia'da Dosya Sistemi izinleri hakkında mükemmel bir makale var, bu yüzden burada her şeyi tekrarlamayacağım. Ama bilmen gereken birkaç şey var.
Execute bit
Interpreted scriptleri (örn. Ruby, PHP), çalıştırma izni olmadan gayet iyi çalışır. Yalnızca ikili dosyalar ve kabuk komut dosyaları yürütme bitine ihtiyaç duyar. Bir dizini geçmek (girmek) için, bu dizinde yürütme iznine sahip olmanız gerekir. Web sunucusu bir dizini listelemek veya içindeki herhangi bir dosyayı sunmak için bu izne ihtiyaç duyar.
Varsayılan yeni dosya izinleri
Bir dosya oluşturulduğunda, normalde onu oluşturanın grup kimliğini miras alır. Ancak bazen yeni dosyaların oluşturuldukları klasörün grup kimliğini miras almasını istersiniz, böylece SGID bitini üst klasörde etkinleştirirsiniz.
Varsayılan izin değerleri umask'ınıza bağlıdır. Umask, yeni oluşturulan dosyalardan izinleri çıkarır; bu nedenle, 022'nin ortak değeri, 755 ile oluşturulan dosyaların oluşturulmasına neden olur. Bir grupla işbirliği yaparken, oluşturduğunuz dosyaların grup üyeleri tarafından değiştirilebilmesi için umask'ınızı 002 olarak değiştirmek yararlı olur. Yüklenen dosyaların izinlerini özelleştirmek istiyorsanız, ya apache için umask değerini değiştirmeli ya da dosya yüklendikten sonra chmod çalıştırmalısınız.
777 ile sorun
Ne zaman chmod 777
web sitesi, bunun için hiçbir güvenlik var. Sistemdeki herhangi bir kullanıcı web sitenizdeki herhangi bir dosyayı değiştirebilir veya silebilir. Ancak daha da ciddiyetle, web sunucusunun web sitenizi ziyaret edenler adına hareket ettiğini ve şimdi web sunucusunun yürüttüğü dosyaları değiştirebildiğini unutmayın. Web sitenizde herhangi bir programlama açıklığı varsa, web sitenizi tahrif etmek, kimlik avı saldırıları eklemek veya sunucunuzdaki bilgileri siz bilmeden çalmak için kullanılabilir.
Ayrıca, sunucunuz iyi bilinen bir bağlantı noktasında çalışıyorsa (bu, kök olmayan kullanıcıların dünyaca erişilebilen dinleme hizmetlerinin çoğalmasını engellemesi gerekir), bu, sunucunuzun kök tarafından başlatılması gerektiği anlamına gelir (her ne zaman akıllıca bir sunucu hemen düşecekse de liman bağlandıktan sonra daha az ayrıcalıklı bir hesaba). Başka bir deyişle, ana uygulamanın sürüm kontrolünün bir parçası olduğu bir web sunucusu çalıştırıyorsanız (örn. Bir CGI uygulaması), izinlerini (veya bu konuda, kullanıcı yeniden adlandırabileceğinden, içerdiği dizinin izinlerini) bırakarak 777 de çalıştırılabilir) sağlar herhangi bir kullanıcının çalışmasına herhangi bir kök olarak yürütülebilir.
Gereksinimleri tanımla
- Geliştiricilerin web sitesine güncelleme yapabilmeleri için dosyalara okuma / yazma erişimi gerekir
- Geliştiricilerin dizinlerde okuma / yazma / yürütme ihtiyacı vardır, böylece dolaşabilirler
- Apache'nin dosyalara ve yorumlanmış komut dosyalarına okuma erişimi ihtiyacı var
- Apache'nin erişilebilir dizinlere okuma / yürütme erişimi gerekiyor
- Apache'nin yüklenen içerik için dizinlere okuma / yazma / yürütme erişimi gerekiyor
Tek bir kullanıcı tarafından tutulur
Sitenin korunmasından yalnızca bir kullanıcı sorumluysa, bunları web sitesi dizininde kullanıcı sahibi olarak ayarlayın ve kullanıcıya tam rwx izinleri verin. Apache'nin dosyalara hizmet edebilmesi için hala erişime ihtiyacı vardır, bu nedenle www-verilerini grup sahibi olarak ayarlayın ve gruba rx izinleri verin.
Sizin durumunuzda, kullanıcı adı olabilecek Havva, aşağıdakileri eve
koruyan kullanıcıdır contoso.com
:
chown -R eve contoso.com/
chgrp -R www-data contoso.com/
chmod -R 750 contoso.com/
chmod g+s contoso.com/
ls -l
drwxr-s--- 2 eve www-data 4096 Feb 5 22:52 contoso.com
Apache tarafından yazılabilmesi gereken klasörleriniz varsa, grup sahibinin izin değerlerini yalnızca www-data'nın yazma erişimine izin verecek şekilde değiştirebilirsiniz.
chmod g+w uploads
ls -l
drwxrws--- 2 eve www-data 4096 Feb 5 22:52 uploads
Bu konfigürasyonun avantajı, sistemdeki diğer kullanıcıların gizlice dolaşması daha zor (ama imkansız değil *) çünkü sadece kullanıcı ve grup sahipleri web sitesi dizinine göz atabilir. Bu, yapılandırma dosyalarınızda gizli verileriniz varsa kullanışlıdır. Umask'ına dikkat et! Burada yeni bir dosya oluşturursanız, izin değerleri muhtemelen varsayılan olarak 755'tir umask 027
. Yeni dosyaların varsayılan olarak 640 ( rw- r-- ---
) olmasını sağlayabilirsiniz .
Bir grup kullanıcı tarafından korunur
Siteyi korumaktan birden fazla kullanıcı sorumluysa, izinleri atamak için kullanmak için bir grup oluşturmanız gerekir. Her web sitesi için ayrı bir grup oluşturmak ve bu web sitesinden sonra gruba isim vermek iyi bir uygulamadır.
groupadd dev-fabrikam
usermod -a -G dev-fabrikam alice
usermod -a -G dev-fabrikam bob
Önceki örnekte, grup sahibini Apache'ye ayrıcalıklar vermek için kullandık, ancak şimdi geliştiriciler grubu için kullanılıyor. Kullanıcı sahibi artık bizim için yararlı olmadığından, ayrıcalıkların sızdırılmamasını sağlamanın basit bir yoludur. Apache'nin hala erişime ihtiyacı var, bu yüzden dünyanın geri kalanına okuma erişimi sağlıyoruz.
chown -R root fabrikam.com
chgrp -R dev-fabrikam fabrikam.com
chmod -R 775 fabrikam.com
chmod g+s fabrikam.com
ls -l
drwxrwxr-x 2 root dev-fabrikam 4096 Feb 5 22:52 fabrikam.com
Apache tarafından yazılabilir olması gereken klasörleriniz varsa, Apache'yi kullanıcı sahibi veya grup sahibi olarak yapabilirsiniz. Her iki durumda da ihtiyacı olan tüm erişime sahip olacak. Şahsen, geliştiricilerin hala yükleme klasörlerinin içeriğine göz atıp değiştirebilmesi için kullanıcı sahibi yapmayı tercih ediyorum.
chown -R www-data uploads
ls -l
drwxrwxr-x 2 www-data dev-fabrikam 4096 Feb 5 22:52 uploads
Bu ortak bir yaklaşım olmasına rağmen, bir dezavantajı var. Sistemdeki diğer her kullanıcı web sitenizde Apache ile aynı ayrıcalıklara sahip olduğundan, diğer kullanıcıların sitenize göz atması ve yapılandırma dosyalarınız gibi gizli veriler içerebilecek dosyaları okuması kolaydır.
Pastanı alabilir ve yiyebilirsin de
Bu daha sonra geliştirilebilir. Sahibin gruptan daha az ayrıcalığa sahip olması tamamen yasaldır, bu nedenle kullanıcı sahibini root olarak atamakla israf etmek yerine, Apache'yi web sitenizdeki dizinlerde ve dosyalarda kullanıcı sahibi yapabiliriz. Bu, tek bir koruyucu senaryoyu tersine çevirir, ancak eşit derecede iyi çalışır.
chown -R www-data fabrikam.com
chgrp -R dev-fabrikam fabrikam.com
chmod -R 570 fabrikam.com
chmod g+s fabrikam.com
ls -l
dr-xrwx--- 2 www-data dev-fabrikam 4096 Feb 5 22:52 fabrikam.com
Apache tarafından yazılabilmesi gereken klasörleriniz varsa, kullanıcı sahibinin izin değerlerini yalnızca www-data'nın yazma erişimine izin verecek şekilde değiştirebilirsiniz.
chmod u+w uploads
ls -l
drwxrwx--- 2 www-data dev-fabrikam 4096 Feb 5 22:52 fabrikam.com
Bu çözümle ilgili dikkat edilmesi gereken noktalardan biri, yeni dosyaların kullanıcı sahibinin, www-data olarak ayarlanmak yerine içerik oluşturucuyla eşleşmesidir. Bu nedenle, oluşturduğunuz herhangi bir yeni dosya, siz onu yiyene kadar Apache tarafından okunamaz.
* Apache ayrıcalık ayrımı
Daha önce, hangi tür ayrıcalıklara sahip olursanız olun, diğer kullanıcıların web sitenizi gizlemelerinin mümkün olduğunu belirttim. Varsayılan olarak, tüm Apache işlemleri aynı www-data kullanıcısı olarak çalışır, böylece herhangi bir Apache işlemi aynı sunucuda yapılandırılmış diğer tüm web sitelerinden dosyaları okuyabilir ve hatta bazen değişiklikler yapabilir. Apache'nin bir betiği çalıştırmasını sağlayabilen herhangi bir kullanıcı, Apache'nin sahip olduğu erişime sahip olabilir.
Bu sorunla mücadele etmek için , Apache'de ayrıcalık ayrımı için çeşitli yaklaşımlar vardır . Ancak, her yaklaşım çeşitli performans ve güvenlik sakıncaları ile birlikte gelir. Kanımca, daha yüksek güvenlik gereksinimleri olan herhangi bir sitenin, VirtualHosts'u paylaşılan bir sunucuda kullanmak yerine özel bir sunucuda çalıştırılması gerekir.
Ek hususlar
Daha önce bahsetmedim, ancak geliştiricilerin doğrudan web sitesini düzenlemesi kötü bir uygulamadır. Daha büyük siteler için, web sunucusunu sürüm kontrol sisteminin içeriğinden güncelleyen bir tür yayınlama sisteminden daha iyisin. Tek bakımcı yaklaşımı muhtemelen idealdir, ancak bir kişi yerine otomatik yazılım kullanıyorsunuz.
Web sitenizin dağıtılması gerekmeyen yüklemelere izin veriyorsa, bu yüklemeler web kökünün dışında bir yerde saklanmalıdır. Aksi takdirde, kişilerin gizli olması amaçlanan dosyaları indirdiğini görebilirsiniz. Örneğin, öğrencilerin ödev göndermesine izin verirseniz, Apache tarafından sunulmayan bir dizine kaydedilmeleri gerekir. Bu ayrıca sır içeren yapılandırma dosyaları için iyi bir yaklaşımdır.
Daha karmaşık gereksinimleri olan bir web sitesi için Erişim Kontrol Listeleri'nin kullanımını incelemek isteyebilirsiniz . Bunlar ayrıcalıkların çok daha karmaşık kontrolünü sağlar.
Web sitenizin karmaşık gereksinimleri varsa, tüm izinleri ayarlayan bir komut dosyası yazmak isteyebilirsiniz. İyice test edin, sonra güvende tutun. Herhangi bir nedenden ötürü web sitenizi yeniden inşa etmek için ihtiyaç duyduğunuzda, altın değerinde altın değerinde olabilir.