Asla ana dizininizden bir web sitesi çalıştırmak zorunda değilsiniz . HİÇ. Aksi takdirde, web sunucusuna,/home/
dizin yapısını görmek içinilerleyebilmenizgerekir, ancak aynı zamanda/home/$USER/
(kullanıcının dizininizde, başka bir alt klasörde ne olduğunu görmeye çalıştığımız kullanıcının giriş dizini) içine de girmeniz gerekir. Orada. Kötü yapılandırılmış veya yanlış yapılandırılmış veya yamalanmamış bir web sunucusu bu şekilde büyük miktarda veri sızıntısına veya kimlik bilgilerinin kaybolmasına neden olabilir ve kişisel verilerinizi ve oturum açma işlemlerinizi farklı şeylere riske sokar. Kullandığınız sembolik bağlantı yaklaşımı, Apache'ye okuma izni vermeye çalışırken aynı nedenden dolayı yardımcı olmuyor/home/andre/www/moodle
- web sunucusunun, bağlantı /var/www/html
noktasının işaret ettiği yere, bu güvenlik riskini teşkil ettiği yere ulaşmak için ana dizininizi geçebilmesi gerekir .
İlk olarak, kullanın sudo cp -r /home/andre/www/moodle/ /var/www/html/
. Bu, dosyalarınızı kopyalar /var/www/html
ve kendi ana dizininizden uzak tutar. Daha sonra izinleri yineleyeceğiz, böylece web sunucusu siz ve bu dizindeki her şeye erişebilir ve kullanıcınıza tüm dosyaları ve dizinleri tam olarak okuyabilir / yazabilir. O zaman, sadece /var/www/html
siteniz için çalışmak zorunda kalmayacaksınız .
Bu, verilerinizi geri kopyalamanızın ardından dört adımda geçerlidir /var/www/html
:
- Apache'ye klasörlere ve dosyalara erişim sağlayın, böylece siteye 403 hatasız hizmet verebilir.
- Kullanıcınıza 'sahibini' dosya ve klasörler üzerinden verin ve kendinize tüm dosya ve klasörleri okuma ve yazma, ayrıca dizinleri geçme yeteneği verin.
- (İsteğe bağlı, ancak önerilen) Dizin yapısının tamamında, buradan oluşturulan tüm dosya veya klasörlerin, olması gereken grubu olacak şekilde ayarlayın
www-data
.
- (İsteğe bağlı) Sizin ve web sunucusunun site verilerini görebilmesi için izinleri ayarladığımız son güvenlik temizliği, ancak diğer kullanıcılar sitenin dosyalarına veya dizin yapısına erişemiyor.
(1) Apache'nin klasörlere ve dosyalara erişmesine izin verin.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
Bu tekrarlı bir şekilde 'grubu' www-data
klasörler ve dosyalar için olacak şekilde ayarlar . Bu daha sonra web sunucusunun site doküman kök dizin yapısına tekrar bağlanma ve erişme izni verir ( +x
sadece dizinler için). Ayrıca web sunucusunun tüm dosyalar için okuma izinlerine sahip olmasını sağlar, böylece site verileri alınabilir.
Web sunucusuna bir dosyaya veya bir dizine yazma izni vermeniz gereken bazı durumlar olabilir - bunu yaparak gerçekleştirilebilir sudo chmod g+w /var/www/html/PATH
( PATH
dizin yapısında uygulamanız gereken dosya veya klasörün yolu web sunucusu için izinleri yaz).
DİKKAT : Bunun bir site yapılandırmasıyla ilgili (güvenli veritabanı bilgileri vb.) 'Güvenli' bilgileri gösterebileceği pek çok durum vardır ve bu bireysel dosyalar veya dizinlerdeki bu verilere ilişkin 'diğer' erişim izinlerini silmelisiniz. Aşağıdakiler: sudo chmod o-rwx /var/www/html/FILEPATH
( dosya klasörüne FILEPATH
göre yolun yerine /var/www/html
).
Ayrıca, 'yeni dosyalar', web sunucusuna oluşturulan ve kopyalanan dosyalara ve klasörlere erişebilmek için doğru izinler vermek üzere 403 sayı alırsa, bu komutları gelecekte yeniden çalıştırmanız gerekebileceğini unutmayın. almıyorsanız www-data
doğru ayarlanmış grubu.
(2) Sahibinize, klasörlere ve dosyalara okuma / yazma ayrıcalıkları verin ve klasör yapısını dizin yapısında gezinmek için klasör erişimine izin verin.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
USER
İlk komutta kendi kullanıcı adınızla değiştirin !
Burada üç şey yapıyoruz. Öncelikle, kullanıcınızı içindeki tüm dosya ve dizinlerin "Sahibi" olacak şekilde ayarladık /var/www/html
. Daha sonra, klasörler üzerinde okuma ve yazma izinlerini ayarladık ve klasörlere girmelerine ( +x
dizin öğelerinde bulunan öğe) erişmenize izin veriyoruz . Daha sonra tüm dosyaları, henüz belirlediğimiz sahibi için okuma / yazma izinlerine sahip olacak şekilde ayarladık.
(3) (İsteğe bağlı) Bundan sonra her yeni dosyanın www-data
'erişim' kullanıcısı olarak oluşturulduğundan emin olun .
sudo find /var/www/html -type d -exec chmod g+s {} +
Bu, dizinler üzerindeki grup için "set gid" bitini ayarlar. Bu dizinlerin içinde oluşturulan dosya ve klasörler her zaman www-data
grup olarak olacaktır , web sunucusu erişimine izin verir.
(4) (İsteğe bağlı) Diğer kullanıcıların verileri görmesini istemiyorsanız nihai güvenlik temizliği
Dizinleri ve dosyaları görebilmek için kullanıcılara ihtiyacımız var. Bunu yapmak için web sunucusuna ihtiyacımız var. Diğer sistem kullanıcılarının (root hariç) verileri görmesini istemeyiz. Böylece, onlara bu erişimi vermeyelim ve bunu yalnızca kullanıcı ve web sunucusu verileri görebilir.
sudo chmod -R o-rwx /var/www/html/
NOT: Bunu daha sonra yeniden çalıştırmanız veya 'diğer' izin kategorileri için izinleri burada düzenlemeniz gerekmeyecektir. 'Diğer' kullanıcılar ulaşamıyorsa (filtyapı ve dizin yapısını geçmek /var/www/html/
için gerekli +x
biti /var/www/html
veya +r
dosya listelerini okuyacak biti yoksa), diğer kullanıcılar için bu dizinin altındaki öğelerin izinleri veya gruplar gerçekten çok fazla önemli olmayacak.
Buna rağmen, bunun için biraz daha az istilacı bir çözüm var, ancak tüm yeni dosyalar için çalışması garanti edilmese de, dosya erişim kontrol listelerini içeren tüm dosya sistemlerinde çalışması garanti edilmiyor . Bu, dosyalar www-data
için mülkiyeti bir şeyler için bırakmanıza izin verir, ancak dosyalara şahsen sahip olmadığınız halde, tüm amaç ve amaçlar için size etkili sahiplik hakları verir.
Bu çözüm biraz daha az istilacıdır ve bir dizine ve içindeki tüm dosyalara sahip olmanıza www-data:www-data
veya root:www-data
kendinize erişmenize izin verir. Tek tek gruplar ayarlamadan birden çok kullanıcının izniniz olmasını sağlayan Erişim Denetimi Listeleri'ni kullanır . Bu aynı zamanda sağlayan root
veya www-data
kullanıcıların dosyaların sahibi sistem, ancak şeyler değil düzenlemek ve bu tür okuyabilir Bunu yaparsanız bir vaka ile ayrı ayrı ek izinler eklemek sağlar ve belirli kullanıcılar için ince ayar izinleri.
Hala birlikte çalıştığımızı /var/www/html/
varsayalım ve verilerimizi görmek için bizden ve sistemden (ve elbette kökünden) başkalarını gizlemek istemediğimizi varsayarsak , aşağıdakileri yapmamız gerekir:
- Web sunucusu sistemi kullanıcısına tekrar sahiplik verin
www-data
.
sudo chown -R www-veri: www-veri / var / www / html
- Dosyaları tekrar tekrar okumanıza / yazmanıza izin verirken, diğer kullanıcılara ( tabii ki
www-data
ve root
tabii ki) dosyalara erişme imkanı vermez.
sudo find / var / www / html -tipi f -exec setfacl -mu: SİZİN ADI: rw -m other :: --- {} \;
- Tekrar tekrar kendinize dizinleri okuma / yazma / gezinme izni verin, diğer kullanıcılar için klasörlere erişimi kaldırın (
www-data
ve hariç root
) ve bunu dizinlerdeki yeni dosyalar için 'varsayılan' ACL olarak ayarlayın.
sudo find / var / www / html -tipi d -exec setfacl -d -mu: SİZİN ADI: rwx -mo :: --- {} \;
- Ayrıca
setgid
, tüm dizinler için biti de ayarlamamız gerekir , böylece bir dosya oluşturursanız web sunucusu hala www-data
grup izinleriyle erişebilir .
sudo find / var / www / html -tipi d -exec chmod g + x {} \;
Ve şimdi tüm dizinlere erişimi var, ve uzakta erişimini almak den yoktu www-data
ihtiyacı gibi webserver hala her yerde dosyaları oluşturabilir olarak hangi yardımcı olur (örneğin PHP tabanlı önyüzleridir kendi önbellek dizinleri sahip ve bu şekilde düzgün çalışması için yaratılması ve yazılması gerekiyor).
Tek uyarı: El ile yeni dosyalar oluşturuyorsanız, web sunucusuna sahiplik vermek için bunları uygun şekilde kesmeniz gerekir. Bu basit bir işlemdir sudo chown www-data:www-data filename
ve erişim kontrol listeleri hala dosyaya ilişkin etkin haklara sahip olmanıza izin vermelidir.
Belirli bir dosyanın sahiplerini değiştirmeden bazı standart dışı erişim türleri için bunu sysadmin olarak yapmak zorunda kaldığım birden fazla durum var. Bu işe yarar, ancak her dosya sistemi dosya erişim listelerini desteklemediğinden kendi baş ağrıları vardır .
+x
, dosyalara çalıştırılabilir izinler verir ve PHP dosyalarının, mutlaka, PHP komut satırı aracılığıyla veya sunucunun kendisinde bir çalıştırılabilir dosya olarak yürütülmesini istemeyiz; web sunucusundaki PHP ayrıştırıcısı tarafından işlenmelerini istiyoruz (ve biz+x
PHP ayrıştırıcısının bunları okuması ve işlemesi için PHP dosyalarına ihtiyacınız yoktur ). Dizinler+x
, dizinler arasında geçişe izin vermek için gerekir - yani, eğer bir dizin olmasam+x
ve kök değilim, dizine giremem, Apache ile ilgili sorunlarınız, sembolik bağlarınızla ve evinizle çalışmıyor dizin.