Làm cách nào để sửa lỗi 403 trong Mac OS X tích hợp Apache?


25

Tôi đang cố gắng thiết lập môi trường cục bộ trên MacBook Air 13 mới của mình ": Apache tích hợp với DocumentRootPHP, PHP và MySQL của riêng tôi . Tôi thường cập nhật /etc/hostschỉ để chạy các trang web địa phương của mình với một permalink khá local/example. kiểm tra:

Lần này tôi chỉ đơn giản là nhận được một Forbidden 403 lỗi mỗi khi tôi nhấn 127.0.0.1, localhosthoặc local. Đầu tiên tôi thấy qua thiết bị đầu cuối mà cả Apache và PHP đều đang chạy (mặc dù tôi không thể xem các trang PHP); sau đó tôi cập nhật tất cả các quyền theo quyền của Apache ; Bây giờ tôi chỉ tuyệt vọng. Dưới đây là các cấu hình Apache có liên quan:

  • /etc/hosts( xem tập tin - thêm một dòng)
  • /etc/apache2/httpd.conf( xem tập tin - đã cập nhật DocumentRoot)
  • /etc/apache2/users/joao.conf( xem tệp - đã tạo tệp này)
  • /etc/apache2/extra/httpd-vhosts.conf( xem tập tin - cập nhật VirtualHost)

Có vẻ như Apache bằng cách nào đó từ chối tôi truy cập vào DocumentRoot(nhân tiện là vậy ~/Sites). Vì ~/Sitesthực sự là một liên kết tượng trưng, ​​sau đó tôi đã cố gắng cập nhật DocumentRootvới các đường dẫn sau (tất cả đều trỏ đến cùng một thư mục):

  • ~/Sites
  • /Users/joao/Sites
  • /Users/joao/Dropbox/Workflow/Sites( thư mục gốc )

Vẫn ném 403 . Bất kỳ ý tưởng làm thế nào để sửa chữa / gỡ lỗi này?

Cập nhật nhanh - đây là giao diện của tôi /var/log/apache2/joao.pt-error_log:

[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:47 2013] [error] [client ::1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:47 2013] [error] [client ::1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:48 2013] [error] [client ::1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:48 2013] [error] [client ::1] (13)Permission denied: access to /favicon.ico denied

Câu trả lời:


19

Tôi có một bí danh được chỉ định trong máy chủ OSX trỏ đến thư mục người dùng. Tôi đã dành một khoảng thời gian dài để trò chuyện và nhắn tin với người dùng _www, thêm các quyền thực thi theo cách đệ quy, gỡ cài đặt macports và tất cả các loại công cụ đang cố gắng để làm việc này. Không biết tại sao nó không hoạt động.

Cuối cùng, tôi chỉ kiểm tra hộp kiểm "thư mục dùng chung" trong Finder cho thư mục đó và nó hoạt động , trên miền được chỉ định, với php active, theo cách tôi muốn. : / ... vậy là dễ rồi.


Nó không làm việc cho tôi. Tôi đã tạo một thư mục /Sites(trong /thư mục gốc của mình ) và đưa các tệp của mình vào đó, định cấu hình các tùy chọn Bí danh và Thư mục tương ứng. Làm việc tốt
jpenna

11

Tôi cập nhật lên macOSS Sierra , Phiên bản 10.12

Tôi đối mặt với cùng một vấn đề, tôi đã làm hai điều để khắc phục nó đúng cách. Sau đây là cách tiếp cận của tôi.

1) Vui lòng kiểm tra tệp " /private/etc/apache2/extra/httpd-userdir.conf ". Thay đổi

#Include /private/etc/apache2/users/*.conf

đến

Include /private/etc/apache2/users/*.conf

2) ** Và chỉnh sửa " /etc/apache2/httpd.conf " của bạn

thay đổi

Options FollowSymLinks Multiviews

đến

Options FollowSymLinks Multiviews Indexes

cuối cùng, tài liệu gốc của bạn sẽ giống như sau,

DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
Options FollowSymLinks Multiviews Indexes
MultiviewsMatch Any
AllowOverride All
Require all granted

3) Khởi động lại apache

sudo apachectl restart

Vẫn còn bạn phải đối mặt với vấn đề, vui lòng kiểm tra Cách thiết lập Apache trong macOS Sierra 10.12


9

Tôi thường khắc phục điều này bằng cách đặt người dùng Apache thành chính mình trong các môi trường cục bộ và trong các máy mà người dùng duy nhất sử dụng Apache là tôi. Trong /private/etc/apache2/httpd.conf, đặt thành Usertên người dùng của bạn từ _www, ví dụ:

User _www

->

User joao

Và sau đó khởi động lại Apache:

$ sudo apachectl restart

Các bước bổ sung:

  1. Nếu bạn có phiên hoạt động, họ sẽ đưa ra lỗi cấp phép vì chúng vẫn thuộc sở hữu của _www. Sở hữu chúng:

    $ sudo chown joao: /var/tmp/sess_*
    

Hàm ý:

Sau này, Apache (và PHP và cộng sự) sẽ chạy như bạn và sẽ có được quyền đọc / ghi đối với tất cả các tệp bạn có quyền đọc / ghi. Nhưng vì đây chỉ là môi trường phát triển cục bộ, nên đó không phải là vấn đề trừ khi bạn không có quy tắc nào để chặn Apache trong tường lửa của bạn để các tệp nghi vấn như trình khám phá tệp, trình bao, tập lệnh có thể chứa lỗ hổng chạy dưới Apache; trong trường hợp bất kỳ ai, kể cả hàng xóm wifi công cộng của bạn trong quán cà phê đều có thể vào http://<your IP>và làm bất cứ điều gì các kịch bản đó cho phép họ làm.

Trên thực tế, bạn nên ngăn chặn điều này bất kể tập lệnh bạn chạy hay ngay cả khi bạn không đặt người dùng Apache cho mình vì có thể bạn không muốn người ngoài ngẫu nhiên có thể xem nội dung của bạn localhost.

Phòng ngừa:

  1. Làm cho Apache chỉ nghe localhost. Một lần nữa, trong httpd.conf:

    Listen 80
    

    ->

    Listen 127.0.0.1:80
    

    Và khởi động lại Apache một lần nữa:

    $ sudo apachectl restart
    
  2. Vô hiệu hóa Apache trong tường lửa ứng dụng (lưu ý rằng bạn có thể đã tắt nó nếu bạn nhấp vào Denynếu / khi nó được hỏi trong lần đầu tiên bạn chạy Apache):

    1. Mở System Preferences» Security & Privacy» Firewall.
    2. Nhấp vào biểu tượng khóa ở phía dưới bên trái và nhập mật khẩu của bạn nếu cần.
    3. Bật tường lửa nếu nó bị vô hiệu hóa.
    4. Nhấn vào đây Firewall Options.
    5. Nhấn vào +nút.
    6. Nhấn cmd ⌘+ ⇧ shift+ Gvà nhập /usr/sbin/httpdvà nhấp Add(Nếu httpdkhông hiển thị ở đó, bạn có thể tìm nó trong thiết bị đầu cuối bằng cách which httpd)
    7. Trong danh sách bấm httpdvà chọn Block incoming connections.
    8. Trúng OK.
    9. Tải lại tường lửa:

      $ launchctl unload /System/Library/LaunchAgents/com.apple.alf.useragent.plist
      $ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.alf.agent.plist
      $ launchctl load /System/Library/LaunchAgents/com.apple.alf.useragent.plist
      $ sudo launchctl load /System/Library/LaunchDaemons/com.apple.alf.agent.plist
      
  3. Hạn chế PHP vào tài liệu gốc. Trong php.ini:

    open_basedir = /Users/joao/Sites/:/var/tmp/
    

    ( /var/tmp/dành cho phiên)

Sử dụng tất cả ba giải pháp để bảo vệ chính bạn trong trường hợp một trong số chúng bị vô hiệu hóa vì một số lý do.

- Lưu ý rằng vì ngôn ngữ hoạt động trong máy của tôi không phải là tiếng Anh, nên từ ngữ có thể hơi khác một chút (Tùy chọn menu và từ ngữ có thể khác nhau bất kể ngôn ngữ trong các phiên bản OS X khác nhau).

- Các dòng bắt đầu bằng $cần phải được nhập vào dòng lệnh (Terminal hoặc iTerm, v.v.), với $loại bỏ.


5

Tôi chỉ giải quyết vấn đề của mình bằng cách đặt quyền không chỉ cho DocumentRootthư mục mà còn cho tất cả các thư mục mẹ của nó. Đây là cách tôi đã làm nó .

(13) Quyền bị từ chối

Lỗi 13 chỉ ra vấn đề về quyền hệ thống tập tin. Đó là, Apache đã bị từ chối truy cập vào một tệp hoặc thư mục do quyền không chính xác. Nói chung, nó không có nghĩa là một vấn đề trong các tệp cấu hình Apache.

Để phục vụ các tệp, Apache phải có sự cho phép thích hợp của hệ điều hành để truy cập các tệp đó. Cụ thể, Người dùng hoặc Nhóm được chỉ định trong httpd.conf phải có thể đọc tất cả các tệp sẽ được phục vụ và tìm kiếm thư mục chứa các tệp đó, cùng với tất cả các thư mục mẹ cho đến thư mục gốc của hệ thống tệp.

Các quyền thông thường trên một hệ thống giống như unix đối với các tài nguyên không thuộc quyền sở hữu của Người dùng hoặc Nhóm được chỉ định trong httpd.conf sẽ là 644 -rw-r - r-- cho các tệp thông thường và 755 drwxr-xrx cho các thư mục hoặc tập lệnh CGI. Bạn cũng có thể cần kiểm tra các quyền mở rộng (chẳng hạn như quyền SELinux) trên các hệ điều hành hỗ trợ chúng.

Nếu bạn đang chạy 2.4, mã lỗi AH có thể cung cấp cho bạn thêm thông tin ở đây.

  • AH00132: quyền truy cập tệp từ chối truy cập máy chủ
  • AH00035: truy cập bị từ chối vì quyền tìm kiếm bị thiếu trên một thành phần của đường dẫn Ví dụ

Hãy nói rằng bạn đã nhận được lỗi Từ chối cấp phép khi truy cập tệp /usr/local/apache2/htdocs/foo/bar.html trên một hệ thống giống như unix.

Trước tiên hãy kiểm tra các quyền hiện có trên tệp:

cd /usr/local/apache2/htdocs/foo
ls -l bar.htm

Sửa chúng nếu cần thiết:

chmod 644 bar.html

Sau đó, làm tương tự cho thư mục và từng thư mục cha mẹ (/ usr / local / apache2 / htdocs / foo, / usr / local / apache2 / htdocs, / usr / local / apache2, / usr / local, / usr):

ls -la
chmod +x .
cd ..
# repeat up to the root

Trên một số hệ thống, 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 -m /usr/local/apache2/htdocs/foo/bar.html Nếu hệ thống của bạn không có namei, bạn có thể sử dụng parsepath. Nó có thể được lấy từ đây.

Nếu tất cả các quyền tiêu chuẩn là chính xác và bạn vẫn nhận được lỗi Từ chối cấp phép, bạn nên kiểm tra các quyền mở rộng. Ví dụ: bạn có thể sử dụng lệnh setenforce 0 để tắt SELinux và kiểm tra xem sự cố có biến mất không. Nếu vậy, ls -alZ có thể được sử dụng để xem quyền của Selinux và chcon để sửa chúng.

Trong các trường hợp hiếm hoi, điều này có thể được gây ra bởi các vấn đề khác, chẳng hạn như vấn đề quyền truy cập tệp ở nơi khác trong tệp apache2.conf của bạn. Ví dụ, một lệnh WSGIScriptAlias ​​không ánh xạ tới một tệp thực tế. Thông báo lỗi có thể không chính xác về tập tin nào không thể đọc được.

KHÔNG đặt các tệp hoặc thư mục thành chế độ 777, ngay cả "chỉ để kiểm tra", ngay cả khi "đó chỉ là máy chủ thử nghiệm". Mục đích của một máy chủ thử nghiệm là để có được mọi thứ ngay trong một môi trường an toàn, không phải để tránh làm sai. Tất cả nó sẽ cho bạn biết nếu vấn đề xảy ra với các tập tin thực sự tồn tại.

Kịch bản CGI

Mặc dù quyền của tập lệnh CGI có thể trông chính xác, nhị phân thực tế được chỉ định trong shebang có thể không có quyền thích hợp để được chạy. (Hoặc một số thư mục trên đường dẫn của nó, kiểm tra với namei như được giải thích ở trên.)

(13) Quyền bị từ chối: proxy: HTTP: cố gắng kết nối với 127.0.0.1:8080 (localhost) không thành công

Lỗi này không thực sự về quyền truy cập tập tin hoặc bất cứ điều gì như thế. Điều thực sự có nghĩa là httpd đã bị từ chối cấp phép để kết nối với địa chỉ IP và cổng đó.

Nguyên nhân phổ biến nhất của việc này là SELinux không cho phép httpd thực hiện kết nối mạng.

Để giải quyết nó, bạn cần thay đổi giá trị boolean SELinux (sẽ tự động tồn tại trong suốt quá trình khởi động lại). Bạn cũng có thể muốn khởi động lại httpd để thiết lập lại nhân viên proxy, mặc dù điều này không bắt buộc.

# setsebool -P httpd_can_network_connect 1


1
Bạn có thể tóm tắt những điểm cơ bản trong câu trả lời của bạn? Cảm ơn!
Matt

2
Cấp quyền truy cập vào tất cả các thư mục mẹ của nó sẽ là một vi phạm an ninh rất lớn !
Julian F. Weinert

1
Câu trả lời này không hữu ích. Giải pháp thay thế hoạt động cho các máy / cấu hình linux. OSX có cấu trúc thư mục khác, đặc biệt dành cho apache (nằm trong / Library / WebServer), giải pháp đưa ra không dành cho OSx, như apple.stackexchange.
Juan

3

Các bước sau đây hoạt động với tôi trên High Sierra chạy Apache 2.4

(Dựa trên hướng dẫn tuyệt vời sau: http://www.cgi101.com/book/connect/mac.html , được cập nhật với các bước bổ sung cho sự khác biệt của phiên bản)

  1. Di chuyển tệp đến:

    /Library/WebServer/CGI-Executables
    
  2. Xác minh rằng tệp có quyền thực thi:

    ls -l  /Library/WebServer/CGI-Executables
    

    Nếu không sử dụng:

    chmod -x  /Library/WebServer/CGI-Executables/myfile.cgi
    
  3. Bỏ ghi chú các dòng sau trong /etc/apache2/httpd.conf

    AddHandler cgi-script .cgi .pl
    
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
    
    LoadModule cgi_module libexec/apache2/mod_cgi.so
    
  4. Đồng thời thay đổi thư mục "/ Library / WebServer / CGI-Executables" thành:

    <Directory "/Library/WebServer/CGI-Executables">
     AllowOverride None
     Options ExecCGI
     Require all granted
    </Directory>
    
  5. Sau đó khởi động lại Apache:

    sudo apachectl -k restart
    

Hầu như với mọi phiên bản macOS mới, các thay đổi sẽ bị mất và bạn sẽ cần làm lại công việc, và thậm chí thực hiện các bước khác nhau để khắc phục nó. Người bạn tốt nhất của bạn là nhật ký Apache nằm trong / var / log / apache2 / (/ var / log / apache2 / error_log)


1
Không phải là một câu trả lời mà là quan sát. Hướng dẫn số 1 ở trên: Di chuyển tệp sang: Tập tin nào?
Pam

0

Tôi đã sử dụng ACL để đặt quyền, theo hướng dẫn trong " Cách đặt quyền tệp và thư mục cho Apache trên Mac OS X ", nhưng vẫn nhận được:

[Wed Feb 12 15:43:51 2014] [error] [client ::1] (13)Permission denied: access to /trace/trace.php denied (filesystem path '/Library/WebServer/Documents/trace/trace.php') because search permissions are missing on a component of the path

Sau đó, tôi đọc " (13) Từ chối cấp phép " (được liên kết với câu trả lời của João Ramos ) và thử thêm "thực thi" vào ACL. Điều đó đã làm việc.


0

Khởi động lại máy tính của bạn! Điều này làm việc cho tôi.

Nhưng trước hết tôi đã thay đổi người dùng theo apache thành chính mình (từ _www), vì đó là môi trường thử nghiệm / cục bộ. Vì vậy, cuối cùng nó có một cái gì đó để làm với quyền.

Sau đó khởi động lại máy, giống như Windows;).


0

OP mô tả một vấn đề phát sinh trong khi cố gắng thiết lập môi trường máy chủ web cục bộ trên máy Mac, sử dụng Apache, PHP và MySQL, với DocumentRoot tùy chỉnh và bao gồm đề cập đến việc sử dụng Virtualhost (vhost). OP báo cáo nhận được một lỗi 403 Cấm khi truy cập localhost.

Một bài viết tại coolestguidesontheplanet mô tả cách thiết lập máy chủ ảo trong Apache gây ra "Mất Localhost". Nói cách khác, nguyên nhân cốt lõi của vấn đề OP có thể là việc kích hoạt không hoàn chỉnh các vhost.

"Sau khi [máy chủ ảo] được thiết lập, bạn sẽ mất gốc tài liệu cũ hơn tại / Library / WebServer / Documents hoặc được truy cập trong trình duyệt tại http: // localhost - bạn gặp phải Lỗi 403 bị cấm."

Bài viết tiếp tục giải thích cách sửa lỗi localhost trong môi trường vhost.

Add these lines to file /etc/apache2/extra/httpd-vhosts.conf:

   <VirtualHost *:80> 
   ServerName localhost 
   DocumentRoot /Library/WebServer/Documents/ 
   </VirtualHost>

Nó cũng giải thích cách khắc phục "sự cố quyền với những thứ như cập nhật và xác thực" liên quan đến "sử dụng thư mục Người dùng / tên người dùng / Trang web cho vhosts".

Instead of using the default UID _www, use your own User and Group.

In the terminal, enter command 

    id

Find your UID and GID. 
Update file httpd.conf
In section <IfModule unixd_module>
Change User and Group to your local UID and GID.

https://coolestguidesontheplanet.com/set-virtual-hosts-apache-mac-osx-10-10-yosemite/


Cảm ơn bạn vì câu trả lời. Thật không may, những câu trả lời ngắn như thế này không thực sự cung cấp đủ chi tiết hoặc ngữ cảnh để giúp nhiều người dùng. Thay vào đó, bạn có thể vui lòng chỉnh sửa câu trả lời của mình để bao gồm một bản tóm tắt nội dung bạn đang liên kết đến không? Điều này sẽ làm cho câu trả lời của bạn trở nên khép kín hơn và giúp bảo tồn nó cho những người dùng khác trong tương lai.
Monomeeth

Cảm ơn, Monomeeth. Đánh giá cao các thông tin phản hồi. Cập nhật câu trả lời.
BobK77
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.