Apache: truy cập bị từ chối vì thiếu quyền tìm kiếm


75

Tôi biết câu hỏi này được hỏi rất nhiều, nhưng các giải pháp tôi thấy không hiệu quả với tôi.

Tôi chỉ có một máy chủ ảo được bật và tôi đang cố gắng cho phép truy cập vào một thư mục không nằm dưới gốc tài liệu

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /movies /home/username/Videos/Movies

<Directory /home/username/Videos/Movies/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Tôi đặt /etc/apache2/envvarsnhư sau

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

Tôi đã đảm bảo rằng / home / tên người dùng / Video / và các thư mục con của nó được sở hữu bởi username:public, đặt quyền thành 777 (sau 775 không hoạt động) và đảm bảo rằng người dùng www-datathuộc nhóm public.

Bây giờ, khi tôi duyệt đến http://localhost/moviestôi nhận được

[Mon Apr 21 11:28:14.971844 2014] [core:error] [pid 1385:tid 140067725104896] (13)Permission denied: [client 127.0.0.1:46603] AH00035: access to /movies/ denied (filesystem path '/home/username/Videos') because search permissions are missing on a component of the path

Nhưng khi tôi cài đặt /etc/apache2/envvarschạy Apache dưới username(tên người dùng của riêng tôi) thì mọi thứ đều hoạt động tốt. Vấn đề là sự cho phép liên quan, nhưng tôi không thấy trong trường hợp của mình; đặc biệt là khi tôi đặt quyền cho 777. Có ý kiến ​​gì không?

Phiên bản PS Ubuntu là 14.04, Apache là 2.4.7 và tôi không chỉnh sửa các tệp cấu hình khác.



Tôi đã làm mọi thứ họ đề nghị ở đó, như tôi đã viết, và nó không giúp được gì
Yotam

Bất kỳ cơ hội nào bạn đã gắn kết /homevới ACL được kích hoạt? (có dấu "+" ở cuối các bit cho phép nếu đó là trường hợp (kiểm tra với ls -l))
Polosson

Không, tôi đã không làm điều đó. Hiện tại tôi đang chạy Apache dưới người dùng của mình, vì vậy nó hoạt động, nhưng tôi muốn chạy nó dưới một người dùng khác vì lý do bảo mật.
Yotam

Tôi đang sử dụng Linux lần đầu tiên. Tôi đã tải xuống phiên bản Ubuntu 14.04 LTE. Tôi đang đối mặt với cùng một vấn đề. Ai có thể giúp tôi không?
Imdad

Câu trả lời:


95

Thực hiện một chmod +xthư mục người dùng của bạn và khởi động lại apache. 755 quyền nên hoạt động. Tôi đã có vấn đề với 644 .


6
Thật vậy, và để kiểm tra quyền truy cập tệp và thư mục, nếu có, bạn có thể sử dụng namei -m /home/youruser/public_html/yourfile.exthoặc dùng thử people.apache.org/~igalic/hacks/parsepath
Junior M

2
để làm rõ, bất kỳ thư mục nào bạn muốn Apache đọc, phải có thể đọc được cho người dùng Apache. Nhiều khả năng thư mục nhà người dùng của bạn không thuộc sở hữu của người dùng và nhóm của bạn, do đó bạn phải đặt 755 quyền /home/usernameđể truy cập nó với apace.
hủy hoại

Tôi gặp vấn đề này trên OSX Mac OS High Sierra và giải pháp này hiệu quả với tôi. Thậm chí không phải khởi động lại Apache.
đi

Sau nhiều giờ tìm kiếm, hóa ra các quyền cũng phải chính xác cho các thư mục mẹ của DocumentRoot. Cảm ơn rât nhiều . BTW này không cần khởi động lại Apache
Kế toán م

27

Nếu trong trường hợp selinux là vấn đề, thay vì chỉ vô hiệu hóa nó, trang nàytrang này đưa ra lệnh để cấp quyền truy cập:

chcon -R -t httpd_sys_content_t ~/public_html/

1
Tôi chắc chắn đó là vấn đề của tôi. CentOS chết tiệt! Thx cho lệnh, hoạt động hoàn hảo.
Balmipour

2
cảm ơn, chỉ cần thay thế ~/public_html/phần bằng thư mục gốc của nội dung tôi đang cố gắng phục vụ.
trpt4him

chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(trong tình huống của tôi)
cssyphus

Selinux được phát hiện không thể xử lý các homedir đơn giản và chỉ một trong số các tính năng đó là bắt buộc trong khi các tính năng khác là tùy chọn. Cảm ơn đã nhắc nhở về cách khắc phục - sau thời gian thử nghiệm lại bắt buộc với mỗi bản phát hành mới và sự thất vọng, tôi thường chỉ hack nó trong phần khởi động. Bây giờ cho systemd.
dùng2066657

17

Bạn có thể đã bật selinux. Thử

getenforce

Nếu nó hiển thị "Thực thi", hãy thử

setenforce 0

và thử nếu điều này khắc phục vấn đề của bạn.


4
Đừng chỉ vô hiệu hóa Selinux như là một sửa chữa. Khắc phục sự cố SELinux bằng cách gán lại các cổng hoặc đặt booleans.
siride

1
Câu trả lời này giúp xác định rằng vấn đề có liên quan đến SELinux. Nhưng vô hiệu hóa nó không được khuyến khích.
Rajkumar R

15

Tôi gặp phải vấn đề tương tự, sau nhiều giờ cố gắng, tôi đã tìm ra giải pháp chính xác giải quyết vấn đề:

https://wiki.apache.org/httpd/13PermissionDenied

Về cơ bản, máy chủ Apache không chỉ yêu cầu quyền đọc của tất cả các tệp mà nó phục vụ, mà là quyền thực thi của tất cả các thư mục trong đường dẫn của máy chủ ảo của bạn.

Tên tiện ích có thể được sử dụng để giúp tìm các vấn đề về quyền bằng cách liệt kê các quyền dọc theo từng thành phần của đường dẫn:

namei --modes /usr/local/apache2/htdocs/foo/bar.html

Trong trường hợp của tôi, một thư mục trong đường dẫn của tôi có quyền 700, nó gây ra vấn đề. Sau khi thay đổi nó thành 701, vấn đề đã được giải quyết.


1
Liên kết ở đây rất hữu ích vì nó giải thích vấn đề: Một trong các nút trong đường dẫn thư mục bị thiếu quyền tìm kiếm. Sử dụng lệnh "namei" để tìm cái này và sau đó "chmod" thành 755.
user3751385

Nó giải thích lý do thực sự cũng như giải pháp. cảm ơn
Emdadul Sawon

1

Tôi đã gặp vấn đề này khi tôi đang cố chạy apache trong bộ chứa docker trên máy chủ Ubuntu 16.04 đang sử dụng kernel 4.4 thay vì 4.10.

Khi tôi chạy lệnh này trên máy chủ và triển khai lại, tôi vẫn ổn:

sudo apt-get install --install-recommends linux-generic-hwe-16.04 

Tôi đã gặp phải vấn đề này, nhưng với hiệu ứng kỳ lạ mà tôi có thể chmodhoặc chownbên trong container và nó đã khắc phục lỗi Apache 403 trong một thời gian, chỉ để hoàn nguyên một thời gian sau đó. Không có sự khởi động lại container can thiệp hoặc thay đổi đáng kể nào có thể là nguyên nhân của điều này, theo như tôi có thể nói. Vì tôi thực sự đang chạy 16.04, tôi đã thử cài đặt nhị phân này và bây giờ 403 của tôi đang bị giữ. Tôi sẽ để mắt đến nó, và cảm ơn!
halfer
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.