Não está totalmente claro para mim o que você está pedindo, mas parece que você deseja que um usuário ( user1
) compartilhe determinados subdiretórios (por exemplo, /home/user1/project1
) com outros usuários ( user2
) sem permitir acesso total ao seu diretório inicial ( /home/user1
). Acho que a maneira padrão de conseguir isso seria criar um grupo específico de projeto para esse diretório e, em seguida, usar ACLs (Listas de Controle de Acesso) e o bit setgid para manter as permissões apropriadas e a propriedade dos arquivos nesse diretório. No seu caso, você provavelmente poderia executar os seguintes comandos:
groupadd project1
chown -R user1:project1 /home/user1/project1
chmod -R g+s /home/user1/project1
setfacl --default --modify group:project1:rwx /home/user1/project1
setfacl --modify group:project1:rwx /home/user1/project1
Você adicionaria as contas de usuário desejadas ao grupo project1
, por exemplo:
usermod -a -G project1 user2
Segue uma explicação mais detalhada.
Vamos analisar um exemplo de como poderíamos configurar o tipo de configuração que você descreveu. Todos esses comandos são executados como root.
Primeiro, vamos criar alguns usuários:
useradd -m user1
useradd -m user2
Em seguida, vamos criar um diretório de projeto no diretório inicial do primeiro usuário:
sudo -u user1 mkdir /home/user1/project1
Agora vamos criar um grupo associado a esse projeto e defini-lo como o proprietário do grupo para o diretório do projeto:
groupadd project1
chown -R user1:project1 /home/user1/project1
E vamos adicionar os dois usuários ao grupo desse projeto:
usermod -a -G project1 user1
usermod -a -G project1 user2
Agora vamos definir as permissões padrão para o diretório do projeto usando uma ACL (Access Control List):
setfacl --default --modify group:project1:rwx /home/user1/project1
setfacl --modify group:project1:rwx /home/user1/project1
E vamos também ativar o bit setgid:
chmod -R g+s /home/user1/project1
Neste ponto, tudo deve ser bom para ir. Vamos verificar as permissões no diretório do projeto:
root@host:~# ls -ld /home/user1/project1/
drwxrwsr-x+ 2 user1 project1 4096 Nov 13 12:20 /home/user1/project1/
root@host:~# getfacl /home/user1/project1
getfacl /home/user1/project1/
getfacl: Removing leading '/' from absolute path names
# file: home/user1/project1/
# owner: user1
# group: project1
# flags: -s-
user::rwx
group::r-x
group:project1:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:project1:rwx
default:mask::rwx
default:other::r-x
E vamos testar a capacidade de user2
de escrever no diretório do projeto:
root@host:~# sudo -u user2 touch /home/user1/project1/testing
root@host:~# ls -l /home/user1/project1/testing
-rw-rw-r--+ 1 user2 project1 0 Nov 13 12:20 /home/user1/project1/testing