O administrador do meu servidor deseja que eu defina permissões públicas de gravação em um diretório

9

Eu sou relativamente novo em desenvolvimento web, então, seja paciente.

Sou basicamente um desenvolvedor de iPhone, mas recentemente criei um site para outra pessoa usando hospedagem compartilhada. Eu poderia escrever bem em arquivos em PHP nesse site, sem ter que pensar em permissões.

Estou no processo de implantação de um serviço da Web para um novo aplicativo que estou criando, mas não está realmente indo bem. A diferença mais importante aqui é que estou usando o servidor de outra pessoa e apenas tenho acesso FTP / DB.

Basicamente, eu tenho uma carga de arquivos PHP que compõem meu CMS, assim:

mysite.com/admin/manage_news.php
mysite.com/admin/manage_events.php

Esses scripts editam o banco de dados ou os arquivos. Eles podem interagir com o banco de dados, no entanto, meus scripts não podem gravar no sistema de arquivos. Eles podem, por exemplo, tentar gravar nos seguintes arquivos:

mysite.com/data/img/event_1.png
mysite.com/data/somefile.txt

Isso funcionou bem na minha instalação do MAMP (localmente), mas uma vez implantado no servidor, o PHP gerava erros toda vez que uma gravação era tentada ... algo como isto:

Não foi possível abrir o arquivo "../data/img/someimage.png" para gravação.

Então, enviei um email para o cara que está executando o servidor e ele voltou dizendo:

Funciona com permissão pública? (777)

E foi o que aconteceu - mas eu fui muito cauteloso ao usar permissões públicas, então desabilitei imediatamente. Enviei um e-mail a ele dizendo "como posso escrever meus scripts PHP usando permissões de usuário padrão" e ele disse:

Deixe como público, tudo ficará bem

Eu acho que é um conflito de ip em algum lugar na resolução do domínio, mas não estou preocupado com isso.

Enviei-lhe um e-mail dizendo "certamente isso é inseguro" ou algo parecido, e ele respondeu com o seguinte:

a realidade é que existem milhões de sites, incluindo vários que eu administro e que têm 777 em várias pastas, é apenas um modo de vida.

Alguém poderia me dar uma idéia de uma solução que eu poderia dar a ele? Ou o que posso fazer para evitar o uso do 777? Realmente não gosto que a ideia de qualquer pasta no meu site / serviço seja publicamente gravável.

Eu gostaria muito de receber seus conselhos, pois sei muito pouco sobre servidores da web.

Alex Coplan
fonte
12
Fuja desse cara e não olhe para trás.
user9517
Não é realmente uma opção ... ver os comentários sobre a resposta de SvenW ...
Alex Coplan

Respostas:

13

Vamos dividir :

Você precisa que o usuário que executa o script leia, execute e escreva no diretório, portanto, deve ser:

7 = (r) ead, (w) rito, e (x) ecuto

Outros usuários pertencentes ao mesmo grupo devem ser capazes de executar o arquivo php dentro do diretório, mas não gravá-lo (por razões óbvias); eles não precisam necessariamente ler os arquivos PHP. Portanto, precisamos fornecer apenas permissões de execução:

1 = e (x) ecuto

O mesmo para o público. De fato, é tudo o que você precisa para usuários externos que precisam exibir arquivos estáticos e php:

1 = e (x) ecuto

Portanto, o mínimo necessário deve ser:

711

Confirmei as configurações acima com minha própria configuração, portanto, deve funcionar; no entanto, isso está no usuário da web padrão. Se você estiver carregando com um login diferente de www, os arquivos e diretórios provavelmente estariam com um usuário diferente. Nesse caso, o usuário da web padrão pode não conseguir ler ou gravar os arquivos pertencentes a você. Nesse ponto, você provavelmente precisará adicionar o usuário da web padrão ao seu grupo (o sysadmin precisará fazer isso) e, em seguida, conceder permissões de leitura, gravação e execução aos usuários pertencentes ao grupo:

771

E isso provavelmente funcionaria. Ou o sysadmin altera a propriedade do usuário e do grupo desses arquivos para o usuário padrão do servidor da web (mas NÃO AS PERMISSÕES!). Se isso ainda não funcionar, um exemplo de saída das permissões (algo como "ls -la dentro do diretório") nos ajudaria a solucionar esse problema ainda mais. ou "outro"), você deve ficar bem do ponto de vista da segurança.

Rilindo
fonte
2
Gostaria de poder votar duas vezes.
19411 Wesley
O problema é que o site não deve gravar em arquivos dentro de sua própria estrutura, e não nas próprias permissões.
precisa
Você está certo. Dependendo dos dados, você provavelmente desejaria gravar em um arquivo fora da raiz pública da web.
Rilindo
Aqui eu estou escrevendo a uma /datapasta - esta pasta contém scripts PHP que compõem o meu serviço JSON web, e um monte de imagens usadas para o conteúdo transmitido no serviço web (em uma /data/imgpasta)
Alex Coplan
Então as imagens precisam ser públicas, então? Isso esclareceu as coisas.
Rilindo
18
Leave it as public, it'll be fine

I reckon it's an ip conflict somewhere in the domain resolution, 
but I'm not worried about it.

Esse cara é um idiota e isso é um absurdo completo. Os direitos de acesso não têm nada a ver com endereço IP ou resolução de domínio, ele está apenas soltando palavras.

Dada a qualidade desse "administrador", eu recomendaria hospedar seu site em outro local, pois é muito provável que o site seja administrado de maneira muito precária e insegura. Apenas colocar 777permissões em algo para que funcione é um sinal claro de que ele não entende um pouco do que está fazendo.

Quais direitos de acesso são realmente necessários dependem da maneira como o sistema é usado e configurado e é meio difícil dizer uma coisa sem saber disso.

Sven
fonte
obrigado - meu pensamento é exatamente sobre as permissões - eu realmente não tenho uma opção para hospedá-lo em outro lugar, pois a empresa pela qual estou desenvolvendo não pagará por isso, e me recomendou esse cara e disse que eles o levariam a faça de graça - pelo que sei, estou apenas fugindo de um de seus servidores virtuais. Então, como normalmente funciona, como um script PHP pode ser executado como um "usuário" e, portanto, conseguir gravar em qualquer coisa no site?
precisa
Bem, eu os informaria sobre o que eles recebem "de graça". Não tenho muita experiência com nenhuma hospedagem compartilhada, por isso não posso comentar sobre isso. Meus sites todos executar servidores web do Debian e pastas que precisam ser gravável serão propriedade www-datacom 700permissões, mas isso provavelmente não vai funcionar no seu caso.
Sven
Eu acho que eles estão pagando a ele pelo site principal também, e é por isso - se houver alguma ajuda na parte inferior de qualquer página de erro do servidor, isso dizApache/2.2.9 (Debian) PHP/5.2.6-1
Alex Coplan
Também este é VPS não compartilhada
Alex Coplan
2
Bem, eu tento descobrir quais permissões e propriedades seus arquivos podem ser transferidos para o servidor. Se for um usuário que não seja pelo menos um membro do www-datagrupo, você precisará alterar usuários / grupos após a transferência ou usar 777permissões. Mas isso não faz sentido, não podemos ajudá-lo dessa maneira.
Sven