Conceder permissões de grupo aos arquivos de outros usuários

Conceder permissões de grupo aos arquivos de outros usuários

Estou usando o Debian 7 e criei um novo usuário (site) com um diretório htdocs como este:

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

Agora gostaria que usuários de outro grupo (desenvolvedores) tivessem acesso ao diretório do usuário. Eu tentei:

$ sudo chown -R :developers /home/website

Posso ver que o grupo está atribuído (com ls -laou stat) e que os usuários estão no grupo, mas não têm acesso, certo?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

Eu também quero:

  • Permitir que outro grupo, 'contratantes', acesse os arquivos do site

  • Restringir o acesso dos usuários do site apenas aos seus diretórios pessoais

  • Garanta que os novos arquivos do site herdem essas permissões

Você precisa usar listas de controle de acesso - ou existe uma maneira melhor de fazer isso (como não usar um usuário separado para cada site)?

Responder1

É difícil dar comandos precisos sem conhecer o sistema operacional ou a distribuição; e sim! ACL funcionaria, mas também existe uma maneira padrão.

Existe addusere useradd, um deles na sua distribuição pode criar o diretório inicial do usuário automaticamente. Nesse caso, o conteúdo do /etc/skel/diretório seria copiado para o diretório inicial do usuário, as permissões seriam definidas e talvez algumas outras ações apropriadas pudessem ser realizadas.

Podem existir grupos pré-definidos para partilha, como por exemplo ‘staff’; mas, se quisermos criar nosso próprio grupo para compartilhar, não há nada de errado nisso. Portanto, crie um novo grupo ou use um grupo existente. Certifique-se de que os usuários que serão membros do grupo foram definidos como tal com usermod, moduserou vigrtalvez, de acordo com o sistema operacional. Cada usuário conectado no momento deve sair e entrar novamente para se tornar membro de um novo grupo.

Crie um diretório comum para todos os usuários, como /home/share_directory/ou qualquer outro diretório que faça mais sentido para sua situação. Uma prática recomendada relevante é não usar um diretóriodentro dediretório inicial de qualquer usuário. Se ninguém, exceto o proprietário e o grupo, puder ver os arquivos no diretório, altere as permissões do diretório para 0770. Se a leitura estiver correta por "outros", use 0775. O proprietário do diretório quase certamente deve ser root.

chown root:group_name /home/share_directory/

Em seguida, altere o bit setuid.

chmod +s /home/share_directory/

Se nenhum usuário puder modificar o arquivo de outro usuário, defina também o stick bit.

chmod +t /home/share_directory/

Esses exemplos definem os bits setuid e sticky ao mesmo tempo usandonotação octal.

chmod 5775 /home/share_directory/

ou

chmod 5770 /home/share_directory/

Para a pergunta atualizada, parece que o ACL é a ferramenta certa. A maioria das distribuições Linux agora inclui a aclopção na defaultsopção. Se a sua distribuição não inclui a aclopção por padrão, então é necessário um pouco de trabalho para começar a usá-la. Primeiro monte os sistemas de arquivos com a aclopção em /etc/fstab.

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

Se necessário, remonte o sistema de arquivos: sudo mount -o remount,acl /. Em seguida, crie um grupo ao qual um usuário possa pertencer para esse fim. Talvez seja necessário instalar também as ferramentas ACL: apt-get install acl.

sudo groupadd developers
sudo usermod -a -G developers $username

(Ou o grupo pode ser "contratantes".) Um usuário conectado no momento deve sair e entrar novamente para se tornar membro do novo grupo. Claro, não faça isso se você tiver conteúdo no diretório /var/www que deseja manter, mas apenas para ilustrar a configuração inicial:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

Acima, as diferenças entre os setfaclcomandos são estas: a primeira instância usa o grupo padrão (proprietário do grupo do diretório) enquanto a segunda especifica um grupo explicitamente. A -dopção estabelece a máscara padrão ( -m) para todos os novos objetos do sistema de arquivos dentro do diretório. No entanto, também precisamos executar o comando novamente sem a -dopção para aplicar a ACL ao próprio diretório. Em seguida, substitua as referências a "/var/www" por "/var/www/public" em um arquivo de configuração e recarregue.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Se quiséssemos restringir a exclusão e renomeação de todos, exceto do usuário que criou o arquivo: sudo chmod +t /var/www/public. Dessa forma, se quisermos criar diretórios para frameworks que existem fora da raiz do documento Apache ou talvez criar diretórios graváveis ​​pelo servidor, ainda é fácil.

Diretório de logs graváveis ​​do Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Diretório da biblioteca legível pelo Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

Um pouco de "brincadeira" em um diretório que não importa deve ajudar a fazer isso da maneira certa para sua situação.

Quanto às restrições, utilizo duas abordagens diferentes: o shell, rssh, foi feito para fornecer acesso SCP/SFTP, mas sem acesso SSH; ou, para restringir o uso a um diretório inicial, você pode usar o subsistema internal-sftp, configurado em /etc/ssh/sshd_config.

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

Crie um grupo chamado, por exemplo, sftponly. Torne os usuários membros do grupo sftponly. Mude seus diretórios pessoais para /por causa do chroot. O diretório, /home/username, deve pertencer ao root. Você também pode definir o shell do usuário como /bin/false para impedir o acesso SSH. Estou principalmente preocupado com o acesso interativo, então geralmente siga o rsshcaminho. (Eles não podem escrever em nenhum lugar, exceto onde eu defini a capacidade de gravação.)

informação relacionada