Apache, giriş dizinimdeki klasörlere erişemiyor


29

Apache'nin konfigürasyonunu, ev dizinimdeki bir klasöre işaret edecek şekilde değiştirdim:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /home/dbugger/html

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/dbugger/html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

/home/dbugger/html777 iznimi bile verdim. Ancak aynı hata iletisini almaya devam ediyorum http://localhost: "403 Yasak"

Kaçırdığım şey nedir?


Peki ya /home/dbuggerizin?
Eric Carvalho

777'yi tüm ev klasörüm yapmalı mıyım? Bu abartıyor gibi görünüyor. 777'yi yapmak bile html güvenli bir çözüm değildir. Sadece sorunun kökenini tanımlamak için yapıyorum.
Enrique Moreno Çadır

1
apache kullanıcı www-data olarak çalışır. Bu kullanıcı evinizde yürütme iznine sahip değilse, apache hiçbir dosyayı okuyamaz.
Eric Carvalho

Ana klasöre tam erişim sağlamak için ana dizinin bir alt klasörünü www-data kısmına eklemenin bir yolu yok mu? Bu mantığı takiben, TÜM EV klasörlerine de erişim vermek zorunda kalacağım gibi, / home dizinine de erişim vermek zorunda kalacağım. Bu çok görünüyor
Enrique Moreno Çadır

Yanıtlar:


25

Bu benim için çalıştı

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
    Allow from all
</Directory>

Önemli olan değişmek oldu.

Order allow, deny

için

Require all granted 

zamanımı kurtarıyorsun,
iznimi

Merhaba, size yardım ettiğine sevindim
szydan

3
"Herkesin kabul etmesini iste" nin ne olduğunu bulma özgürlüğüne sahip oldum ve bunun Allow from allapache 2.4'ten "yeni eşdeğeri" olduğunu öğrendim - serverfault.com/questions/549517/…
Programcı

8
hayır, tüm köke erişim vermek asla iyi bir fikir değildir!
bjunix

9
Ayar AllowOverrideiçin Allsenin üzerindeki kök dizininde en iyi pervasız olduğunu! Ayrıntılar için httpd.apache.org/docs/2.4/mod/core.html#allowoverride adresini ziyaret edin.
Bombe

19

userdirModülü etkinleştir :

sudo a2enmod userdir 

PHP dizinini kullanıcı dizininde etkinleştir:

sudo nano /etc/apache2/mods-available/php5.conf  

(Ya da örneğin php7.0 kullanıyorsanız)

sudo nano /etc/apache2/mods-available/php7.0.conf

Bu bölümü #yorumlayın (her satırın başına koyun ):

#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
#</IfModule>

Basın Ctrl+ Xkaydetmek için

Dizin listesini etkinleştir:

sudo nano /etc/apache2/apache2.conf

Bunu ekle:

<Directory /home/*/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Basın Ctrl+ Xkaydetmek için


Apache'yi yeniden başlat (sudo burada da gereklidir):

sudo service apache2 restart

Şimdi php dosyalarınızı /home/yourname/public_htmldizine yerleştirin ve
http://localhost/~yournameweb tarayıcınızdan gidin.


11

Apache kullanıcı olarak çalışır www-data. Evinizde yürütme izni yoksa, apache hiçbir dosyayı okuyamaz.

Evinizin grubunu şu şekilde değiştirin www-data:

chgrp www-data /home/dbugger

Ve yalnızca giriş dizininizi geçmek için izin verin:

chmod g+x /home/dbugger

Ayrıca aşağıdakilerin izinlerini de kısıtlayabilirsiniz /home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html

Bunu ancak yerine Can /home/dbuggerkullanarak /home/dbugger/html?
Enrique Moreno Çadır

Bu izni /home/dbugger/html777 yerine de uygulayabilirsiniz , ancak kullanıcı www-verileri cdevinize yapamıyorsa, herhangi bir dosyaya veya alt klasöre erişemeyeceğini unutmayın. Yani, ev izniniz rwx------ dbugger:dbuggerapache ise, evinizdeki hiçbir dosyaya erişemezsiniz. Erişimi biraz kısıtlamak istemiyorsanız, yalnızca yürütme izni vermeyi deneyebilirsiniz ( chmod g+x /home/dbugger), emin değilim, ama işe yarıyor.
Eric Carvalho

Üzgünüz, bu çözümlerden hiçbiri işe yaramadı :(
Enrique Moreno Çadır

chgrp www-data /home/dbugger@DavidGreene yöntemi ile birlikte benim için çalışmasını sağladı
laurent

Ayrıca, kullanıcı grubunuzu apache kullanıcısına (www-data) eklemek mümkündür sudo usermod -a -G dbugger www-data, bundan sonra apache'yi yeniden başlatmanız gerekir.
TIIUNDER

1

Ana dizini geliştirme ortamını barındırmak için kullanmak istiyorsanız, en azından bazı uygulamalar için yazma izinlerine ihtiyacınız varsa, izinleri değiştirmeniz gerekmez. Apache mod_userdir modülüne ihtiyacınız var ve sanal bir ana bilgisayar kullanmak için / home / kullanıcı_adı / public_html / * ' a erişebilirsiniz. Bunun gibi bir bağlantı:

$ sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/
$ sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/
$ sudo service apache2 restart

5
Ayrıca kullanabilirsiniza2enmod userdir
Joril
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.