Usei o Webmin para criar o seguinte host virtual:
<VirtualHost *:80>
DocumentRoot "/var/www/whatever"
ServerName whatever.ourdomain
<Directory "/var/www/whatever">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
E ao reiniciar o Apache eu recebo
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
O fato é que o diretório EXISTE absolutamente. Estou olhando direto para ele. pwd
mostra que esse é o meu diretório atual, etc. Não é tão difícil escrever isso direito. Não consigo encontrar outros erros ou avisos nos logs httpd. apache: o apache possui o diretório e todos os subdiretórios / arquivos. Não há links simbólicos ou qualquer coisa envolvida aqui. O que estou perdendo ou o que mais devo olhar para determinar por que isso acontece?
O SO é o CentOS 6.0
apache-2.2
centos
Jake Wilson
fonte
fonte
DocumentRoot
, isso pode lhe dar uma ideia do que o servidor da web está vendo. Você também pode querer verificar os outros diretórios ao longo do caminho, embora se é realmente sob/var/www/
aqueles que não deve ser um problemaRespostas:
A primeira coisa que me veio à mente é que o Apache tem permissão para acessar esse diretório?
Além disso, este: /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist
fonte
apache:apache
, no entanto, segui esse link (que está no SO por algum motivo?) E, de fato, o SELinux era o problema. O SELinux causa mais problemas do que faz um bom imo.setenforce 0
corrigida, mas, olhando as permissõesls-laZ
, o link simbólico tem as mesmas permissões que outros arquivos que ele pode acessar, além do chmod. Os arquivos são -rw-r - r-- e o link simbólico é lrwxrwxrwx. Poderia ser esse o motivo pelo qual não funciona com o setenforce 1?Aqui está uma abordagem tutorial do caso SELinux:
Descubra se o SELinux está ativo:
Nesse caso, algumas verificações comparativas podem ajudar. Por exemplo, um servidor tem um DocumentRoot padrão em
/var/www/html
, mas queremos em outro lugar/path/to/document/root
.Se o SELinux não estiver mexendo ativamente com o recurso,
ls -dZ
o diretório mostrará algo como:Por outro lado, se os contextos do SELinux forem aplicados, será
ls -dZ
mais parecido com:Se compararmos com um DocumentRoot de trabalho, seria algo como:
Os argumentos
_r
and_t
relacionam-se aos-r
(--role
e-t
(--type
) aoschcon
. Aqui está uma página de manual cortada:À primeira vista, o seguinte pode parecer funcionar, mas pode não funcionar.
Se o servidor da Web ainda não conseguir ver o DocumentRoot, observe que o contexto importa desde o início até a raiz:
Neste ponto, o servidor da web pode ver o diretório.
Sim, eu aprendi da maneira mais difícil hoje à noite.
NOTA: O uso do chcon conceitualmente tem uma desvantagem conforme a documentação do RedHat ( 5.6.1. Alterações temporárias: chcon ) que afirma:
Use semanage e restorecon para fazer mudanças mais permanentes. Um breve exemplo:
Com relação ao restorecon , observe que -F é necessário para afetar todo o contexto (isto é, usuário e tipo). Além disso, -R significa fazer alterações recursivamente. Os argumentos -v ou -p podem mostrar o progresso de maneira detalhada ou concisa. Use -FRnv para ver o que aconteceria sem realmente fazer alterações.
Depois que a semântica é usada dessa maneira, é possível visualizar as alterações de segurança local com um comando como:
A saída da exportação de semânticas pode ser salva e usada pela importação de semânticas para facilitar a aplicação de um conjunto de alterações em vários sistemas.
NOTA: Esta resposta fornece um contexto de tipo mais básico para um site. A segurança pode ser muito mais granular. Por exemplo, veja uma lista de tipos que podem ser aplicados às páginas do servidor da web com um comando como:
NOTA: Utilitários como semanage e Seinfo não pode ser instalado por padrão. Pelo menos em algumas distribuições, os pacotes necessários podem ter o seguinte nome:
fonte
Parece o SELinux. Sugiro que você trabalhe com ele. Procure no diretório / var / log / audit para confirmar.
Na pior das hipóteses, você sempre pode desativar o selinux, conforme observado anteriormente, mas sugiro que você trabalhe com ele. Por exemplo, se eu criar um diretório para uso com o Apache, ele não terá o contexto correto, conforme observado aqui.
Então, se isso acontecer, eu apenas aplico o contexto de outro diretório, que neste caso, é html:
fonte
Use este comando no root para alterar o contexto de segurança de "httpd_sys_content_t", que permite a execução do Apache.
Use
ls -dZ /var/www/whatever
para visualizar os detalhes das funções de segurançafonte