Permitir que um usuário leia os diretórios pessoais de outros usuários

10

Eu sou novo na administração do sistema e tenho uma consulta relacionada à permissão. Eu tenho um grupo chamado administration. Dentro do administrationgrupo, eu tenho os usuários user1, user2, user3, superuser. Todos os usuários estão no administrationgrupo. Agora, preciso conceder permissões ao usuário superuserpara poder visualizar o /homediretório dos outros usuários. No entanto, eu não quero user1, user2, user3para ver a casa de qualquer outro usuário que não seja ele mesmo. (Ou seja, user1deve poder ver apenas user1a casa e assim por diante).

Eu criei os usuários e grupos e designei todos os usuários ao grupo. Como devo especificar as permissões para o superuseragora?

Em outras palavras, estou pensando em ter dois grupos (digamos NormalUserse Superuser). O NormalUsersgrupo terá os usuários user1, user2e user3. O Superusergrupo terá apenas o usuário Superuser. Agora, eu preciso Superuserter acesso total aos arquivos dos usuários do grupo NormalUsers. Isso é possível no Linux?

Ramesh
fonte
Como isso é diferente da sua pergunta anterior ?
Gilles 'SO- stop be evil' '
Na minha pergunta anterior, eu estava mais preocupado em editar o arquivo / etc / sudoers e tornar o usuário um administrador parcial. Aqui, estou tentando modificar as permissões de um usuário local. Sim, é semelhante ao que estou tentando alcançar, mas estou tentando abordar um método diferente aqui.
Ramesh

Respostas:

10

Se os usuários forem cooperativos, você poderá usar as listas de controle de acesso (ACL). Defina uma ACL no diretório inicial de user1(e amigos) que concede acesso de leitura superuser. Defina também a ACL padrão, para arquivos recém-criados, e também a ACL nos arquivos existentes.

setfacl -R -m user:superuser:rx ~user1
setfacl -d -R -m user:superuser:rx ~user1

user1 pode alterar a ACL em seus arquivos, se ele desejar.

Se você deseja sempre fornecer superuseracesso de leitura aos user1arquivos de, você pode criar outra visualização dos diretórios pessoais dos usuários com permissões diferentes, com bindfs .

mkdir -p ~superuser/spyglass/user1
chown superuser ~superuser/spyglass
chmod 700 ~superuser/spyglass
bindfs -p a+rX-w ~user1 ~superuser/spyglass/user1

Os arquivos acessados ​​por ~ superuser / spyglass / user1 são legíveis pelo mundo. Além das permissões, ~superuser/spyglass/user1é uma exibição do user1diretório inicial do. Como superuseré o único usuário que pode acessar ~superuser/spyglass, somente superuserpode se beneficiar disso.

Gilles 'SO- parar de ser mau'
fonte
No meu sistema, as permissões e o nome de usuário são trocados: setfacl -R -m user:superuser:rx ~user1.
Aurélien Ooms
10

Você pode usar ACLs para conceder acesso a um diretório específico para um grupo arbitrário.

Por exemplo, se você executou setfacl -m g:dba:rwx /home/foo, os membros do grupo dba teriam permissões rwx, independentemente de qual grupo possua o diretório.

Você provavelmente também desejará definir a ACL "padrão" (a ACL para objetos recém-criados dentro do diretório) para incluir também essa permissão.

derobert
fonte
sim, exatamente ... Descobri o mesmo também, mas ainda não tenho certeza se é uma boa idéia conceder ACLs no servidor para os usuários LDAP.
Ramesh
@ Jamesh Bem, se eles são usuários do sistema (porque você está usando o nss-ldap, sssd, etc.), então não sei por que não seria bom.
Derobert
Eu estava tentando replicar isso na cama de teste. Ao fazer login como usuário (por exemplo, foo), vejo uma mensagem de aviso como "as permissões devem ser definidas como 644". Eu acredito que o aviso pode ser ignorado. Mas não quero que os usuários do laboratório saibam que suas contas de usuário foram comprometidas. Quando altero o rwx para apenas r no comando setfacl, não consigo ver o diretório do foo.
Ramesh
2
@Ramesh Você precisa + x para realmente acessar os diretórios. Não sei o que está lhe dizendo que um diretório deve ser 644, isso é bobagem, deve ser 755 ou similar. Mas de qualquer maneira, o usuário verá um + no campo de permissão de ls e poderá executar o getfacl para vê-lo - não é segredo.
Derobert 19/09/2013
Tudo bem, eu estava recebendo a mensagem de aviso, o diretório $ HOME do usuário deve pertencer ao usuário e não ser gravável por outros usuários. Eu removi a permissão de gravação no comando setacl e agora não vejo a mensagem de aviso.
Ramesh
0

Infelizmente, não há realmente nenhuma maneira de fazer isso diretamente no vanilla Linux.

Você poderá criar um novo grupo em sudoers para os administradores parciais com uma lista branca de comandos aceitáveis ​​que deseja permitir que eles sejam executados.

No entanto, para obter exatamente o que você está pedindo, você teria que usar o Apparmor ou o SELinux para obter o que deseja. Infelizmente, nenhuma dessas ferramentas é fácil de configurar e usar, e os exemplos estão muito fora do escopo de uma resposta rápida aqui.

suíço
fonte
1
O Linux já suporta ACLs há um tempo. As ACLs permitem fazer isso.
Derobert 19/09/13
Sim, encontrei a solução e atualizei a resposta. No entanto, ainda não sei se ele pode ser usado no servidor e isso também para usuários LDAP.
Ramesh
@derobert Pelo que entendi, é impossível conceder a alguém permissões de nível raiz via sudo enquanto usa ACLs para limitar o acesso. Você precisa usar o SELinux ou outro MAC para conseguir isso.
Suíço
1
Eu acho que quando OP diz que o usuário "superusuário", ele quer dizer que literalmente - não é root.
Derobert