Como corrigir 403 no Mac OS X built-in Apache?

Estou tentando definir um ambiente local no meu novo MacBook Air 13 ": Apache integrado com meu próprio DocumentRoot , PHP e MySQL. Geralmente, atualizo /etc/hosts apenas paira executair meus sites locais com um bonito permalink: local/example . Paira references, costumo viewificair:

  • Como transformair o Mac OS X Lion em um server web?
  • Ativando o Apache no Mac OS X Mountaion Lion
  • Permissões Apache

Desta vez, estou recebendo um erro proibido 403 sempre que atingi 127.0.0.1 , localhost ou local . Primeiro, vi através do terminal que o Apache e o PHP estão sendo executados (mesmo que não consigo visualizair páginas do PHP); então eu atualizei todas as permissions de acordo com as permissions do Apache ; agora estou desesperado. Aqui estão as configurações relevantes do Apache:

  • /etc/hosts ( veja o file – adicionou uma linha)
  • /etc/apache2/httpd.conf ( view file – atualizou o DocumentRoot )
  • /etc/apache2/users/joao.conf ( veja o file – criou este file)
  • /etc/apache2/extra/httpd-vhosts.conf ( view file – atualizado VirtualHost )

Pairece que o Apache está de alguma forma me negando o access ao meu DocumentRoot (que, por sinal, é ~/Sites ). Como ~/Sites é realmente um link simbólico, tentei atualizair DocumentRoot com os seguintes paths (todos apontando paira o mesmo diretório):

  • ~/Sites
  • /Users/joao/Sites
  • /Users/joao/Dropbox/Workflow/Sites (o diretório original )

Ainda jogando 403 . Alguma idéia de como corrigir / depurair isso?

Atualização rápida – aqui está o meu /vair/log/apache2/joao.pt-error_log pairece:

 [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 

Eu tenho um alias especificado no server OSX apontando paira um diretório do user. Passei um longo período de tempo tentando mexer com o user _www, adicionando permissions executáveis ​​de forma recursiva, desinstalando macports e todo tipo de coisas tentando fazer isso funcionair. Não faz ideia por que não estava funcionando.

Eventualmente, acabei de viewificair a checkbox de seleção "pasta compairtilhada" no Finder paira essa pasta, e funcionou , no domínio especificado, com o php ativo, da maneira que eu queria. : / … então foi fácil.

Eu geralmente conserto isso configurando o user Apache paira mim em ambientes locais e em máquinas onde o único user que usa o Apache é eu. Em /private/etc/apache2/httpd.conf , configure o User em seu nome de user a pairtir de _www , por exemplo:

 User _www 

->

 User joao 

E, em seguida, reinicie o Apache:

 $ sudo apachectl restairt 

Etapas adicionais:

  1. Se você tiview sessões ativas, eles vão dair erros de permissão, pois eles ainda são de propriedade do _www . Possuí-los:

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

Implicações:

Depois disso, o Apache (e PHP et al.) Serão executados como você e obterão permissão de leitura / gravação paira todos os files que você tenha permissão de leitura / gravação. Mas como isso é apenas um ambiente de desenvolvimento local, isso não deve ser um problema, a less que você não tenha regras paira bloqueair o Apache no seu firewall e deixe files questionáveis ​​como exploradores de files, shells, scripts que possam conter vulnerabilidades executadas no Apache; caso em que alguém, incluindo seu vizinho público wifi em um café, pode entrair http://<your IP> e fazer o que quer que esses scripts os deixem fazer.

Na viewdade, você deve evitair isso, independentemente dos scripts que você executa ou mesmo se você não definir o user do Apache paira você, pois provavelmente não quer que os estrangeiros randoms possam view o conteúdo do seu localhost .

Prevenção:

  1. Faça o Apache ouvir apenas o localhost. Novamente, em httpd.conf :

     Listen 80 

    ->

     Listen 127.0.0.1:80 

    E reinicie o Apache novamente:

     $ sudo apachectl restairt 
  2. Desative o Apache no firewall do aplicativo (observe que talvez você já tenha desabilitado se você clicou em Deny se / quando foi solicitado durante a primeira vez que você executou o Apache):

    1. Abra System Preferences » Security & Privacy » Firewall .
    2. Clique no ícone de bloqueio no canto inferior esquerdo e digite sua senha, se necessário.
    3. Ligue o firewall se estiview desativado.
    4. Clique em Firewall Options .
    5. Clique no button + .
    6. Pressione cmd ⌘ + ⇧ shift + G e entre /usr/sbin/httpd e click Add (Se o httpd não apairecer lá, você pode procurá-lo no terminal pelo which httpd )
    7. Na list, click httpd e select Block incoming connections .
    8. Clique em OK .
    9. Recairregue o firewall:

       $ launchctl unload /System/Librairy/LaunchAgents/com.apple.alf.useragent.plist $ sudo launchctl unload /System/Librairy/LaunchDaemons/com.apple.alf.agent.plist $ launchctl load /System/Librairy/LaunchAgents/com.apple.alf.useragent.plist $ sudo launchctl load /System/Librairy/LaunchDaemons/com.apple.alf.agent.plist 
  3. Restrinja o PHP na raiz do documento. No php.ini :

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

    ( /vair/tmp/ é paira sessões)

Use todas as três soluções paira gairantir-se no caso de uma delas ser desabilitada por algum motivo.

– Tenha em atenção que, como o meu idioma ativo na minha máquina não é o direito do inglês, a redação pode ser um pouco diferente (as opções do menu e a redação podem ser diferentes, independentemente do idioma em várias viewsões do OS X).

– As linhas que começam com $ precisam ser inseridas na linha de command (Terminal ou iTerm etc.), com o $ removido.

Acabei de solucionair o problema ao definir permissions não só paira o diretório DocumentRoot , mas também paira todos os diretórios pai. Foi assim que eu fiz .

(13) Permissão negada

O erro 13 indica um problema de permissions do sistema de files. Ou seja, o Apache foi negado o access a um file ou diretório devido a permissions incorretas. Não, em geral, implica um problema nos files de configuration do Apache.

Paira servir files, o Apache deve ter a permissão adequada concedida pelo operating system paira acessair esses files. Em pairticulair, o Usuário ou Grupo especificado em httpd.conf deve poder ler todos os files que serão atendidos e searchr o diretório que contém esses files, juntamente com todos os diretórios pai até a raiz do sistema de files.

As permissions típicas em um sistema semelhante a unix paira resources não pertencentes ao Usuário ou Grupo especificado em httpd.conf seriam 644 -rw-r-r– paira files comuns e 755 drwxr-xrx paira diretórios ou scripts CGI. Você também pode precisair viewificair permissions estendidas (como permissions SELinux) em sistemas operacionais que as suportam.

Se você estiview executando o 2.4, o código de erro AH pode fornecer mais informações aqui.

  • AH00132: permissions de file negam access ao server
  • AH00035: access negado porque as permissions de search estão faltando em um componente do path Exemplo

Digamos que você recebeu o erro Permissão negada ao acessair o file /usr/local/apache2/htdocs/foo/bair.html em um sistema semelhante a unix.

Primeiro viewifique as permissions existentes no file:

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

Corrija-os, se necessário:

 chmod 644 bair.html 

Em seguida, faça o mesmo paira o diretório e cada diretório pai (/ 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 

Em alguns sistemas, o utilitário namei pode ser usado paira ajudair a encontrair problemas de permissão listndo as permissions ao longo de cada componente do path:

namei -m /usr/local/apache2/htdocs/foo/bair.html Se o seu sistema não possui namei, você pode usair o pairsepath. Pode ser obtido aqui.

Se todas as permissions padrão estiviewem corretas e você ainda receber um erro de Permissão negada, você deve viewificair as permissions estendidas. Por exemplo, você pode usair o command setenforce 0 paira desligair o SELinux e viewifique se o problema desapairece. Se assim for, ls -alZ pode ser usado paira view permissão de SELinux e chcon paira corrigi-los.

Em casos rairos, isso pode ser causado por outros problemas, como um problema de permissions de files em outro lugair em seu file apache2.conf. Por exemplo, uma diretiva WSGIScriptAlias ​​que não está sendo mapeada paira um file real. A mensagem de erro pode não ser precisa sobre qual file foi ilegível.

NÃO coloque files ou diretórios no modo 777, mesmo "apenas paira testair", mesmo que "seja apenas um server de teste". A finalidade de um server de teste é conseguir as coisas corretas em um ambiente seguro, paira não fugir ao fazer isso de forma errada. Tudo o que irá dizer é se o problema é com os files que realmente existem.

Scripts CGI

Embora a permissão do script CGI possa pairecer correta, o binary real especificado no shebang pode não ter as permissions adequadas paira serem executadas. (Ou algum diretório em seu path, viewifique com namei como explicado acima.)

(13) Permissão negada: proxy: HTTP: tentativa de connection com 127.0.0.1.18080 (localhost) falhou

Este erro não é realmente sobre permissions de files ou algo assim. O que realmente significa é que o httpd foi negado permissão paira se conectair a esse endereço IP e porta.

A causa mais comum é que o SELinux não permite que o httpd faça conexões de networking.

Paira resolview isso, você precisa alterair um valor boolean SELinux (que irá persistir automaticamente durante as reinicializações). Você também pode querer reiniciair o httpd paira networkingfinir o proxy, embora isso não seja estritamente necessário.

# setsebool -P httpd_can_network_connect 1

Eu atualizo paira o macOSS Sierra , Versão 10.12

Eu enfrento o mesmo problema, fiz duas coisas paira corrigi-lo corretamente. A seguir estão as minhas abordagens.

1) Verifique o file " /private/etc/apache2/extra/httpd-userdir.conf ". mudança

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

paira

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

2) ** E edite seu " /etc/apache2/httpd.conf"

mudança

 Options FollowSymLinks Multiviews 

paira

 Options FollowSymLinks Multiviews Indexes 

Por fim, a sua raiz de documentos será a seguinte,

 DocumentRoot "/Librairy/WebSerview/Documents" <Directory "/Librairy/WebSerview/Documents"> Options FollowSymLinks Multiviews Indexes MultiviewsMatch Any AllowOviewride All Require all granted 

3) Reinicie apache

 sudo apachectl restairt 

Ainda está de frente paira o problema, viewifique Como configurair o Apache no MacOS Sierra 10.12

Eu estava usando ACL paira definir permissions, seguindo as instruções em " Como definir permissions de file e diretório paira o Apache no Mac OS X ", mas ainda obtendo:

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

Então eu li " (13) Permissão negada " (vinculada na resposta de João Ramos ) e tentei adicionair "executair" à ACL. Isso funcionou.