Apache không thể truy cập các thư mục trong thư mục nhà của tôi


29

Tôi đã thay đổi cấu hình của Apache để hướng tới một thư mục trong thư mục chính của tôi:

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

Tôi thậm chí đã cho /home/dbugger/htmlphép 777. Nhưng tôi vẫn tiếp tục nhận được thông báo lỗi tương tự tại http://localhost: "403 Bị cấm"

Tôi đang thiếu cái gì vậy?


Còn sự /home/dbuggercho phép thì sao?
Eric Carvalho

Bạn có nghĩa là tôi nên làm 777 thư mục nhà của tôi? Điều đó dường như làm quá nó. Ngay cả làm cho 777 là html không phải là một giải pháp an toàn. Tôi chỉ làm điều đó để cố gắng xác định gốc rễ của vấn đề.
Lều Enrique Moreno

1
apache chạy dưới dạng dữ liệu www của người dùng. Nếu người dùng đó không có quyền thực thi tại nhà của bạn, apache sẽ không thể đọc bất kỳ tệp nào.
Eric Carvalho

Không có cách nào để thêm thư mục con của thư mục chính của tôi vào mạng dữ liệu www để có quyền truy cập hoàn toàn vào thư mục chính? Theo logic đó có vẻ như tôi cũng sẽ phải cấp quyền truy cập vào TẤT CẢ các thư mục HOME, vì tôi sẽ phải cấp cho nó quyền truy cập vào / nhà. Điều đó dường như quá nhiều
Lều Enrique Moreno

Câu trả lời:


25

Điều này làm việc cho tôi

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

Điều quan trọng là thay đổi

Order allow, deny

đến

Require all granted 

bạn tiết kiệm thời gian của tôi, tôi không phải thay đổi quyền
khaled_webdev

Xin chào, tôi rất vui vì nó đã giúp bạn
szydan

3
Tôi mất sự tự do của nhìn lên cái gì "yêu cầu tất cả cấp" đã và thấy rằng nó là "tương đương mới" của Allow from alltừ apache 2.4 trở đi - serverfault.com/questions/549517/...
Programster

8
Không, cấp quyền truy cập vào toàn bộ gốc không bao giờ là một ý tưởng tốt!
bjunix

9
Thiết AllowOverrideđể Alltrên của bạn gốc thư mục là liều lĩnh lúc tốt nhất! Xem httpd.apache.org/docs/2.4/mod/core.html#allowoverride để biết chi tiết.
Bombe

19

Kích hoạt userdirmô-đun:

sudo a2enmod userdir 

Cho phép thực thi PHP trong thư mục người dùng:

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

(Hoặc nếu sử dụng php7.0 chẳng hạn)

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

Nhận xét phần này (đặt #ở đầu mỗi dòng):

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

Nhấn Ctrl+ Xđể lưu

Cho phép danh sách thư mục:

sudo nano /etc/apache2/apache2.conf

Thêm điều này:

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

Nhấn Ctrl+ Xđể lưu


Khởi động lại apache (cũng sudobắt buộc ở đây):

sudo service apache2 restart

Bây giờ đặt các tập tin php của bạn vào /home/yourname/public_htmlthư mục và đi
http://localhost/~yournametừ trình duyệt web của bạn.


11

Apache chạy như người dùng www-data. Nếu nó không có quyền thực thi tại nhà của bạn, apache sẽ không thể đọc bất kỳ tập tin nào.

Thay đổi nhóm của bạn thành www-data:

chgrp www-data /home/dbugger

Và chỉ cho phép truy cập thư mục chính của bạn:

chmod g+x /home/dbugger

Bạn cũng có thể hạn chế hoán vị của /home/dbugger/html:

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

Tôi có thể làm điều đó, nhưng thay vì /home/dbuggersử dụng /home/dbugger/html?
Lều Enrique Moreno

Bạn cũng có thể áp dụng quyền đó cho /home/dbugger/htmlthay vì 777, nhưng bạn phải nhớ rằng nếu dữ liệu www của người dùng không thể cdđến nhà bạn, thì nó sẽ không thể truy cập bất kỳ tệp hoặc thư mục con nào. Vì vậy, nếu sự cho phép của bạn là rwx------ dbugger:dbuggerapache sẽ không thể truy cập bất kỳ tập tin nào trong nhà của bạn. Nếu bạn không hạn chế quyền truy cập một chút, bạn có thể thử chỉ cấp quyền thực thi ( chmod g+x /home/dbugger), tôi không chắc, nhưng tôi nghĩ nó hoạt động.
Eric Carvalho

Xin lỗi nhưng cả hai giải pháp này đều không hoạt động :(
Lều Enrique Moreno

chgrp www-data /home/dbuggerkết hợp với phương pháp @DavidGreene nhận nó làm việc cho tôi
laurent

Cũng có thể thêm nhóm người dùng của bạn vào người dùng apache (dữ liệu www) sudo usermod -a -G dbugger www-data, sau đó bạn cần khởi động lại apache.
TIIUNDER

1

Bạn không cần thay đổi quyền nếu bạn muốn sử dụng thư mục chính của mình để lưu trữ môi trường phát triển, ít nhất là bạn cần quyền ghi cho một số ứng dụng. Bạn cần mô-đun apache mod_userdir và bạn có thể truy cập vào / home / user_name / public_html / * như thế này http: //domain.local/~user_name/dir_name/ * để sử dụng mô-đun ảo, để sử dụng mô-đun mod_userdir bạn cần tạo một sym liên kết như thế này:

$ 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
Bạn cũng có thể sử dụnga2enmod userdir
Joril
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.