Ajuda para dar permissões de grupo aos arquivos de outros usuários

3

Eu sou um iniciante do Linux usando o Debian 7 e criei um novo usuário (website) 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 os usuários de outro grupo (desenvolvedores) tivessem acesso ao diretório do usuário. Eu tentei:

$ sudo chown -R :developers /home/website

Eu posso ver que o grupo está atribuído (com ls -la ou stat ) e que os usuários estão no grupo, mas não têm acesso correto?

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

Eu também quero:

  • Permitir outro grupo, acesso de 'contratados' a arquivos de sites

  • Restringir o acesso de usuários do site somente aos seus diretórios pessoais

  • Garanta que os novos arquivos de 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)?

    
por CMSCSS 05.05.2014 / 01:30

1 resposta

2

É difícil dar comandos precisos sem conhecer o O / S ou a distribuição; e sim! A ACL funcionaria, mas também há um modo padrão.

adduser e useradd , um deles na sua distribuição pode criar o diretório pessoal do usuário automaticamente. Em caso afirmativo, o conteúdo do diretório /etc/skel/ seria copiado para o diretório inicial do usuário, as permissões definidas e talvez algumas outras ações apropriadas pudessem ocorrer.

Podem existir grupos pré-definidos para compartilhamento, como "equipe", mas se quisermos criar nosso próprio grupo para compartilhar, não há nada de errado com isso. Então, crie um novo grupo ou use e grupo existente. Certifique-se de que os usuários que serão membros do grupo tenham sido definidos como usermod , moduser ou vigr talvez, de acordo com sua distribuição * nix. Cada usuário precisará efetuar logout se estiver logado para se tornar um membro.

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. Eu recomendo não usar um diretório dentro do diretório pessoal do usuário. Se ninguém, a não ser 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 for ok por "outros", use 0775. O proprietário do diretório deve ser quase certamente 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 bit do bastão:

chmod +t /home/share_directory/

Esses exemplos definem os bits setuid e sticky ao mesmo tempo usando a notação octal :

chmod 5775 /home/share_directory/

ou

chmod 5770 /home/share_directory/

Para a pergunta atualizada, parece que a ACL é a ferramenta certa. Demora um pouco de trabalho, no entanto, para começar. Primeiro monte os sistemas de arquivos com a opção acl em / etc / fstab.

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

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

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

(Ou o grupo pode ser "contratados".) O usuário precisa efetuar logout e novamente para se tornar um membro do grupo de desenvolvedores. Naturalmente, não faça isso se você tiver conteúdo no diretório / var / www que deseja, mas apenas para ilustrá-lo para iniciar:

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, a diferença entre os comandos setfacl é a seguinte: a primeira instância usa o grupo padrão (o proprietário do grupo do diretório), enquanto o segundo especifica explicitamente um grupo. A opção -d estabelece a máscara padrão ( -m ) para todos os novos arquivos e diretórios no diretório. No entanto, execute o comando novamente sem a opção -d 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: %código%. Dessa forma, se quisermos criar diretórios para estruturas que existam fora da raiz do documento do Apache ou talvez criar diretórios graváveis pelo servidor, ainda assim será fácil.

Diretório de registros 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 por Apache:

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

Um pouco liitle de "play" em um diretório que não importa deve ajudar a obter isso apenas para a sua situação.

Em restrições, uso duas abordagens diferentes: o shell, sudo chmod +t /var/www/public , foi feito para fornecer acesso a SCP / SFTP, mas sem acesso a SSH; ou, para restringir o uso a um diretório pessoal, você poderia usar o subsistema interno-sftp, configurado em rssh :

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 um membro do grupo sftponly. Altere seus diretórios iniciais para /etc/ssh/sshd_config por causa do chroot. O diretório / home / username deve ser de propriedade de root. Você também pode definir o shell do usuário para / bin / false para impedir o acesso SSH. Principalmente, estou preocupado com o acesso interativo, portanto, geralmente use o caminho / . (Eles não podem escrever em qualquer lugar exceto onde eu defini a habilidade de gravação.)

Atualizar

Nas ACLs, esqueci a natureza das ACLs do Linux. Ao usar a opção rssh , todos os novos arquivos e diretórios dentro de um diretório com uma ACL usarão as ACLs definidas. No entanto, uma ACL para o diretório em si também deve ser aplicada .

Desconfie do caso de uso das ACLs. Por exemplo, talvez nem todos os clientes SCP / SFTP estejam cientes das ACLs.

    
por 05.05.2014 / 02:10