O PHP pode gravar em um diretório sem o 0777?

1

Eu estou fazendo um construtor de sites, e eu tenho o arquivo render.php, que precisa escrever para os diretórios dos usuários. Eu não quero dar cada um dos diretórios dos usuários 0777, mas eu ainda preciso ser capaz de escrever para eles. Existe uma maneira de fazer isso?

Até agora eu tenho:

  • render (dir) ... 0777
  • render.php ... 777 EscritosTo->
  • users (dir) ....... 0777
  • index.php ..... 777

Eu quero mudar isso para permitir acesso render.php para alterar os arquivos dos usuários, mas não permitir que os próprios arquivos executem o código.

Riiich
fonte
Não fica claro a partir de sua pergunta se você precisa criar arquivos, anexar arquivos existentes ou editar arquivos existentes. Todas essas operações requerem permissões diferentes.
Dennis
@Dennis No Ubuntu, acredito que as permissões tradicionais seriam as mesmas para acrescentar e editar (embora as ACLs possam mudar as coisas).
cpast
@ Riich: Olhe para as ACLs. Eles podem fornecer permissões personalizadas para vários usuários, não apenas para um proprietário.
cpast
@cpast: o acréscimo não requer permissões de leitura no arquivo.
Dennis
@Dennis Ah, isso faz sentido.
cpast

Respostas:

1

Se eu entendi bem, eu acho que este procedimento deve dar o que você quer.

  1. Crie um grupo renderuserspara o diretório do usuário:groupadd renderusers
  2. Altere o grupo do userdiretório para renderusers:chgrp renderusers user
  3. Adicione o usuário do seu processo apache (apache ou www-data) a este grupo: usermod -G rendergroup -a apache
  4. Altere as permissões do userdiretório para incluir set group IDpara que o grupo renderuserspossa gravar e alterar arquivos, e cada arquivo recém-criado pertencerá ao renderusersgrupo neste diretório:chmod -R 2770 user
  5. Reinicie o apache para que ele reconheça seu novo grupo suplementar

Eu suponho que você está executando o php como um módulo DSO e não via cgi.

teissler
fonte
Olá! Apenas tentando isso, obrigado pelas instruções claras. No # 2 eu recebo chgrp: cannot access 'user': No such file or directory. Quanto à sua pergunta sobre DSO ou CGI, eu sinceramente não tenho ideia! Eu instalei o lampp e estou usando isso se isso ajudar!
Riiich
Como um idiota achei que usuário era o usuário, eu digitei mal o dir que na verdade é "usuário" .. Eu tentei todas as instruções até mesmo mudei o grupo do dir render para renderusers mas ainda assim nada tenho medo!
Riiich
Ainda sem acesso ao arquivo: / Eu tenho jogado um pouco, mas ainda nada ..
Riiich
Você poderia, por favor, mostrar as permissões atuais do diretório de usuários? ls -la users. Além disso, getent group | grep -i apachese o usuário do apache for apache e não www-data.
teissler
getent group | grep -i www-data= www-data:x:33: renderusers:x:1002:richard,www-data ls -la users= drwxrwxr-x 5 richard 2770 4096 Mar 4 18:17 . drwxrwxr-x 28 richard richard 4096 Mar 6 13:30 .. drwxrwxr-x 3 richard 2770 4096 Mar 1 00:08 1 drwxrwxr-x 3 richard 2770 4096 Mar 4 18:17 3 drwxr-xr-x 3 richard 2770 4096 Feb 25 00:54 riiich O nome de usuário que eu fiz logon no meu servidor érichard
Riiich
0

Eu não estou suficientemente familiarizado com o Apache para poder orientá-lo através do procedimento de configuração do site, mas posso sugerir uma resposta no nível de permissões do Unix:

  • Definir um novo grupo (por exemplo riiich_app)
  • fazer chgrp riiich_appe chmod 775em cada um dos diretórios dos usuários (e dizer-lhes para não mudar isso) e, em seguida,
  • configure seu servidor da web para executar o seu render.phpsob o riiich_appgrupo.
Scott
fonte
Obrigado pelas instruções claras, estou tentando enquanto falamos! Quais os benefícios de colocar os diretórios em um grupo? Os usuários ainda não conseguiriam executar códigos maliciosos? E os usuários não podem mudar nada assim, no momento é apenas um simples construtor de arquivos HTML ->, eu só estou preocupado se eles deveriam entrar em algum script PHP e deletar tudo
Riiich
Se um diretório (ou um arquivo, para esse assunto) pertencer freda um grupo de riiich_app, e tiver um modo de 775 ou 664, Fred terá acesso de gravação a ele, assim como qualquer pessoa do riiich_appgrupo (mas ninguém mais). “Qualquer pessoa no riiich_appgrupo” deve ser interpretada como “qualquer processo executado sob o riiich_appID do grupo”. // Eu acredito que não entendi inteiramente sua pergunta. O que você quer dizer com “os usuários não podem mudar nada assim” - você está dizendo que eles não podem fazer login em um shell (por exemplo, por telnetou ssh)?
Scott
Não neste momento atual no tempo, eu basicamente só tenho um editor WYSIWYG com adicionar, editar e remover funções de página. Eu só não quero que eles rmdir "../*"(eu sei que não é código real, eu estou apenas ilustrando.
Riiich
-6

Você pode dar ao seu nome de usuário do servidor da Web as permissões 0777. No caso do Apache2, isso é www-data. Não sei exatamente como fazer isso com chmod, mas você pode chown www-data 777.

Sydcul
fonte
Eu não acho que dar tudo 777 é exatamente "seguro"
Riiich
2
Dê um usuário [name] as permissões 0777? chown www-data 777? Isso não faz sentido. -1
Scott