Apache tidak dapat mengakses folder di direktori rumah saya

29

Saya telah mengubah konfigurasi Apache untuk mengarah ke folder di direktori home saya:

<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>

Saya bahkan telah memberikan /home/dbugger/htmlizin kepada saya 777. Tetapi saya masih mendapatkan pesan kesalahan yang sama di http://localhost: "403 Forbidden"

Apa yang saya lewatkan?

Tenda Enrique Moreno
sumber
Bagaimana dengan /home/dbuggerizin?
Eric Carvalho
Maksudmu aku harus membuat 777 seluruh folder rumahku? Itu sepertinya berlebihan. Bahkan membuat 777 html bukanlah solusi yang aman. Saya hanya melakukan itu untuk mencoba mengidentifikasi akar masalah.
Tenda Enrique Moreno
1
apache berjalan sebagai data-pengguna www. Jika pengguna itu tidak memiliki izin eksekusi di rumah Anda, apache tidak akan dapat membaca file apa pun.
Eric Carvalho
Apakah tidak ada cara untuk menambahkan subfolder dari direktori home saya ke www-data tanpa harus memberikan akses lengkap ke folder home? Mengikuti logika itu sepertinya saya harus memberikan akses ke folder SEMUA RUMAH juga, karena saya harus memberikannya akses ke / home. Kelihatannya terlalu banyak
Tenda Enrique Moreno

Jawaban:

25

Ini berhasil untuk saya

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

Yang penting adalah berubah

Order allow, deny

untuk

Require all granted 
Szydan
sumber
Anda menghemat waktu saya, saya tidak perlu mengubah izin
khaled_webdev
Hai, saya senang itu membantu Anda
szydan
3
Saya mengambil kebebasan untuk mencari apa yang "mengharuskan semua diberikan" dan menemukan bahwa itu adalah "setara baru" Allow from alldari apache 2.4 dan seterusnya - serverfault.com/questions/549517/…
Programster
8
tidak, memberikan akses ke seluruh root tidak pernah merupakan ide yang baik!
bjunix
9
Pengaturan AllowOverrideuntuk Alldi direktori root Anda ceroboh di terbaik! Lihat httpd.apache.org/docs/2.4/mod/core.html#allowoverride untuk detailnya.
Bombe
19

Aktifkan userdirmodul:

sudo a2enmod userdir 

Aktifkan eksekusi PHP di direktori pengguna:

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

(Atau jika menggunakan php7.0, misalnya)

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

Komentari bagian ini (letakkan #di awal setiap baris):

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

Tekan Ctrl+ Xuntuk menyimpan

Aktifkan daftar direktori:

sudo nano /etc/apache2/apache2.conf

Tambahkan ini:

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

Tekan Ctrl+ Xuntuk menyimpan


Mulai ulang apache ( sudodiperlukan di sini juga):

sudo service apache2 restart

Sekarang letakkan file php Anda di /home/yourname/public_htmldirektori dan buka
http://localhost/~yournamedari browser web Anda.

dgreene
sumber
11

Apache berjalan sebagai pengguna www-data. Jika tidak memiliki izin eksekusi di rumah Anda, apache tidak akan dapat membaca file apa pun.

Ubah grup rumah Anda menjadi www-data:

chgrp www-data /home/dbugger

Dan berikan izin hanya untuk melintasi direktori home Anda:

chmod g+x /home/dbugger

Anda juga dapat membatasi izin /home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html
Eric Carvalho
sumber
Bisakah saya melakukan itu, tetapi bukannya /home/dbuggermenggunakan /home/dbugger/html?
Tenda Enrique Moreno
Anda juga dapat menerapkan izin itu /home/dbugger/htmldaripada 777, tetapi Anda harus ingat bahwa jika pengguna www-data tidak dapat cdke rumah Anda, itu tidak akan dapat mengakses file atau subfolder apa pun. Jadi, jika izin rumah Anda adalah rwx------ dbugger:dbuggerapache tidak akan dapat mengakses file apa pun di dalam rumah Anda. Jika Anda tidak ingin membatasi akses sedikit Anda bisa mencoba memberikan hanya mengeksekusi izin ( chmod g+x /home/dbugger), saya tidak yakin, tapi saya pikir itu berfungsi.
Eric Carvalho
Maaf tetapi tidak satu pun dari solusi ini yang berhasil :(
Enrique Moreno Tent
chgrp www-data /home/dbuggerdalam kombinasi dengan metode @DavidGreene membuatnya bekerja untuk saya
laurent
Anda juga dapat menambahkan grup pengguna Anda ke pengguna apache (www-data) sudo usermod -a -G dbugger www-data, setelah itu Anda perlu memulai kembali apache.
TIIUNDER
1

Anda tidak perlu mengubah izin jika Anda ingin menggunakan direktori home Anda untuk meng-host lingkungan pengembangan, setidaknya Anda perlu izin menulis untuk beberapa aplikasi. Anda memerlukan modul mod_userdir apache dan Anda dapat mengakses / home / user_name / public_html / * seperti ini http: //domain.local/~user_name/dir_name/ * untuk menggunakan host virtual, untuk menggunakan modul mod_userdir Anda perlu membuat sym tautan seperti ini:

$ 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
pengguna1916831
sumber
5
Anda juga dapat menggunakana2enmod userdir
Joril