Torne o proprietário dos arquivos e pastas recém-criados www-data em vez do superusuário / administrador

13

Até agora, tenho lutado com permissões e postei outra pergunta, mas identifiquei qual era o problema, sem nenhuma maneira de corrigi-lo.

Minha configuração:

  • Ubuntu Desktop com pilha LAMP
  • 5 "usuários" Criei usuários que criei no servidor ubuntu usando sudo useradd -r -s /bin/false USERNAME e que são usados ​​para acessar as pastas compartilhadas da rede local, ou seja, para que os computadores da minha rede se conectem à pasta / var / www, compartilhada usando o Samba.
  • EDIT: O objetivo é criar uma espécie de "host local principal" onde todos os computadores da minha rede local possam trabalhar no mesmo site, localmente (eu NÃO tenho um endereço IP estático, portanto, o servidor não pode ser acessado de outro lugar) .

Meu problema:

Atualmente, quando crio uma nova pasta no /var/www/html(ex: Criando a pasta / var / www / html / testsite1) usando qualquer computador da rede, essa pasta pertence automaticamente a boris:www-data("boris" sendo o principal usuário administrador na instalação da minha área de trabalho do ubuntu e mostra de fato boris: www-data ao executar ls -lna pasta recém-criada), o que está causando problemas na minha configuração atual (usando o Duplicator Plugin para wordpress pela LifeInTheGrid principalmente). No entanto, tanto o meu /var/wwwquanto o meu /var/www/htmlsão de propriedade dewww-data:www-data

Por isso, gostaria de saber como posso:

  • Altere a propriedade para www-data: www-data de todos os arquivos e diretórios abaixo / var / www e / var / www / html

  • Verifique se qualquer arquivo ou pasta que criarei com qualquer usuário da minha rede pertencerá automaticamente a www-data: www-data (Isso inclui arquivos criados automaticamente por scripts php, pois é o que o plug-in do Duplicador faz se eu estiver não está errado).

Existe uma maneira de fazer isso?

Nota: Eu sou um super novato com coisas relacionadas ao Linux e linhas de comando, mas atualizo rapidamente.

Nota 2: umask já está definida como 0002

EDITAR:

Tentei isso:

sudo chown -R www-data:www-data /var/www/

E, em seguida, defina os bits setuid e setgid fazendo o seguinte:

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

Em seguida, efetue o logoff, reiniciei o apache e tentei criar uma nova pasta usando um Mac conectado ao meu servidor através do IP da rede (IP local, não estático).

Eu corri

ls -l on /var/www/html

A saída ainda é:

drwxr-sr-x 2 boris   www-data  testsite1

Nota:

Eu já verifiquei minha configuração do apache antes e envvars, ela já está definida como:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

EDIT: Tentei de trás para frente, por exemplo, configurando tudo para pertencer ao boris: www-data e defina meus envvars apache config para boris: www-data. FUNCIONOU!

Aqui está o que eu fiz:

Envvars alterados para

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Correu

sudo chown -R boris:www-data /var/www/

Reiniciei o Apachem, criei uma nova pasta, adicione meus arquivos, executei o plugin, agora diz que é bom !!!

Boris Chevreau
fonte
É uma má idéia para a segurança definir arquivos que pertencem ao usuário ou grupo www-data, embora, em casos raros, possa ser necessário para determinados arquivos aos quais o servidor da Web precisa acessar. O que você está tentando alcançar?
thomasrutter

Respostas:

11

Resposta à Pergunta 1: Recursivachown

Uma recursiva chownpermitirá definir a propriedade e o grupo para o que você deseja /var/www/.... Este é o comando que você deve usar:

sudo chown -R www-data:www-data /var/www/

Com isso, todos os arquivos e pastas serão configurados como tal lá dentro, com essas permissões de propriedade.


Meia resposta à pergunta 2: setgidbit

Se você deseja a propriedade padrão do grupo nos arquivos, defina o setgidbit na /var/www/htmlpasta. Novos arquivos devem ser criados com esse grupo, conforme indicado na pasta.

sudo chmod g+s /var/www/html

Você precisará definir permissões de gravação, se houver outro usuário que www-dataesteja gravando nos diretórios, e isso poderá abrir uma ou duas brechas de segurança, se você não tomar cuidado.

Você acaba tendo permissões $USER:www-data; Para alterar o proprietário, use um chownconforme indicado no método nº 1 (que disse que, em uma configuração adequada, você deve confiar nas permissões do grupo, não nas permissões do proprietário do usuário, para acessar os arquivos da web).


Problema do PHP Wordpress Duplicator

O problema com as permissões é que o usuário / grupo PHP executa conforme as necessidades de gravação e leitura e provavelmente +x no diretório para editar a estrutura do diretório e tal.

O PHP é executado como www-datapadrão nas instalações do Ubuntu, que usam as configurações padrão. Idealmente, suas etapas acima resolveriam o problema, pois o Duplicator Plugin é um plug-in PHP.

Idealmente, você também deve verificar a documentação do Duplicator Plugin para verificar quais permissões ele precisa para executar e funcionar.

Thomas Ward
fonte
Gosta de mim o método setuid :)
Rinzwind
Era exatamente isso que eu procurava !!!! Único problema: não funcionou :-( Criei uma pasta no meu mac (ou seja, NÃO com o computador desktop ubuntu) acessando meu servidor através do IP local. Quando executei o ls -l, ainda de propriedade da boris: www- dados: - /
Boris Chevreau
É porque eu defino a propriedade do usuário nos arquivos, mas não nas pastas? É apenas porque a pasta que eu crio NÃO PODE pertencer automaticamente a www-data: www-data?
Boris Chevreau
O Mac é diferente do Linux e, se você tiver realmente azar, esse método não funcionará e você terá que mexer com muito mais do que apenas permissões simples (como ACLs e outras coisas) para configurar arquivos padrão . Além disso, 'não funcionou' é ambíguo. define não funcionou e inclui saídas como edições na pergunta.
Thomas Ward
1
Setuid aplicado aos diretórios é sempre ignorado em Linux, IIRC
Muru
6

Para garantir que qualquer arquivo ou pasta que você crie /var/www/htmlseja de propriedade automática da www-data, você pode usarinotify , é como o cron, mas monitora pastas / arquivos em busca de alterações nos atributos, criações, modificações e muito mais.

Primeiro instale-o com:

$ sudo apt-get install incron

Permita que o root use incron, abrindo /etc/incron.allowcom:

$ sudo vim /etc/incron.allow

e adicione rootao arquivo, salve e saia.

Edite seu incrontab com:

$ sudo incrontab -u root -e

e adicione a seguinte linha a ele:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

salvar e sair.

Agora, assim que um arquivo é criado no /var/www/htmldiretório, ele automaticamente define a participação em www-data:www-data.

Explicação da linha no incrontab:

/var/www/html é o diretório que será monitorado.

IN_CREATEobservará os arquivos criados. É a máscara de alteração de arquivo .

/bin/chown -R www-data:www-data /var/www/html/ é o comando / ação a ser executado.

krt
fonte
Eles podem alcançar algo como isto sem inotify e setgid - propriedade de usuário provavelmente não deve mudar muitas vezes e eles podem redefinir propriedade de usuário si ... ou usar ACLs que pode ser uma dor
Thomas Ward
Todo o objetivo deste servidor é usá-lo como um "host local principal", por exemplo, criar sites de host local e poder editar / substituir / mover / criar sites de teste em tempo real com muita facilidade. Se eu tiver de repor tudo manualmente, ele mata todo o propósito: - /
Boris Chevreau
É esse caminho "incron" o único caminho? Não entendo por que tem que ser tão complicado. O que eu estou procurando é uma maneira simples de todos os meus computadores na rede criarem um site neste servidor. Por fim, como não tenho um IP estático (portanto, a segurança não é um problema), há outra reviravolta que você teria em mente?
Boris Chevreau
obrigado, funciona como um encanto!
precisa saber é
3

Altere a propriedade para www-data: www-data de todos os arquivos e diretórios abaixo / var / www e / var / www / html

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html está implícito aqui (como parte de / var / www /)
  • -Rtorna-o recursivo (para percorrer todos os diretórios /var/www/).

Certifique-se de que qualquer arquivo ou pasta que criarei com qualquer usuário da minha rede seja de propriedade automática de www-data: www-data

  • Dentro de / var / www / html / eu diria?

Defina sua configuração do apache para www-data. Vejo/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Você precisa reiniciar o apache após editar este ( sudo service apache restart).

Isso inclui arquivos criados automaticamente por scripts php, pois é o que o plug-in do Duplicator faz se não estiver errado).

O problema aqui provavelmente não é o plugin, mas o php. O usuário deve ser o mesmo processo em que o PHP é executado. Portanto, você provavelmente precisará definir isso também como www-data, se esse for seu usuário e grupo ( /etc/php5/apache2/php.ini).

Rinzwind
fonte
Os padrões do Ubuntu executam processos / trabalhadores PHP www-data, assim como o Debian, acredito.
Thomas Ward
Além disso, o problema /var/www/htmltambém é propriedade do grupo e privs de leitura / gravação. O outro problema é que eles querem que qualquer arquivo criado por um usuário tenha www-data:www-data, e meu palpite é que esses são usuários de rede , não os usuários do Wordpress, então você precisa ir atrás das permissões de arquivo do Linux.
Thomas Ward
Esses são os usuários da rede, na verdade, é os usuários que eu criar no servidor ubuntu usando sudo useradd -r -s / bin / false usuário e que são usados para acessar a rede pastas compartilhadas locais
Boris Chevreau
E se eu mudar a propriedade e gravar as permissões de todas as pastas e arquivos de volta para boris: www-data, e depois alterar os envvares para o apache ser boris: www-data? Talvez isso corrija o problema, pois sempre que eu crio um novo arquivo, ele é definido como proprietário sendo boris: www-data?
Boris Chevreau
2

Eu resolvi isso! Eu ainda acho que foi um problema dos envios do Apache, mas não tenho certeza se é isso que resolveu o problema ... Enfim, aqui está o que eu fiz:

Envvars alterados para

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Correu

sudo chown -R boris:www-data /var/www/

Agora está funcionando até agora. Vai testar ainda mais ...

Boris Chevreau
fonte