Permitir que o grupo seja r / w na pasta pertencente a um usuário específico

6

Eu tenho um grupo manager e um usuário user1 .

user1 criará um diretório por exemplo no caminho do servidor web /var/www/user1Project .

Como permitir que o grupo manager seja r / w em qualquer diretório pertencente a user1 ?

Já tentei adicionar o grupo manager a user1 . Mas isso não resolveu meu problema. Um usuário do grupo manager não tem permissão para gravar em user1Project . Eu não sei porque.

    
por Raccoon 11.08.2016 / 10:33

5 respostas

4

Isso é muito especial e você não pode gerenciar isso usando a arquitetura de permissões herdadas de um sistema unixóide. A abordagem mais próxima de sua intenção é usar ACLs . Emita o seguinte comando (opcionalmente como superusuário):

setfacl -d -R -m g:manager:rwx /dir/of/user1
setfacl -R -m g:manager:rwx /dir/of/user1

O primeiro comando define as permissões padrão para o diretório para que elas se apliquem aos arquivos recém-criados (pelo usuário1). O segundo comando define os direitos reais das pastas e arquivos recursivamente.

Observe que a infraestrutura da ACL não se aplica ao servidor Web Apache. O Apache só se importa com as permissões herdadas (permissão do usuário / grupo / outros). Assim, dentro da web folder, cada arquivo / pasta deve estar no grupo www-data e cada arquivo deve ter pelo menos permissões de leitura para www-data . As pastas devem ter as permissões de execução para www-data para a pesquisa do Índice.

Atualização:

Para forçar os arquivos recém-criados dentro de um diretório a herdarem o grupo desse diretório, defina o bit gid do diretório:

chmod g+s /web/directory

Os arquivos recém-criados dentro de /web/directory herdarão o grupo de /web/directory

    
por 11.08.2016 / 10:57
2

Além de fazer parte do grupo, você precisa definir a permissão de gravação no diretório:

 chmod 770 /var/www/user1Project/example_dir

(use 775 se quiser que o mundo tenha permissão de leitura, o que é mais provável em um diretório da web).

Perceba também que o gerenciador de usuários precisa fazer o login novamente após ser adicionado ao grupo user1 .

Se você quiser que todos os diretórios criados por user1 sejam graváveis pelos membros do grupo do grupo user1 , você pode definir:

umask 0002

que resultará em diretórios criados com permissões rwxrwxr-x .

    
por 11.08.2016 / 10:57
2

Definir o grupo de diretórios para o gerenciador:

chgrp -hR manager /your/target/directory/path

Depois, adicione set-GID-bit à sua permissão, por isso, se user1 alterar alguma coisa, o grupo poderá escrever novamente:

chmod g+s /your/target/directory/path
    
por 11.08.2016 / 11:08
2

Quando user1 criar o diretório, ele será de propriedade de user1:user1 . Isso significa usuário: grupo. Supondo que eles estejam no mesmo grupo, vamos chamá-lo de group1 , user1 precisa tornar o grupo group1 o proprietário do grupo desse diretório. Então:

chown :group1 dir'

Agora, para que o manager seja capaz de criar diretórios r / w, os bits de permissão do grupo precisam ser definidos como 7, ou seja, rwx . Isso é feito assim:

chmod g+rwx dir

Mas, quando manager cria um arquivo, ele pertence a manager:manager , então ele precisa chown to :group1 para as permissões do grupo se aplicarem a group1 , da mesma maneira que user1 fazer.

Há um truque que copia a propriedade do grupo do diretório pai. É o bit de permissão de grupo especial, SGID. Isso pode ser feito:

chmod g+s dir

Por fim, itens recém-criados (arquivos e diretórios) aceitam as permissões de seus pais, além de um último modificador chamado umask . Ele inverte bits únicos de permissões se eles estiverem definidos e tem o mesmo formato de 4 dígitos octal. Geralmente é 0002 ou 0022. 0002 significa que o segundo bit da direita será mascarado (ou invertido). Por exemplo, com umask 0022, quando você cria um novo diretório em outro diretório com permissões rwxrwxrwx, o novo diretório receberá permissões rwxr-xr-x.

Portanto, se manager tiver umask 0022, ele também terá que chmod de seus diretórios e arquivos para 7 para dar ao grupo acesso total a eles.

    
por 11.08.2016 / 11:15
1

setfacl parece o melhor negócio para você. Certifique-se de que acl utilities esteja instalado. Para verificar se já está instalado

Nos sistemas de bases Redhat, faça:

yum list acl

Em sistemas baseados em Debian,

dpkg -l acl

Se ainda não estiver instalado, para sistemas de bases Redhat:

yum install acl.x86_64 # Or use dnf for later versions of Fedora and so

Em sistemas baseados em Debian,

dpkg install acl

Ativar acl nos sistemas de arquivos, modificando o / etc / fstab

UUID=your_uuid_here   /partition    filesystemtype   options,acl   0   2

Note que ,acl é a única parte adicionada, agora remonte a partição

mount -o remount /your_partition_here

(Isso conclui a parte de configuração, você pode não fazer isso se acl já estiver instalado).

Aplicar setfacl

setfacl -m g:manager:rw file /var/www/user1Project #you need root privileges

Você é bom para ir

    
por 11.08.2016 / 11:08