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
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 ~]$
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
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.
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
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::---
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.
Tags permissions