Unix restringe o usuário a listar apenas arquivos de propriedade do usuário em um diretório

2

Eu tenho um diretório que diz /data e 3 usuários - user1, user2, user3

cada usuário tem uma pasta em /data

[root@localhost ~]# ls -lrt /data
total 64
drwx------.  2 root        root        16384 May 19  2017 lost+found
drwx------.  2 user1       user1        4096 Jun  7  2017 user1
drwx------.  3 user2       user2        4096 Jun 12  2017 user2
drwx------.  2 user3       user3        4096 Jul 16  2017 user3

Como defino permissões para que, quando o user1 fizer login e cd em /data e fizer um ls -lrt ou talvez efetuar login via winscp ou qualquer software de ftp / sftp aleatório, eles possam para listar apenas o diretório "user1" e o resto dos diretórios são invisíveis para ele.

por exemplo. deve ser visível como abaixo

[user1@localhost ~]$ ls -lrt /data
total ??
drwx------.  2 user1       user1        4096 Jun  7  2017 user1
[user1@localhost ~]$
    
por mayank.travadi 30.06.2018 / 12:32

2 respostas

3

Isso não pode ser feito. Mas você pode definir as permissões em / data para --x para os outros, para que eles possam apenas (cegamente) fazer o cd em seu diretório, mas não ver o conteúdo de / data em todos:

# chmod 771 /data
    
por 30.06.2018 / 13:21
-1

Isso não é possível usando permissões de modo tradicional no Unix. Isso se deve ao fato de que as permissões para ler um diretório são necessárias para ler o conteúdo do diretório.

Exemplo

Vou usar o comando su para ilustrar o motivo. Eu configurei 3 contas de usuário, user1, user2 e user3.

$ su -c 'whoami' user1
user1
$ su -c 'whoami' user2
user2
$ su -c 'whoami' user3
user3

Aqui está minha estrutura de diretórios:

$ mkdir -p /data/user{1..3}
$ for i in {1..3};do chown user${i}:user${i} /data/user${i};done

$ ls -l /data/
total 12
drwxr-xr-x 2 user1 user1 4096 Jun 30 11:35 user1
drwxr-xr-x 2 user2 user2 4096 Jun 30 11:35 user2
drwxr-xr-x 2 user3 user3 4096 Jun 30 11:35 user3

Se definirmos as permissões de modo que nenhum usuário possa ler o /data , nenhum usuário poderá fazer um ls -l /data .

$ chmod 750 /data

$ su -c 'ls -l /data' user1
ls: cannot open directory /data/: Permission denied

Para permitir que um usuário não seja o proprietário (root) ou o grupo (root), temos que ativar as permissões r-x para qualquer pessoa (ou seja, as outras permissões).

Se apenas ativássemos as permissões r-- , o usuário poderia listar alguns aspectos do diretório, mas não adquirir coisas como as permissões do conteúdo dentro do diretório.

$ chmod 754 /data

$ su -c 'ls -l /data/' user1
ls: cannot access /data/user3: Permission denied
ls: cannot access /data/user2: Permission denied
ls: cannot access /data/user1: Permission denied
total 0
d????????? ? ? ? ?            ? user1
d????????? ? ? ? ?            ? user2
d????????? ? ? ? ?            ? user3

Se tentarmos dar permissões de execução ao usuário, --x , eles poderão acessar os subdiretórios de /data , mas não poderão listar o conteúdo de /data .

$ chmod 755 /data

$ su -c 'ls -l /data/' user1
total 12
drwxr-xr-x 2 user1 user1 4096 Jun 30 11:35 user1
drwxr-xr-x 2 user2 user2 4096 Jun 30 11:35 user2
drwxr-xr-x 2 user3 user3 4096 Jun 30 11:35 user3

E as ACLs?

O uso de listas de controle de acesso (ACLs) pode funcionar aqui? Ao investigar isso, não acho que eles possam te dar algo melhor.

Estou redefinindo as permissões para 750 em /data e adicionei uma ACL para user1 a /data ou --x :

$ chmod 750 /data
$ setfacl -m u:user1:x /data

$ ls -ld /data
drwxr-x---+ 5 root root 4096 Jun 30 11:35 /data

Nosso usuário, user1, não pode mais acessar /data :

$ su -c 'ls -l /data' user1
ls: cannot open directory /data: Permission denied

Mas ainda é possível ver a sub-dir /data/user1 :

$ su -c 'ls -l /data/user1' user1
total 0    

Este é o efeito que o setfacl tinha nas permissões:

    $ getfacl /data
    # file: data
    # owner: root
    # group: root
    user::rwx
    user:user1:--x
    group::r-x
    mask::r-x
    other::---

Qual é o problema?

O problema é que, para ter acesso para listar o conteúdo de um diretório, principalmente /data , o usuário precisa de r-- permissões para fazer isso. Não podemos dar explicitamente 'porções' disso, é tudo ou nada no mundo das permissões de modo no Unix.

    
por 30.06.2018 / 18:19