(Outra!) pergunta sobre privilégios de www-data e root - mas com um toque

1

Resumindo : é seguro conceder acesso root (usuário) a www-data?

Declaração mais longa : como muitas perguntas feitas sobre isso usando chmod g + s , POSIX ACLs e outros sites umask quanto à maneira apropriada de conceder privilégios para / var / www / html etc, mas o meu é um pouco diferente, e tudo que eu tentei não faz t parecem resolver o problema.

/ var / www / project / html < - contém todos os arquivos baseados na web / var / www / project / log < - contém todos os registros baseados em projetos

Eu também tenho crontab configurado para o usuário root para manutenção etc. Dentro desses scripts de manutenção (principalmente PHP para que eu possa usar minha biblioteca de funções comuns), eu tenho os resultados também canalizados para a pasta de log, sob o mesmo arquivo de log do dia, alguns scripts são executados uma vez por dia, outros (podem) executar a cada minuto.

Ao trazer meu aplicativo para cima (através do Vagrant), eu o deixo por alguns minutos (para que meus trabalhos cron possam postar no arquivo de log) e, em seguida, eu faço o login no aplicativo. Imediatamente recebo um erro ao gravar no arquivo de log de dias. Após a verificação, com certeza ele é de root: root - claro, as tarefas do cron criaram (se já não existissem) ...

Mas ! Como parte do script de instalação na criação do aplicativo, executo o seguinte no final:

chown -R www-data:www-data /var/www/project
chmod -R 775 /var/www/project
chmod g+s /var/www/project

... após o qual meu servidor é reinicializado (o nome do host também é alterado antes da reinicialização).

(Por favor, note: eu também tentei o acima com um trailing /)

Meu entendimento do último comando ("g + s") é que qualquer novo arquivo criado sob essa pasta adotaria as permissões da pasta pai. Esse obviamente não é o caso, já que o root está criando o arquivo e suas permissões são root: root.

Executando vários "ls -l" que eu vejo (removendo tamanho do arquivo, timestamps etc):

/var/www # ls -l
drwxrwsr-- www-data www-data  project

/var/www # cd project
/var/www/project # ls -l
drwxrwsr--  www-data www-data html
drwxrwsr--  www-data www-data log

/var/www/project # cd log
/var/www/project/log # ls -l
-rw-r--r--  root root 170309.log

Então ... eu apago esse arquivo de log e repito os comandos chown, chmod e chmod g + s para ver se foi a reinicialização, ou mudança de nome de host, que está me jogando fora ... e com certeza, minha manutenção O script cria o arquivo de log mais uma vez, com privilégios root: root.

Se eu deixar o arquivo lá e repetir os comandos, obtenho o resultado que estava procurando:

/var/www/project/log # ls -l
-rwxrwxr--  2 www-data www-data 170309.log

No entanto, não terei necessariamente a opção de aplicar esses comandos depois que o sistema for reinicializado, e tenho certeza de que no dia seguinte, eu terei os mesmos problemas que o arquivo de log será diferente e meu script de manutenção vai criá-lo primeiro.

AFAICS, tenho algumas soluções:

  1. Quando a função que cria o arquivo de log (seja através do trabalho cron ou através do aplicativo), eu verifico se ele já existe e se não existe, crie-o e, em seguida, "chown www-data: www- data todaysLogFile "e depois" chmod 774 "depois ... uma solução alternativa talvez, em vez de uma solução
  2. adicionar raiz ao grupo de dados www (algum problema de segurança potencial? ajudaria?)
  3. use ACLs POSIX

Estou realmente atrás de uma solução sólida aqui, em vez de hacks ou work-arounds. Eu sei que não sou o único a fazer isso, mas tem que ser mais fácil !!! : O)

    
por bnoeafk 10.03.2017 / 02:08

1 resposta

0

Portanto, o que é longo e curto é, a menos que eu queira mexer com umask (que eu, idealmente, nunca quis fazer) e, embora adicionar raiz ao grupo de dados www realmente não tenha impacto em nenhum problema de segurança, ve ido com o uso de ACLs.

Em suma, foi bastante indolor: o 14.04 e o posterior automaticamente montam partições com a opção ACL de qualquer forma, portanto não era necessário fazer o uso do fstab em torno do fstab, e simplesmente instalar os utilitários do ACL e configurar as permissões necessárias para essa pasta (e qualquer subsequente: o facl também usa a opção -R) foi rápido, simples e fez exatamente o que está escrito na lata.

    
por bnoeafk 13.03.2017 / 18:47