ATUALIZADO PARA MAIS CLARIDADE:
De acordo com http://expressionengine.com/user_guide/installation/installation.html , ele diz:
Para a maioria dos hosts Unix, o seguinte é típico, mas você pode verificar com seu host se permissões mais restritivas podem ser usadas para permitir que o PHP grave em arquivos (666) e pastas (777) . Nos servidores Windows, o seguinte não se aplicará, mas você precisará garantir que os arquivos e pastas sejam graváveis pelo ExpressionEngine. Pode ser necessário entrar em contato com seu host para isso.
Não tenho certeza do que isso significa. Posso alterar os arquivos e pastas específicos para 666 e 777, respectivamente, onde sou o chown'er, mas parece que eu preciso permitir que o PHP faça isso também?
PERGUNTA ORIGINAL:
Eu preciso garantir que o PHP possa gravar em arquivos específicos (666) e pastas (777).
Como eu faço isso?
fonte
Respostas:
Completarei as respostas de rahmu e MV com uma solução técnica. Tudo o que se segue é válido apenas para sistemas do tipo UNIX.
Role a seção chmod / chown para obter um exemplo usando ACLs - uma ferramenta mais poderosa que os modos de arquivo UNIX.
Localizando o Nome de Usuário do Servidor da Web
Primeiro, você precisará saber o nome de usuário sob o qual o servidor da web é executado. Se você estiver usando Apache, pode ser
apache
ouhttpd
,www-data
etc. Na maioria Debian-like sistemas, Apache éwww-data
. Para nginx, geralmente, é tambémwww-data
.Para conferir, tente:
Certifique-se de que o nome de usuário que esse comando retorne seja coerente (por exemplo, eu uso o nginx 99% do tempo, mas esse comando retorna
tomcat7
, um servidor da Web Java que instalei uma vez) .Conceder permissões ao servidor da Web: usando
chmod
echown
Fazer
chmod
666 ou 777 (a solução ideal para esse tipo de problemas em documentações / tutoriais ruins) pode fazer magicamente as coisas funcionarem, mas é inseguro. A concessão de permissões 666 ou 777 dará acesso a "outros". Portanto, não apenas o Apache, mas tambémgrandmother
ensa
(desde que essas contas de usuário existam na sua máquina - mas na verdade não, evite fazer isso, a menos que seja apenas para teste / solução de problemas).É melhor ser mais específico e conceder permissões apenas para você e o Apache. Altere o grupo dos seus arquivos para fornecer o controle total dos arquivos no servidor da web. Para fazer isso, altere o proprietário recursivamente:
Mas o mais provável é que você queira manter acesso total aos seus arquivos alterando apenas o grupo:
Em seguida, faça o apropriado
chmod
para conceder ao grupowww-data
as mesmas permissões que você. Por exemplo, se o modo atual for 640 (6 para você, 4 para www-data, 0 para outros, traduzindo para -rw-r -----) , configure-o para 660 (6 para você, 6 para www- dados, 0 para outros, traduzindo para -rw-rw ----) . Veja a resposta de rahmu para saber mais sobre os modos de arquivo, é um mecanismo antigo, porém elegante.Para evitar manipular números misteriosos
chmod
, você também pode usar esta sintaxe:Significa "para o grupo (
g
), adicione (+
) permissões de leitura e gravação (rw
) na pastayour/folder/
, recursivamente (-R
)".Em 90% dos casos, isso deve ser suficiente.
Meu método preferido: usando ACLs (lista de controle de acesso)
Às vezes, a primeira solução não é suficiente. Vou usar o exemplo do Symfony Framework que registra e armazena em cache muitos dados. Portanto, ele precisa de acesso de gravação à pasta apropriada.
E o método
chmod
/chown
pode não ser suficiente, quando você estiver usando em paralelo o Symfony Console na CLI (na minha conta de usuário) e a Web (usuário do servidor da web). Isso causa muitos problemas porque o Symfony está constantemente modificando as permissões.Nesse caso, usaremos a ACL (Lista de controle de acesso), que é uma maneira mais avançada de gerenciar permissões em muitos sistemas UNIX.
Aqui estão os comandos fornecidos pela documentação oficial do Symfony ( altere
app/cache
e de acordoapp/logs
com as suas necessidades ):Em um sistema que suporta
chmod +a
(ie. Não Debian / Ubuntu)Em um sistema que não suporta
chmod +a
(o mais comum)Você precisará da
setfacl
ferramenta; talvez ele esteja instalado no seu sistema por padrão, então tentesetfacl -v
ver se o comando está disponível.Se o comando não estiver disponível e você estiver usando o Ubuntu 14.04+, basta instalar a ferramenta:
Caso contrário, siga a documentação do sistema operacional, pois pode ser necessário alterar a forma como sua partição é montada ( documentação do Ubuntu aqui ).
E aí estamos nós:
Eu nunca tive problemas com esse método, satisfeito ou com seu dinheiro de volta.
fonte
Não importa quem é o proprietário dos arquivos, 666 permissões e 777 seriam suficientes: o último dígito garante que todos os usuários do sistema tenham acesso. Embora essa seja a maneira mais fácil de fazer isso, definitivamente não é a mais segura por esse motivo exato.
Uma maneira melhor de fazer isso
A primeira coisa que você precisa entender é como as permissões do Unix funcionam . No interesse de entender a resposta que eu dei neste link, observe que as permissões podem ser traduzidas para números:
---
--x
-w-
-wx
r--
r-x
rw-
rwx
A
chmod 666
é equivalente a alterar as permissões pararw-rw-rw
.Em seguida, você precisa descobrir qual é o usuário que está executando o script PHP. Normalmente, esse seria o usuário executando seu servidor da web. Aqui está um exemplo de como fazer isso (você pode substituir o Apache pelo nome do seu servidor da web).
Depois de saber qual é o usuário que está executando os scripts e qual é o proprietário dos arquivos mencionados, é sua responsabilidade definir as permissões apropriadas. Lembre-se de que conceder acesso de gravação (mesmo leitura) a todos os usuários do sistema pode ser potencialmente desastroso.
fonte
O Expression Engine é como muitos outros aplicativos da web PHP que precisam de acesso de leitura + gravação a alguns arquivos e diretórios. Por exemplo, o EE requer acesso de gravação aos arquivos config.php e database.php e acesso de gravação aos diretórios de upload de arquivos.
O que a documentação está declarando é que, como a maioria dos servidores executa PHP como mod_php (e, portanto, com as permissões do servidor da Web), e como você provavelmente fará o upload de seus arquivos com FTP (ou similar) usando seu próprio usuário, esses arquivos e os diretórios precisam receber permissões 666 (todos podem ler e escrever) e 777 (todos podem ler, escrever e navegar).
Essa não é a maneira mais segura, mas certamente é a mais fácil, especialmente se você estiver usando um serviço de hospedagem.
No entanto, conforme as instruções do EE, pergunte ao seu provedor de hospedagem, porque alguns não usam o mod_php, mas um fastcgi, suphp ou versão diferente. Esses servidores executam o PHP como seu próprio usuário; portanto, todos os arquivos que você carrega já são legíveis e graváveis pelo PHP e por qualquer arquivo criado pelos scripts EE. Nesse caso, os arquivos e diretórios acessados pelo PHP precisariam ter acesso 600 e 700. Outros arquivos a serem acessados diretamente pelo servidor da web (não o tempo de execução do PHP) ainda precisariam de acesso 666 e 777).
fonte