Mac OS X'te yerleşik Apache'de 403 nasıl düzeltilir?


25

Yeni MacBook Air 13'ümde yerel bir ortam kurmaya çalışıyorum ": Apache'de kendi DocumentRootPHP ve MySQL'im var. Genellikle /etc/hostsyerel web sitelerimi oldukça kalıcı bir bağlantı ile çalıştırmak için güncelleme yapıyorum local/example. Kontrol:

Bu sefer ben sadece alıyorum 403 Forbidden ben her vuruşunda hatası 127.0.0.1, localhostya da local. İlk önce terminalden hem Apache'nin hem de PHP'nin çalıştığını gördüm (PHP sayfalarını göremesem bile); sonra tüm izinleri Apache izinlerine göre güncelledim ; şimdi sadece çaresizim. İlgili Apache yapılandırmaları:

Görünüşe göre Apache bir şekilde benim erişimimi engelliyor DocumentRoot(bu arada ~/Sites). Çünkü ~/Sitesaslında bir sembolik bağdır, o zaman güncelleme çalıştı DocumentRootAşağıdaki yollarda (hepsi aynı dizine işaret) ile:

  • ~/Sites
  • /Users/joao/Sites
  • /Users/joao/Dropbox/Workflow/Sites( orijinal dizin)

Hala 403 atıyor . Bunu düzeltmek / hata ayıklamak için herhangi bir fikir?

Hızlı güncelleme - işte /var/log/apache2/joao.pt-error_loggörünümlerim şöyle:

[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

Yanıtlar:


19

OSX sunucusunda belirtilen bir kullanıcı dizinine işaret eden bir diğer adı var. _Ww kullanıcısı ile uğraşırken ve onunla uğraşırken, tekrar tekrar çalıştırılabilir izinler ekleyerek, macport'ları ve bunun işe yaramasını sağlayan her türlü şeyi kaldırırken uzun zaman geçirdim. Neden işe yaramadığı hakkında hiçbir fikrim yok.

Sonunda, bu klasör için Finder'da "paylaşılan klasör" onay kutusunu kontrol ettim ve belirtilen etki alanında php etkinken istediğim şekilde çalıştı . : / ... bu yüzden kolaydı.


Benim için işe yaramadı. Bir klasör /Sites(kök /klasörümde) yarattım ve dosyalarımı Alias ​​ve Directory seçeneklerini buna göre yapılandırarak oraya koydum. İyi çalıştı.
jpenna

11

Ben güncelleme macOSS Sierra , Version 10.12

Aynı sorunla karşı karşıyayım, düzeltmek için iki şey yaptım. Benim yaklaşımlarım aşağıda.

1) Lütfen " /private/etc/apache2/extra/httpd-userdir.conf " dosyasını kontrol edin . Değişiklik

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

için

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

2) ** Ve " /etc/apache2/httpd.conf" dosyasını düzenleyin

değişiklik

Options FollowSymLinks Multiviews

için

Options FollowSymLinks Multiviews Indexes

Sonunda doktor kök aşağıdaki gibi görünecek

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

3) apache'yi yeniden başlatın

sudo apachectl restart

Yine de sorunla karşı karşıyaysanız, nazikçe kontrol edin MacOS'ta Apache Nasıl Kurulur Sierra 10.12


9

Bunu genellikle Apache kullanıcısını yerel ortamlarda ve Apache'yi kullanan tek kullanıcının benim olduğu makinelerde kendime ayarlayarak düzeltirim. İçinde /private/etc/apache2/httpd.conf, Userkullanıcı adınıza ayarlayın _www, örneğin:

User _www

->

User joao

Ve sonra Apache'yi yeniden başlatın:

$ sudo apachectl restart

Ek adımlar:

  1. Etkin oturumlarınız varsa, hala sahip oldukları için izin hataları verecektir _www. Onlara sahip olun:

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

etkileri:

Bundan sonra, Apache (ve PHP ve ark.) Sizin gibi çalışacak ve okuma / yazma iznine sahip olduğunuz tüm dosyalara okuma / yazma izni alacaktır. Ancak bu sadece yerel bir geliştirme ortamı olduğundan, güvenlik duvarınızda Apache'yi engellemek için herhangi bir kuralınız yoksa ve dosya kaşifleri, mermiler, komut dosyaları gibi Apache'de çalışan güvenlik açıklarını içerebilecek şüpheli dosyalar olmadan izin vermeyin; Bu durumda bir kafede halka açık wifi komşunuz da dahil olmak üzere herkes girebilir http://<your IP>ve bu komut dosyalarının yapmasına izin verdiği her şeyi yapabilir.

Aslında, çalıştırdığınız komut dosyalarından bağımsız olarak veya Apache kullanıcısını kendinize ayarlamamış olsanız bile, muhtemelen rastgele yabancıların içeriğini görmesini istemediğinizden bunu engellemelisiniz localhost.

önleme:

  1. Apache'nin yalnızca yerel ana bilgisayarı dinlemesini sağlayın. Yine, içinde httpd.conf:

    Listen 80
    

    ->

    Listen 127.0.0.1:80
    

    Ve Apache'yi yeniden başlatın:

    $ sudo apachectl restart
    
  2. Uygulama güvenlik duvarında Apache'yi devre dışı bırakın (Apache'yi Denyilk kez çalıştırdığınızda istendiğinde / tıkladığında tıklatırsanız, zaten devre dışı bırakmış olabileceğinizi unutmayın ):

    1. System Preferences» Security & Privacy» Öğesini açın Firewall.
    2. Sol alt köşedeki kilit simgesine tıklayın ve gerekirse şifrenizi girin.
    3. Devre dışıysa güvenlik duvarını açın.
    4. Tıklayın Firewall Options.
    5. Düğmesine +tıklayın.
    6. cmd ⌘+ ⇧ shift+ Tuşlarına basın Gve girin /usr/sbin/httpdve tıklayın Add( httpdOrada görünmüyorsa, terminalde bunu arayabilirsiniz. which httpd)
    7. Listede tıklayın httpdve seçin Block incoming connections.
    8. Hit OK.
    9. Güvenlik duvarını tekrar yükle:

      $ 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'yi belge köküyle sınırlandırın. İçinde php.ini:

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

    ( /var/tmp/oturumlar için)

Herhangi bir nedenle devre dışı kalması durumunda kendinizi güvence altına almak için üç çözümü de kullanın.

- Makinemdeki aktif dilin İngilizce doğru olmadığını bildiğinden, ifadelerin biraz farklı olabileceğini unutmayın (Menü seçenekleri ve ifadeler, çeşitli OS X sürümlerindeki dilden bağımsız olarak farklı olabilir).

- $Komut satırında (Terminal veya iTerm vb.) $Kaldırılmış halde girilmesi gereken satırlar .


5

Sorunumu sadece DocumentRootdizine değil aynı zamanda tüm ana dizinlerine de izin vererek ayarlamıştım. Bu nasıl yaptığımı .

(13) İzin Reddedildi

Hata 13, dosya sistemi izinleri sorununu gösterir. Yani, Apache'nin hatalı izinler nedeniyle bir dosyaya veya dizine erişimi reddedildi. Genel olarak, Apache yapılandırma dosyalarında bir sorun olduğu anlamına gelmez.

Dosya sunmak için Apache'nin bu dosyalara erişmesi için işletim sistemi tarafından verilen uygun izne sahip olması gerekir. Özellikle, httpd.conf dosyasında belirtilen Kullanıcı veya Grup, sunulacak tüm dosyaları okuyabilmeli ve bu dosyaları içeren dizinde dosya sisteminin köküne kadar olan tüm üst dizinleri arayabilmelidir.

Httpd.conf dosyasında belirtilen Kullanıcı veya Grup'a ait olmayan kaynaklar için unix benzeri bir sistemdeki tipik izinler, normal dosyalar için 644 -rw-r - r-- ve dizinler veya CGI komut dosyaları için 755 drwxr-xrx olacaktır. Ayrıca, onları destekleyen işletim sistemlerinde uzatılmış izinleri (SELinux izinleri gibi) kontrol etmeniz gerekebilir.

2.4 çalıştırıyorsanız, AH hata kodu size daha fazla bilgi verebilir.

  • AH00132: dosya izinleri sunucu erişimini reddediyor
  • AH00035: yolun bir bileşeninde arama izinleri eksik olduğundan erişim reddedildi

Unix benzeri bir sistemde /usr/local/apache2/htdocs/foo/bar.html dosyasına erişirken İzin Engellendi hatası aldığınızı varsayalım.

İlk önce dosyadaki mevcut izinleri kontrol edin:

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

Gerekirse bunları düzeltin:

chmod 644 bar.html

Ardından dizin ve her üst dizin için aynısını yapın (/ 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

Bazı sistemlerde, yardımcı program adı, yolun her bileşeni boyunca izinleri listeleyerek izin sorunlarını bulmanıza yardımcı olmak için kullanılabilir:

namei -m /usr/local/apache2/htdocs/foo/bar.html Sisteminizde namei yoksa, parsepath kullanabilirsiniz. Buradan elde edilebilir.

Tüm standart izinler doğruysa ve hala İzin Reddedildi hatası alıyorsanız, uzatılmış izinleri kontrol etmeniz gerekir. Örneğin SELinux'u kapatmak için setenforce 0 komutunu kullanabilir ve sorunun çözülüp çözülmediğini kontrol edebilirsiniz. Eğer öyleyse, ls -alZ SELinux iznini ve bunları düzeltmek için chcon'u görüntülemek için kullanılabilir.

Nadir durumlarda, bunun nedeni apache2.conf dosyanızdaki herhangi bir yerdeki dosya izinleri gibi başka sorunlardan kaynaklanabilir. Örneğin, bir WSGIScriptAlias ​​yönergesi gerçek bir dosyayla eşleşmiyor. Hata mesajı, hangi dosyanın okunamadığı konusunda doğru olmayabilir.

"Sadece bir test sunucusu" olsa bile, dosyaları veya dizinleri "sadece test etmek" için bile 777 moduna ayarlamayın. Bir test sunucusunun amacı, güvenli bir ortamda işleri doğru yapmak, yanlış yapmaktan kaçınmamaktır. Tek söyleyeceğim, sorunun gerçekten var olan dosyalarda olup olmadığıdır.

CGI komut dosyaları

CGI betiği izni doğru görünse de, shebang'da belirtilen gerçek ikili çalıştırılmak için uygun izinlere sahip olmayabilir. (Ya da yolunda bir dizin var, yukarıda açıklandığı gibi namei ile kontrol edin.)

(13) İzin reddedildi: proxy: HTTP: 127.0.0.1:8080 (localhost) 'a bağlanma denemesi başarısız oldu

Bu hata gerçekten dosya izinleri veya buna benzer bir şey değil. Aslında, httpd'nin bu IP adresine ve bağlantı noktasına bağlanmasına izin verilmemesi anlamına geliyor.

Bunun en yaygın nedeni SELinux'un httpd'nin ağ bağlantıları kurmasına izin vermemesidir.

Bunu çözmek için, bir SELinux boolean değeri değiştirmelisiniz (otomatik olarak yeniden başlatmalar arasında devam eder). Kesin olarak gerekmese de, proxy çalışanını sıfırlamak için httpd'yi yeniden başlatmak isteyebilirsiniz.

# setsebool -P httpd_can_network_connect 1


1
Cevabınızdaki temel noktaları özetler misiniz? Teşekkürler!
Matt,

2
Tüm ana dizinine erişim verilmesi çok büyük bir güvenlik ihlali olacaktır!
Julian F. Weinert,

1
Bu cevap yararlı değil. Çözüm, Linux makineleri / yapılandırmaları için çalışır. OSX farklı bir dizin yapısına sahiptir, özellikle apache için (/ Library / WebServer içinde bulunur) verilen çözüm, apple.stackexchange'in yaptığı gibi OSx için değildir.
Juan

3

Aşağıdaki adımlar benim için Apache 2.4 çalıştıran High Sierra'da çalıştı.

(Aşağıdaki mükemmel eğiticiye dayanarak: http://www.cgi101.com/book/connect/mac.html , sürüm farklılıkları için ek adımlarla güncellendi)

  1. Dosyayı şuraya taşı:

    /Library/WebServer/CGI-Executables
    
  2. Dosyanın yürütme izinleri olduğunu doğrulayın:

    ls -l  /Library/WebServer/CGI-Executables
    

    Kullanmazsanız:

    chmod -x  /Library/WebServer/CGI-Executables/myfile.cgi
    
  3. Aşağıdaki satırları /etc/apache2/httpd.conf içinde kaldırın

    AddHandler cgi-script .cgi .pl
    
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
    
    LoadModule cgi_module libexec/apache2/mod_cgi.so
    
  4. Ayrıca "/ Library / WebServer / CGI-Executables" stanza dizinini şu şekilde değiştirin:

    <Directory "/Library/WebServer/CGI-Executables">
     AllowOverride None
     Options ExecCGI
     Require all granted
    </Directory>
    
  5. Ardından Apache'yi yeniden başlatın:

    sudo apachectl -k restart
    

Neredeyse her yeni macOS sürümünde, değişiklikler kaybolacak ve işi yeniden yapmanız ve hatta düzeltmek için farklı adımlar atmanız gerekecek. En yakın arkadaşınız / var / log / apache2 / (/ var / log / apache2 / error_log) içinde bulunan Apache günlükleridir.


1
Cevap değil, gözlem. Yukarıdaki 1. talimat: Dosyayı şu noktaya taşı: Hangi dosya?
Pam

0

" Mac OS X'te Apache İçin Dosya ve Dizin İzinlerini Ayarlama " bölümündeki talimatları izleyerek izinleri ayarlamak için ACL'leri kullanıyordum , ancak alıyorum:

[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

Sonra " (13) İzin Reddedildi " ( João Ramos'un cevabına bağlı olarak ) okudum ve ACL'ye "yürüt" eklemeyi denedim. İşe yaradı.


0

Bilgisayarı yeniden başlatın! Bu benim için çalıştı.

Ama ilk yerel bir / test ortamı olduğundan her şeyden ben, (_www itibaren) kendime apache altında kullanıcıyı değişmişti. Nihayetinde bunun izinlerle ilgisi var.

Ardından, Windows gibi makineyi yeniden başlatın;).


0

OP, bir Mac üzerinde yerel bir web sunucusu ortamı kurmaya çalışırken, Apache, PHP ve MySQL kullanarak, özel bir DocumentRoot ile ve VirtualHost (vhost) kullanma bahsini içeren bir sorunu açıklar. OP, localhost'a erişilirken 403 Yasaklanmış hata aldığını bildirir.

Coolestguidesontheplanet'teki bir makale, Apache'de sanal konakların nasıl ayarlandığını "Localhost Kaybetmek" e neden olduğunu açıklıyor. Başka bir deyişle, OP'nin sorununun temel nedeni, vhostların eksik kılınması olabilir.

"[Sanal ana bilgisayarlar] ayarlandıktan sonra, daha önce / Library / WebServer / Documents adresinden eski belge kökünü kaybeder veya http: // localhost adresindeki tarayıcıda erişilir - bir 403 Yasak Hata alırsınız."

Makale, bir yerel ortamda bir vhost ortamında nasıl düzeltileceğini açıklamaya devam ediyor.

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

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

Aynı zamanda "vhost'lar için Kullanıcılar / kullanıcı adı / Siteler klasörünü kullanma" ile ilişkili "güncellemeler ve kimlik doğrulama gibi şeylerle ilgili izin sorunlarının" nasıl çözüleceğini de açıklar.

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/


Cevabınız için teşekkür ederim. :) Ne yazık ki, bu gibi kısa cevaplar pek çok kullanıcıya yardımcı olmak için gerçekten yeterli ayrıntı ya da içerik sağlamıyor. Bunun yerine, bağladığınız içeriğin bir özetini eklemek için lütfen cevabınızı düzenler misiniz? Bu, cevabınızı daha fazla bağımsız hale getirecek ve gelecekte diğer kullanıcılar için korumaya yardımcı olacaktır.
Monomeeth

Teşekkürler Monomeeth. Geri bildirimi takdir edin. Cevap güncellendi.
BobK77
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.