Problemas de permissão do Apache LAMP no servidor Ubuntu

4
Eu tenho vasculhado a internet há alguns dias e acho que tentei quase tudo para instalar alguns hosts virtuais no meu servidor Ubuntu, mas tudo que falta chmod 777 no webroot falha.

Eu tenho meu Apache conf padrão apontando para / home / server / public_html com as configurações mostradas abaixo

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /home/server/public_html/
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /home/server/public_html/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from all
</Directory>

</VirtualHost>

Eu criei um host virtual para um projeto no qual estou trabalhando, por exemplo, project.name.co.uk.conf e lá dentro eu tenho o seguinte

<VirtualHost *:80>
    ServerName http://www.local.dirty-briefs.co.uk
    ServerAlias local.project-name.co.uk
    DocumentRoot /home/server/public_html/project-name/
    DirectoryIndex index.php index.html
</VirtualHost>

Eu então executei sudo a2ensite project.name.co.uk.conf . Estou trabalhando em uma máquina windows 7 usando o samba para acessar os arquivos no servidor. Eu adicionei o project.name.co.uk ao meu arquivo hosts do Windows, no entanto, não importa o que eu faço, recebo 403 erros de permissão.

editar

Id do pensamento adiciona a cauda do log de erros do Apache no caso de ser útil

*==> /var/log/apache2/error.log <==
[Sat Jun 11 13:22:23 2011] [error] [client 192.168.0.3] PHP Warning:          require(/home/server/public_html/dirty-briefs/site/protected/config/main.php): failed to open stream: Permission denied in /home/server/public_html/dirty-briefs/framework/base/CApplication.php on line 120
[Sat Jun 11 13:22:23 2011] [error] [client 192.168.0.3] PHP Fatal error:  require(): Failed opening required '/home/server/public_html/dirty-briefs/site/protected/config/main.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/server/public_html/dirty-briefs/framework/base/CApplication.php on line 120*

Também pode valer a pena mencionar que estou trabalhando com o Yii no framework PHP Eu tenho um arquivo .htaccess que mora na pasta do meu site com o seguinte dentro

    # Disable directory browsing
    Options All -Indexes

    # File types
    AddType application/x-font-woff .eot .ttf       # Font-Face


    # URL Rewriting
    <IfModule mod_rewrite.c>
    RewriteEngine On

    # Site Maintenance
    # RewriteCond %{REMOTE_ADDR} !^10\.0\.2\.2
    # RewriteCond %{REQUEST_FILENAME} !-f
    # RewriteRule ^(.*)$ /maintenance.html [L]


    # LOCAL 
    RewriteCond %{SERVER_NAME} ^local.project-name.co.uk
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index-local.php/$1
    # -----

    # PRODUCTION
    RewriteCond %{HTTP_HOST} ^project-name.co.uk
    RewriteRule ^(.*)$ http://www.project-name.co.uk/$1 [R=301,L]

    RewriteCond %{SERVER_NAME} ^www.project-name.co.uk
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /folder/index.php/$1
    # -----
    </IfModule>

Eu segui o erro do Apache e acessei os logs e descobri que estava recebendo erros de perm na importação de arquivos dentro do meu script PHP devido a erros de permissão.

Eu li sobre checar em qual usuário e grupo o Apache está rodando, que são www-data www-data, então acredito que o Apache não tenha permissões permanentes para acessar os arquivos em / home / server / public_html a menos que eu dar a pasta 777 perms que eu não quero, então eu só estou querendo saber se alguém pode identificar o que estou fazendo de errado ou aconselhar sobre qualquer coisa que eu possa tentar fazer isso funcionar

    
por Mike Waites 11.06.2011 / 13:11

4 respostas

2

Este layout de pasta é um pouco confuso. Sua diretiva vhost padrão especifica /home/server/public_html/ como DocumentRoot , mas você especifica uma subpasta dela como a raiz do seu aplicativo. Esta não é uma configuração ideal. Tente mover o site de public_html para sua própria pasta ( /home/server/project ou algo assim) e defina DocumentRoot de acordo.

Depois de movido, você não precisa das permissões 777 para torná-lo acessível, embora precise ser legível por www-data . Experimente:

chmod -R 644 /home/server/project   
find /home/server/project -type d -exec chmod 755 {} \+

Isso fará com que tudo seja legível por todos e todas as pastas sejam percorridas (definir o bit de execução nas pastas faz isso).

Uma outra coisa: ServerName não usa o prefixo http:// . Você deve remover isso da configuração e deixar apenas o nome do domínio.

Reinicie seu apache depois disso e você poderá acessar o site com o nome do host fornecido.

    
por 11.06.2011 / 14:55
1

Você pode dar ao Apache o direito de acessar os arquivos sem defini-los como world-can-do-everything (rwxrwxrwx ou 777), você precisaria apenas dar permissão para ler os arquivos para que o executável PHP possa lê-los . Você pode precisar dar direitos de execução também se o PHP verificar isso. A melhor maneira seria mudar a propriedade com chown www-data:www-data <file> , então você pode dar direitos completos ao Apache e nenhum direito a ninguém (exceto root) com chmod 700 (ou chmod u+rwx <file>; chmod go-rwx <file> se você preferir usar códigos mnemônicos ao invés de bits). baseados em padrões).

Se você tem outros sites em execução a partir da mesma instalação do Apache (e também em execução como www-data ) e deseja mantê-los separados, um site é, até certo ponto, protegido pelos outros, então procure usar suPHP ( conforme fornecido por este pacote no Ubuntu ). Ele é menos eficiente que o mod_php padrão do bog (embora não muito, a menos que você esteja em hardware severamente restrito), mas oferece uma camada extra de proteção entre usuários / sites, dificultando a sua ação (acidental ou não) ou leia as coisas uns dos outros. Cada script é executado por um processo atuando como o usuário que o possui, portanto um arquivo php de propriedade de user1 é executado como user1 e nenhum outro usuário (mesmo www-data ou scripts que geralmente são executados como) precisa ter qualquer acesso a ele. Você pode encontrar outros erros de permissões do suphp até que as coisas sejam configuradas corretamente, já que o padrão é insistir em certas verificações de segurança (como diretórios e scripts que não podem ser gravados pelo mundo) antes de executar qualquer script.

ps. re: require(/home/server/public_html/dirty-briefs/site/protected/config/main.php): failed - café manchado reunião briefing notes, ou outra coisa?!

    
por 11.06.2011 / 15:01
0

Provavelmente, você precisa executar o acesso em /home/server para que o usuário do Apache possa atravessá-lo para ler a pasta public_html (que deve ser de outra legibilidade).

# If not already drwx--x--x...
chmod o+x /home/server
    
por 11.06.2011 / 14:48
-1

É provavelmente um problema de seLinux.

EDITAR:

Para ter certeza, você pode configurar o seLinux para o modo permissivo e tentar novamente. Se você estivesse trabalhando no RedHat eu recomendaria usar o system-config-selinux mas eu não conheço uma ferramenta para isso no Ubuntu

    
por 11.06.2011 / 14:49