Conceder permissões de usuário em www-data owned / var / www

32

Eu tenho uma configuração simples de servidor da Web para alguns sites, com um layout como:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

Eu usei anteriormente o usuário root para gerenciar arquivos e, em seguida, devolvi-os a www-data quando terminei (sites do WordPress, necessários para o WP Uploads funcionar). Isso provavelmente não é o melhor caminho.

Estou tentando encontrar uma maneira de criar outro usuário (permite chamá-lo de usuário1) com permissão para editar arquivos no site1, mas não no site2, e não impede que os arquivos sejam "de propriedade" por www-data . Existe alguma maneira de eu fazer isso?

    
por George Pearce 24.10.2013 / 16:51

5 respostas

63

Se verificarmos a propriedade do site1, encontraremos algo assim,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

Isso significa que o diretório é de propriedade do usuário root, group root. Enquanto o usuário root tem permissão de gravação (mais permissões de leitura e execução) para o diretório, o grupo root tem apenas permissões de leitura e execução.

Queremos alterar a propriedade do grupo para outro grupo (novo) e adicionar user1 a esse grupo específico. Também daremos permissão de gravação para esse grupo específico.

Crie um novo grupo,

sudo addgroup site1

Adicione user1 ao grupo recém-criado,

sudo adduser user1 site1

Verifique se user1 está realmente nesse grupo

groups user1

A saída deve ser uma lista como,

user1 : <other-groups> site1

Agora podemos alterar a propriedade do grupo do diretório pretendido.

sudo chown -vR :site1 /var/www/site1/
changed ownership of '/var/www/site1/' from root:root to :site1

Conceder permissão de gravação a esse novo proprietário do grupo

sudo chmod -vR g+w /var/www/site1/
mode of '/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

Verifique se todas as alterações estão realmente lá,

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

Portanto, o diretório agora é de propriedade do usuário root, group site1. Tanto o usuário root quanto o group site1 possuem permissão de gravação (mais permissões de leitura e execução) no diretório. Qualquer usuário pertencente ao grupo site1 desfrutará de todos os privilégios concedidos a esse grupo.

Agora faça o login como user1, mova para o diretório site1 e tente criar um arquivo nesse diretório,

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

Isso falhou, pois provavelmente o grupo principal de user1 não é site1. Então, mude para esse grupo.

newgrp - site1

Tente recriar o arquivo (cuidado com o fato de você ter sido movido para o diretório inicial do usuário1 depois de alterar o grupo), isso deve funcionar agora. Como os arquivos criados terão permissão de leitura mundial, o apache (ou seu servidor da Web) não deve ter problemas para acessá-los.

EDITAR

Além disso, como apontado por dan08 no comentário, você precisa adicionar www-data ao site1 group.

sudo adduser www-data site1

Em muitas distribuições (não em todas), www-data é o usuário sob o qual o servidor web Apache é executado. Isso também significa que tudo feito pelo Apache (especialmente incluindo scripts PHP) será feito com as permissões do usuário www-data (e também do grupo www-data) por padrão. O WordPress usa o usuário www-data para gravar arquivos.

Se você quiser ver como o servidor web apache está sendo executado, emita o comando

ps aux | grep apache2 | less
    
por Masroor 24.10.2013 / 17:42
6

Crie dois grupos: site1grp e site2grp

sudo groupadd site1grp && sudo groupadd site2grp

Adicione www-data aos dois grupos.

sudo adduser www-data site1grp && sudo adduser www-data site2grp

Adicione user1 e user2 aos grupos apropriados

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Altere a permissão das pastas do seu site para que o proprietário do usuário seja www-data e o proprietário do grupo seja o grupo apropriado

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

Agora, www-data tem as permissões de usuário e grupo nos dois sites e cada usuário tem as permissões de grupo para o respectivo site.

    
por dan08 24.10.2013 / 17:12
3

Você precisa criar um novo grupo para o chamado "novo usuário" e adicionar o www-data e o "novo usuário" ao grupo:

sudo gpasswd -a new_user new_group

Depois, você pode alterar o proprietário para new_user e agrupar para new_group :

sudo chown -R new_user:new_group /var/www/site1

Em seguida, você precisará conceder acesso em nível de grupo ao site1. O www-data ainda poderá acessar o site, porque pertence ao new_group, enquanto o new_user não poderá acessar o site2, porque ele não pertencerá ao grupo www-data, que possui o site2.

    
por errikos 24.10.2013 / 17:01
2

Para quem tem a pasta raiz do wordpress em sua pasta pessoal:

Ubuntu / apache

  1. Adicione seu usuário ao grupo de dados www:

    CRÉDITO Concedendo permissões de gravação ao grupo www-data

    Você deseja chamar usermod do seu usuário. Então isso seria:

    sudo usermod -aG www-data yourUserName
    

    Supondo que o www-data group exista

  2. Verifique se seu usuário está em www-data group:

    groups yourUserName
    

    Você deve receber algo como:

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupName é geralmente semelhante ao seu nome de usuário

  3. Altere de forma recursiva a propriedade de grupo da pasta, mantendo a propriedade do usuário

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. Altere o diretório para seuWebSiteFolder

    cd yourWebSiteFolder
    
  5. Altere recursivamente as premissas de grupo das pastas e subpastas para ativar as permissões de gravação:

    find . -type d -exec chmod -R 775 {} \;
    
    O modo

    de /home/yourUserName/yourWebSiteFolder/' foi alterado de 0755 (rwxr-xr-x) para 0775 (rwxrwxr-x)

  6. Altere recursivamente as premissões de grupo dos arquivos e sub-arquivos para ativar as permissões de gravação:

    find . -type f -exec chmod -R 664 {} \;
    

    O resultado deve ser algo como:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    Equivalente a:

    chmod -R ug+rw foldername
    

    As permissões serão como 664 ou 775.

por Jadeye 18.10.2014 / 12:56
1

Supondo que todos os arquivos já pertençam a www-data user (você pode verificar com o comando ls -slah ) que pertence a www-data group (próxima coluna após nome de usuário na lista de arquivos), basta adicionar o usuário ao mesmo www-data group para permitir a edição desses arquivos

# usermod -aG www-data username

para usuários existentes ou

# adduser username www-data

para um recém-criado

    
por vladkras 07.01.2016 / 09:40