Os arquivos enviados como root para o servidor da web não podem ser sobrescritos pelo aplicativo da web

0

Aqui está o meu problema. Estou desenvolvendo uma aplicação web em PHP / MySQL e estou tendo alguns problemas para configurar as contas que preciso usar.

Estação de trabalho de desenvolvimento: WinXP SP3, Eclipse PDT

Servidor de desenvolvimento: Debian 6.0, Apache2, MySQL 5, XDebug

Conectado através de uma LAN.

Enquanto estou desenvolvendo, carrego o código que precisa ser testado no servidor. Eu uso o GIT e o ssh: root @ myserver.

Como esperado, os arquivos acabam sendo de propriedade de root no servidor.

Meu aplicativo da Web precisa atualizar alguns dos arquivos. Para permitir que eu corri chmod no servidor para alterar a propriedade dos arquivos para www-data. Isso funciona bem.

O problema é que toda vez que eu modifico um arquivo e o carrego de novo ele volta para a propriedade root e eu tenho que alterá-lo manualmente para www-data.

Não acho que isso seja um problema no ambiente de produção, pois posso garantir que os arquivos tenham a propriedade correta quando forem publicados. No entanto, é uma dor o processo de desenvolvimento.

O que estou pensando:

1 - Eu provavelmente não deveria estar fazendo o upload com uma conta root. Tentei conectar-me ao servidor através do ssh usando o usuário www-data. No entanto, ele pede uma senha e depois de algumas leituras eu descobri que provavelmente não é uma boa idéia mexer com o usuário www-data.

2 - Eu provavelmente poderia criar outra conta para fins de desenvolvimento e fazer o upload dos arquivos com essa conta. O problema é que eu não sei como configurar meu aplicativo da web para usar essa conta ao conectar ao servidor e ao banco de dados.

3 - Eu provavelmente poderia configurar meu aplicativo e banco de dados para ser executado como root no ambiente de desenvolvimento. Isso resolveria o problema. No entanto, como afirmado em 2 acima, eu não sei como fazer isso e eu algo me diz que isso não seria uma boa idéia.

Estou procurando conselhos sobre como resolver meu problema. Eu poderia ir com qualquer uma das três alternativas acima (ou até mesmo uma quarta que eu não tenha considerado). Obrigado.

Atualização - 2011-09-13

Uma solução das respostas abaixo (obrigado cdp1337) é executar um script para atualizar as permissões de arquivo quando eu fizer o upload de arquivos para o servidor de desenvolvimento. No meu caso, eu poderia correr

chown -R www-data:www-data *

na raiz do meu site. NOTA: isso NÃO está no ambiente de produção e o servidor da web de desenvolvimento não pode ser acessado fora de nossa empresa. Esta não é uma solução para implantar no ambiente de produção.

Alguma outra ideia? Obrigado.

    
por jdias 13.09.2011 / 16:24

2 respostas

1

1/2 - Sim, seria bom enviar os dados como um usuário não privilegiado, mas eu me vejo fazendo a mesma coisa quando preguiçoso.

3 - IMO nunca é uma boa ideia, você nunca quer rodar aplicativos como root se você não precisa explicitamente.

Caso contrário, para responder à sua pergunta, sugiro criar um script de construção que possa ser executado, o qual fará os processos necessários para configurar seu aplicativo. Muitas pessoas usam formigas para fazer isso, mas um simples script bash com algumas diretivas 'chown' deve bastar para as suas necessidades aqui. Dessa forma, quando você faz o upload dos dados, basta executar o script e sabe que ele é construído corretamente.

Como alternativa ao alternativo, você pode ter um script de atualização retirando automaticamente a versão mais recente do seu aplicativo do git e executando as permissões. Isso condensaria dois passos em um.

    
por 13.09.2011 / 16:47
0

Não apenas você não deve fazer upload de arquivos como root, ele não deve ser possível para fazer upload de arquivos como root. Você é responsável pelo administrador deste sistema?

I tried connecting to the server through ssh using the user www-data. However it asks for a password

Espero que você não seja responsável pelo administrador. Vá falar com quem cuida dos servidores e tente descobrir um modelo de segurança sensato. Você tem muito a aprender sobre como tudo isso funciona - muito além do que poderia ser fornecido como uma resposta aqui.

Mas você provavelmente deseja criar um grupo incluindo uma conta de usuário normal (que você usará para fazer o upload de arquivos) e o usuário do servidor http - observe que esse não deve ser o grupo padrão para nenhum usuário. Então, para quaisquer diretórios onde o ux do apache deve ter acesso de gravação (e deve ser uma lista muito pequena, fora da raiz do documento), altere o grupo para o grupo comum, torne o conteúdo legível pelo grupo comum e defina o grupo diretórios dentro destes.

Para os arquivos / diretórios que você carrega e deve ser legível pelo servidor web, ative o acesso de leitura (e execute o acesso para diretórios) através das 'outras' permissões.

Se você realmente for responsável por admin nesta caixa, precisará de algum tempo para começar a aprender quais são suas responsabilidades. Existem muitos bons livros - rute é um bom começo.

    
por 13.09.2011 / 17:03