วิธีแก้ไข 403 ใน Apache OS ในตัว


25

ฉันพยายามที่จะตั้งค่าสภาพแวดล้อมในเครื่องบน MacBook Air 13 "ตัวใหม่ของฉัน: Apache ในตัวกับDocumentRootPHP ของฉันและ MySQL ฉันมักจะอัปเดต/etc/hostsเพื่อใช้งานเว็บไซต์ท้องถิ่นของฉันด้วยความคิดเห็นที่ค่อนข้างดี: local/exampleสำหรับการอ้างอิงฉันมักจะ ตรวจสอบ:

คราวนี้ฉันเพียงแค่การต้องห้าม 403ข้อผิดพลาดทุกครั้งที่ผมตี127.0.0.1, หรือlocalhost localครั้งแรกที่ฉันเห็นเทอร์มินัลที่ทั้ง Apache และ PHP กำลังทำงาน (แม้ว่าฉันจะไม่สามารถดูหน้า PHP); จากนั้นฉันอัปเดตสิทธิ์ทั้งหมดตามสิทธิ์ Apache ; ตอนนี้ฉันหมดหวัง นี่คือการกำหนดค่า Apache ที่เกี่ยวข้อง:

ดูเหมือนว่า Apache จะปฏิเสธฉันไม่ให้เข้าถึงของฉันDocumentRoot(ซึ่งเป็นวิธี~/Sites) เนื่องจาก~/Sitesเป็น symlink ฉันจึงพยายามอัปเดตDocumentRootด้วยพา ธ ต่อไปนี้ (ทั้งหมดชี้ไปที่ไดเรกทอรีเดียวกัน):

  • ~/Sites
  • /Users/joao/Sites
  • /Users/joao/Dropbox/Workflow/Sites( ไดเรกทอรีเดิม )

ยังคงขว้างปา403 ความคิดใด ๆ วิธีการแก้ไข / แก้ปัญหานี้?

อัปเดตด่วน - นี่คือ/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

คำตอบ:


19

ฉันมีนามแฝงที่ระบุในเซิร์ฟเวอร์ OSX ที่ชี้ไปยังไดเรกทอรีผู้ใช้ ฉันใช้เวลานานในขณะที่ chmodding และ messing กับผู้ใช้ _www เพิ่มสิทธิ์การปฏิบัติการซ้ำถอนการติดตั้ง macports และทุกประเภทของสิ่งที่พยายามที่จะให้มันทำงาน ไม่รู้ว่าทำไมมันไม่ทำงาน

ในที่สุดฉันเพิ่งตรวจสอบช่องทำเครื่องหมาย "โฟลเดอร์ที่ใช้ร่วมกัน" ใน Finder สำหรับโฟลเดอร์นั้นและทำงานบนโดเมนที่ระบุด้วย php ที่ใช้งานในแบบที่ฉันต้องการ : / ... มันง่ายมาก


มันไม่ได้ผลสำหรับฉัน ฉันสร้างโฟลเดอร์/Sites(ใน/โฟลเดอร์รูทของฉัน) และวางไฟล์ไว้ที่นั่นโดยตั้งค่าตัวเลือก Alias ​​และ Directory ตามลำดับ ทำงานได้ดี
jpenna

11

ฉันอัปเดตเป็นmacOSS Sierraเวอร์ชั่น10.12

ฉันประสบปัญหาเดียวกันฉันทำสองสิ่งเพื่อแก้ไขอย่างถูกต้อง ต่อไปนี้เป็นแนวทางของฉัน

1)โปรดตรวจสอบไฟล์ " /private/etc/apache2/extra/httpd-userdir.conf " เปลี่ยนแปลง

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

ไปยัง

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

2) ** และแก้ไข " /etc/apache2/httpd.conf " ของคุณ

เปลี่ยนแปลง

Options FollowSymLinks Multiviews

ไปยัง

Options FollowSymLinks Multiviews Indexes

ในที่สุด doc root ของคุณจะมีลักษณะดังนี้

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

3)รีสตาร์ท apache

sudo apachectl restart

คุณยังคงประสบปัญหาอยู่โปรดตรวจสอบวิธีตั้งค่า Apache ใน macOS Sierra 10.12


9

ฉันมักจะแก้ไขปัญหานี้โดยการตั้งค่าผู้ใช้ Apache ให้กับตัวเองในสภาพแวดล้อมท้องถิ่นและในเครื่องที่ผู้ใช้คนเดียวที่ใช้ Apache คือตัวฉัน ใน/private/etc/apache2/httpd.confตั้งค่าUserชื่อผู้ใช้ของคุณจาก_wwwเช่น:

User _www

->

User joao

จากนั้นรีสตาร์ท Apache:

$ sudo apachectl restart

ขั้นตอนเพิ่มเติม:

  1. _wwwหากคุณมีการประชุมที่ใช้งานพวกเขาจะให้ข้อผิดพลาดได้รับอนุญาตเนื่องจากพวกเขาจะยังคงเป็นเจ้าของโดย เป็นเจ้าของพวกเขา:

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

ผลกระทบ:

หลังจากนี้ Apache (และ PHP และคณะ) จะทำงานในฐานะคุณและจะได้รับสิทธิ์ในการอ่าน / เขียนไปยังไฟล์ทั้งหมดที่คุณมีสิทธิ์อ่าน / เขียน แต่เนื่องจากนี่เป็นเพียงสภาพแวดล้อมการพัฒนาในท้องถิ่นนั่นไม่น่าจะมีปัญหาเว้นแต่คุณจะไม่มีกฎในการบล็อก Apache ในไฟร์วอลล์ของคุณและปล่อยให้ไฟล์ที่น่าสงสัยเช่นนักสำรวจไฟล์เปลือกหอยสคริปต์ที่อาจมีช่องโหว่ที่ทำงานภายใต้ Apache ในกรณีนี้ใครก็ตามที่รวมถึงเพื่อนบ้าน WiFi สาธารณะของคุณในร้านกาแฟสามารถเข้ามาhttp://<your IP>และทำสิ่งที่สคริปต์เหล่านั้นปล่อยให้พวกเขาทำ

ในความเป็นจริงคุณควรป้องกันการนี้โดยไม่คำนึงถึงสคริปต์ที่คุณใช้หรือแม้กระทั่งถ้าคุณไม่ได้กำหนดผู้ใช้ Apache localhostให้กับตัวเองตั้งแต่ที่คุณอาจไม่ต้องการให้บุคคลภายนอกสุ่มเพื่อให้สามารถมองเห็นเนื้อหาของคุณ

การป้องกัน:

  1. ทำให้ Apache ฟังกับ localhost เท่านั้น อีกครั้งในhttpd.conf:

    Listen 80
    

    ->

    Listen 127.0.0.1:80
    

    และรีสตาร์ท Apache อีกครั้ง:

    $ sudo apachectl restart
    
  2. ปิดการใช้งาน Apache ในไฟร์วอลล์แอปพลิเคชัน (โปรดทราบว่าคุณอาจปิดการใช้งานแล้วหากคุณคลิกDenyถ้า / เมื่อมันถูกถามในครั้งแรกที่คุณเรียกใช้ Apache):

    1. เปิดSystem Preferences» »Security & PrivacyFirewall
    2. คลิกที่ไอคอนล็อคทางด้านซ้ายล่างและป้อนรหัสผ่านของคุณหากจำเป็น
    3. เปิดไฟร์วอลล์หากปิดใช้งานอยู่
    4. Firewall Optionsคลิก
    5. คลิกที่+ปุ่ม
    6. ตีcmd ⌘+ ⇧ shift+ Gและป้อน/usr/sbin/httpdและคลิกAdd(หากhttpdไม่ปรากฏขึ้นนั้นคุณสามารถมองหามันในขั้วโดยwhich httpd)
    7. ในรายการคลิกและเลือกhttpdBlock incoming connections
    8. OKhit
    9. โหลดไฟร์วอลล์ซ้ำ:

      $ 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. จำกัด PHP ไว้ที่รูทเอกสาร ในphp.ini:

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

    ( /var/tmp/สำหรับเซสชัน)

ใช้โซลูชันทั้งสามเพื่อรักษาความปลอดภัยตัวคุณเองในกรณีที่หนึ่งในนั้นถูกปิดการใช้งานด้วยเหตุผลบางอย่าง

- โปรดทราบว่าเนื่องจากภาษาที่ใช้งานในเครื่องของฉันไม่ใช่ภาษาอังกฤษที่ถูกต้องการใช้ถ้อยคำอาจแตกต่างกันเล็กน้อย (ตัวเลือกเมนูและการใช้ถ้อยคำอาจแตกต่างกันโดยไม่คำนึงถึงภาษาใน OS X เวอร์ชันต่าง ๆ )

- บรรทัดที่ขึ้นต้นด้วย$จำเป็นต้องป้อนในบรรทัดคำสั่ง (เทอร์มินัลหรือ iTerm ฯลฯ ) โดย$ลบออก


5

ฉันเพิ่งแก้ไขปัญหาของฉันโดยการตั้งค่าการอนุญาตไม่เพียง แต่ในDocumentRootไดเรกทอรี แต่ยังรวมถึงไดเรกทอรีหลักทั้งหมด นี่คือวิธีที่ผมทำมัน

(13) การอนุญาตถูกปฏิเสธ

ข้อผิดพลาด 13 หมายถึงปัญหาการอนุญาตระบบไฟล์ นั่นคือ Apache ถูกปฏิเสธการเข้าถึงไฟล์หรือไดเรกทอรีเนื่องจากสิทธิ์ที่ไม่ถูกต้อง โดยทั่วไปแล้วไม่ได้บ่งบอกถึงปัญหาในไฟล์กำหนดค่าของ Apache

ในการให้บริการไฟล์ Apache ต้องได้รับอนุญาตจากระบบปฏิบัติการเพื่อให้สามารถเข้าถึงไฟล์เหล่านั้นได้ โดยเฉพาะอย่างยิ่งผู้ใช้หรือกลุ่มที่ระบุใน httpd.conf จะต้องสามารถอ่านไฟล์ทั้งหมดที่จะให้บริการและค้นหาไดเรกทอรีที่มีไฟล์เหล่านั้นพร้อมกับไดเรกทอรีหลักทั้งหมดจนถึงรากของระบบไฟล์

สิทธิ์ทั่วไปบนระบบเหมือนยูนิกซ์สำหรับทรัพยากรที่ไม่ได้เป็นของผู้ใช้หรือกลุ่มที่ระบุใน httpd.conf จะเป็น 644 -rw-r - r-- สำหรับไฟล์ทั่วไปและ 755 drwxr-xrx สำหรับไดเรกทอรีหรือสคริปต์ CGI คุณอาจต้องตรวจสอบสิทธิ์เพิ่มเติม (เช่นสิทธิ์ SELinux) บนระบบปฏิบัติการที่รองรับ

หากคุณใช้ 2.4 รหัสข้อผิดพลาด AH อาจให้ข้อมูลเพิ่มเติมที่นี่

  • AH00132: การอนุญาตไฟล์ปฏิเสธการเข้าถึงเซิร์ฟเวอร์
  • AH00035: การเข้าถึงถูกปฏิเสธเนื่องจากสิทธิ์ในการค้นหาขาดหายไปในส่วนประกอบของเส้นทางตัวอย่าง

ให้บอกว่าคุณได้รับข้อผิดพลาดการอนุญาตเมื่อเข้าถึงไฟล์ /usr/local/apache2/htdocs/foo/bar.html บนระบบที่เหมือนยูนิกซ์

ก่อนอื่นตรวจสอบการอนุญาตที่มีอยู่ในไฟล์:

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

แก้ไขหากจำเป็น:

chmod 644 bar.html

จากนั้นทำสิ่งเดียวกันสำหรับไดเรกทอรีและแต่ละไดเรกทอรีหลัก (/ 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

ในบางระบบสามารถใช้ยูทิลิตี้ชื่อเพื่อช่วยค้นหาปัญหาสิทธิ์ด้วยการแสดงรายการการอนุญาตตามแต่ละส่วนประกอบของพา ธ :

namei -m /usr/local/apache2/htdocs/foo/bar.html หากระบบของคุณไม่มี namei คุณสามารถใช้ parsepath สามารถรับได้จากที่นี่

หากสิทธิ์มาตรฐานทั้งหมดถูกต้องและคุณยังคงได้รับข้อผิดพลาดการอนุญาตคุณควรตรวจสอบสิทธิ์เพิ่มเติม ตัวอย่างเช่นคุณสามารถใช้คำสั่ง setenforce 0 เพื่อปิด SELinux และตรวจสอบเพื่อดูว่าปัญหาหายไป ถ้าเป็นเช่นนั้น ls -alZ สามารถใช้เพื่อดูสิทธิ์ SELinux และ chcon เพื่อแก้ไข

ในกรณีที่ไม่ค่อยเกิดขึ้นสิ่งนี้อาจเกิดจากปัญหาอื่น ๆ เช่นปัญหาการอนุญาตไฟล์ที่อื่นในไฟล์ apache2.conf ของคุณ ตัวอย่างเช่นคำสั่ง WSGIScriptAlias ​​ไม่จับคู่กับไฟล์จริง ข้อความแสดงข้อผิดพลาดอาจไม่ถูกต้องเกี่ยวกับไฟล์ที่ไม่สามารถอ่านได้

อย่าตั้งค่าไฟล์หรือไดเรกทอรีเป็นโหมด 777 แม้ "เพื่อทดสอบ" แม้ว่า "เป็นเพียงเซิร์ฟเวอร์ทดสอบ" วัตถุประสงค์ของเซิร์ฟเวอร์ทดสอบคือการทำสิ่งที่ถูกต้องในสภาพแวดล้อมที่ปลอดภัยไม่ให้ทำผิด ทั้งหมดนี้จะบอกคุณว่าปัญหาเกิดจากไฟล์ที่มีอยู่จริงหรือไม่

สคริปต์ CGI

แม้ว่าสิทธิ์สคริปต์ CGI อาจดูถูกต้อง แต่ไบนารีจริงที่ระบุใน shebang อาจไม่มีสิทธิ์ที่เหมาะสมในการเรียกใช้ (หรือบางไดเรกทอรีในเส้นทางตรวจสอบกับ namei ตามที่อธิบายไว้ข้างต้น)

(13) การอนุญาตถูกปฏิเสธ: พร็อกซี: HTTP: ความพยายามในการเชื่อมต่อกับ 127.0.0.1:8080 (localhost) ล้มเหลว

ข้อผิดพลาดนี้ไม่เกี่ยวกับการอนุญาตของไฟล์หรืออะไรอย่างนั้น ความจริงแล้วหมายความว่า httpd นั้นถูกปฏิเสธไม่อนุญาตให้เชื่อมต่อกับที่อยู่ IP และพอร์ตนั้น

สาเหตุที่พบบ่อยที่สุดคือ SELinux ไม่อนุญาตให้ httpd ทำการเชื่อมต่อเครือข่าย

ในการแก้ไขปัญหาคุณจะต้องเปลี่ยนค่าบูลีน SELinux (ซึ่งจะคงอยู่โดยอัตโนมัติในการบูตเครื่องใหม่) คุณอาจต้องการเริ่มต้น httpd ใหม่เพื่อรีเซ็ตตัวทำงานของพร็อกซี

# setsebool -P httpd_can_network_connect 1


1
คุณสามารถสรุปประเด็นพื้นฐานในคำตอบของคุณได้หรือไม่? ขอบคุณ!
Matt

2
การอนุญาตให้เข้าถึงไดเรกทอรีหลักทั้งหมดจะเป็นการละเมิดความปลอดภัยอย่างมาก !
Julian F. Weinert

1
คำตอบนี้ไม่มีประโยชน์ วิธีแก้ปัญหาใช้งานได้กับเครื่อง / การกำหนดค่า linux OSX มีโครงสร้างไดเร็กตอรี่ต่างกัน, โดยเฉพาะสำหรับ apache (อยู่ใน / Library / WebServer) วิธีแก้ปัญหาที่ได้รับไม่ใช่สำหรับ OSx, เนื่องจาก apple.stackexchange ทำ
Juan

3

ขั้นตอนต่อไปนี้ใช้ได้กับฉันใน High Sierra ที่ใช้ Apache 2.4

(ขึ้นอยู่กับการสอนที่ยอดเยี่ยมต่อไปนี้: http://www.cgi101.com/book/connect/mac.htmlอัปเดตด้วยขั้นตอนเพิ่มเติมสำหรับความแตกต่างของรุ่น)

  1. ย้ายไฟล์ไปที่:

    /Library/WebServer/CGI-Executables
    
  2. ตรวจสอบว่าไฟล์มีสิทธิ์ดำเนินการ:

    ls -l  /Library/WebServer/CGI-Executables
    

    ถ้าไม่ได้ใช้:

    chmod -x  /Library/WebServer/CGI-Executables/myfile.cgi
    
  3. ยกเลิกหมายเหตุบรรทัดต่อไปนี้ใน /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. เปลี่ยนไดเรกทอรี "/ Library / WebServer / CGI-Executables" stanza เป็น:

    <Directory "/Library/WebServer/CGI-Executables">
     AllowOverride None
     Options ExecCGI
     Require all granted
    </Directory>
    
  5. จากนั้นรีสตาร์ท Apache:

    sudo apachectl -k restart
    

เกือบจะทุกเวอร์ชั่น macOS ใหม่การเปลี่ยนแปลงจะหายไปและคุณจะต้องทำซ้ำงานและทำตามขั้นตอนต่าง ๆ เพื่อแก้ไข เพื่อนที่ดีที่สุดของคุณคือบันทึก Apache ที่อยู่ใน / var / log / apache2 / (/ var / log / apache2 / error_log)


1
ไม่ใช่คำตอบ แต่เป็นการสังเกต # 1 คำสั่งข้างต้น: ย้ายไฟล์ไปที่: ไฟล์อะไร
Pam

0

ฉันใช้ ACL เพื่อตั้งค่าการอนุญาตทำตามคำแนะนำใน " วิธีตั้งค่าการอนุญาตไฟล์และไดเรกทอรีสำหรับ Apache บน Mac OS X " แต่ยังคงได้รับ:

[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

จากนั้นฉันอ่าน " (13) การอนุญาตถูกปฏิเสธ " (เชื่อมโยงกับคำตอบของJoão Ramos ) และลองเพิ่ม "execute" ลงใน ACL ที่ได้ผล


0

รีสตาร์ทคอมพิวเตอร์ของคุณ! สิ่งนี้ใช้ได้สำหรับฉัน

แต่ก่อนอื่นฉันได้เปลี่ยนผู้ใช้ภายใต้ Apache เป็นตัวเอง (จาก _www) เนื่องจากเป็นสภาพแวดล้อมแบบทดสอบในท้องถิ่น ในที่สุดมันก็มีบางอย่างเกี่ยวกับการอนุญาต

จากนั้นรีสตาร์ทเครื่องเช่นเดียวกับ Windows;)


0

OP อธิบายถึงปัญหาที่เกิดขึ้นขณะที่พยายามตั้งค่าสภาพแวดล้อมเว็บเซิร์ฟเวอร์ในเครื่องบน Mac โดยใช้ Apache, PHP และ MySQL ด้วย DocumentRoot ที่กำหนดเองและรวมถึงการกล่าวถึงการใช้ VirtualHost (vhost) รายงาน OP ได้รับข้อผิดพลาดที่ต้องห้าม 403 เมื่อเข้าถึง localhost

บทความที่ coolestguidesontheplanet อธิบายวิธีตั้งค่าโฮสต์เสมือนใน Apache ทำให้ "Losing Localhost" กล่าวอีกนัยหนึ่งสาเหตุของปัญหาของ OP อาจเป็นการเปิดใช้งาน vhosts ที่ไม่สมบูรณ์

"เมื่อตั้งค่า [โฮสต์เสมือน] คุณจะสูญเสียรูทเอกสารเก่าของคุณก่อนหน้านี้ที่ / Library / WebServer / Documents หรือเข้าถึงในเบราว์เซอร์ที่http: // localhost - คุณได้รับข้อผิดพลาดต้องห้าม 403"

บทความอธิบายถึงวิธีการแก้ไข localhost ในสภาพแวดล้อม vhost

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

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

นอกจากนี้ยังอธิบายถึงวิธีการแก้ไข "ปัญหาการอนุญาตเกี่ยวกับสิ่งต่าง ๆ เช่นการปรับปรุงและการรับรองความถูกต้อง" ที่เกี่ยวข้องกับ "การใช้โฟลเดอร์ผู้ใช้ / ชื่อผู้ใช้ / เว็บไซต์สำหรับ 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/


ขอบคุณสำหรับคำตอบ. :) น่าเสียดายที่คำตอบสั้น ๆ เช่นนี้ไม่ได้ให้รายละเอียดหรือบริบทเพียงพอที่จะช่วยเหลือผู้ใช้จำนวนมาก คุณสามารถแก้ไขคำตอบของคุณเพื่อรวมเนื้อหาสรุปที่คุณลิงก์ไปแทนได้หรือไม่ สิ่งนี้จะทำให้คำตอบของคุณมีอยู่ในตัวเองมากขึ้นและช่วยรักษาไว้สำหรับผู้ใช้รายอื่นในอนาคต
Monomeeth

ขอบคุณ Monomeeth ขอบคุณความคิดเห็น อัปเดตคำตอบ
BobK77
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.