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/htmlnoktası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/htmlve 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/htmlsiteniz 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-dataklasö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 ( +xsadece 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( PATHdizin 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 FILEPATHgö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-datadoğ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 ( +xdizin öğ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-datagrup 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 +xbiti /var/www/htmlveya +rdosya 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-dataiç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-dataveya root:www-datakendinize 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 rootveya www-datakullanı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-datave roottabii 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-datave 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-datagrup 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-dataihtiyacı 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 filenameve 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+xPHP 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+xve kök değilim, dizine giremem, Apache ile ilgili sorunlarınız, sembolik bağlarınızla ve evinizle çalışmıyor dizin.