No Windows, parece que se o usuário tiver permissão de leitura/gravação para o lev5
diretório, mas nenhuma permissão para todos os seus ancestrais, cd c:\lev1\lev2\lev3\lev4\lev5
ainda funcionará.
No Linux, mesmo que eu dê ao usuário permissão total lev5
e rx
permissão para lev4
usar setfacl
, se ele também não tiver rx
permissões para lev1
/ lev2
/ lev3
, cd /lev1/lev2/lev3/lev4/lev5
não funciona.
Não há como fazê-lo funcionar como o Windows?
Uma coisa que notei é que se o shell do usuário começar em /lev1/lev2/lev3/lev4/
(o usuário sudo estava em /lev1/lev2/lev3/lev4/
, e mudar para o usuário usando sudo -u
lá, o usuário pode cd ./lev5
. Por um momento, me perguntei se esse é um recurso de segurança para ocultar a existência de diretórios ancestrais como lev1
ou lev2
do usuário (ou seja, o usuário só sabe lev5
que existe sob lev4
e nada mais), mas não parece ser o caso porque executar pwd
no shell do usuário fornece o caminho completo /lev1/lev2/lev3/lev4/lev5
, então não vejo sentido em impedir o usuário de usar caminho completo cd
.
Existem essencialmente duas maneiras de olhar para algo como
/lev1/lev2/lev3/lev4/lev5
, como uma única coisa ou como uma sequência/
,lev1
,lev2
,lev3
,lev4
,lev5
. Se você fizer o primeiro, de fato não há razão para não exigir acesso ao objeto. No entanto, visualizá-lo como uma sequência e resolvê-lo passo a passo permite que você faça coisas mais sofisticadas. Por exemplo, resolver um nome pode levá-lo a algum armazenamento de rede. Não é razoável esperar que o sistema operacional em uma máquina conheça os detalhes de cada dispositivo de armazenamento de rede que pode ser conectado para que possa decidir se você tem direitos sobre o objeto final.O uso
pwd
pode ser enganoso. Frequentemente é um built-in para o shell e é inicializado a partir de umaPWD
variável de ambiente. Antigamente,/bin/pwd
trabalhava mudando para..
e depois procurando no diretório atual por algo que correspondesse ao local onde estava. Ele repetiu isso até chegar a/
. Com essa abordagem, se você removeu o acesso em algum diretório pai, poderá obter falhas de/bin/pwd
. Hoje em dia, no Linux, o kernel rastreia onde você está e tudo o/bin/pwd
que faz é chamar agetcwd
chamada do sistema.