Estou observando o seguinte comportamento e quero saber se ele é esperado.
Estou tentando executar o uso do disco ( du
) como user2
em um diretório test_directory
que pertence a user1
.
Se eu alterar as permissões para permitir acesso total a todos (usando chmod 777 test_directory
), ambos user1
e user2
poderão ver corretamente o uso do disco, conforme o esperado:
No entanto, se eu restringir o acesso executável para outros usuários (usando chmod 776 test_directory
), user2
não será possível executar du
e ocorrerá um erro de permissão:
Além disso, o diretório mostra como tendo tamanho de 4096 bytes no caso do erro.
Por que as permissões executáveis são necessárias para que um usuário possa solicitar o uso do disco com du? Eu teria ingenuamente esperado que apenas permissões de leitura fossem necessárias (ou seja,
chmod 774
). Na verdade, parece que as permissões de leitura e execução são necessárias para executar du (ou sejachmod 775
).Por que o tamanho padrão do diretório é de 4096 bytes neste caso?
Obrigado!
Sem a
x
permissão execute/access ( ) emdir
, você não pode chamarstat()
,dir/foo.bin
e não pode ver o tamanho dele. Ter apenas ar
permissão de leitura ( ) permite listar apenas os nomes dos arquivos, mas os nomes são tudo o que você obtém em geral.Em alguns sistemas,
readdir()
pode fornecer mais informações do que apenas os nomes, mas não tenho certeza se algum sistema pode fornecer o tamanho do arquivo lá. Os sistemas de arquivos Linux podem fornecer o tipo de arquivo, que nunca muda durante o tempo de vida do inode e da entrada do diretório. Mas algo que varia constantemente, como o tamanho, é mais difícil de obter apenas do diretório em um sistema de arquivos em que os inodes são separados da listagem do diretório.Mesmo se você obtiver o tamanho com
readdir()
, apenas lerdir/
não fornecerá o tamanho dedir/sub/bar.bin
, você precisará lerdir/sub
para isso. E sem permissão de acesso nodir
, você não pode.O tamanho de um diretório é apenas o tamanho da lista de arquivos, não inclui os tamanhos dos próprios arquivos. Portanto, não lhe diz muito. Esses 4 kB são comuns para, por exemplo, ext4, é apenas um bloco do sistema de arquivos, o mínimo que o sistema de arquivos precisa alocar. Da mesma forma que com um arquivo, você pode obter o tamanho apenas com
x
permissões no diretório que o contém. (por exemplo, você precisax
obterdir/
o tamanho dedir/file.txt
oudir/subdir/
.)Então, sim, você precisa de permissões de leitura e acesso para verificar efetivamente toda a árvore de diretórios.
Veja também: Executar vs Ler bit. Como funcionam as permissões de diretório no Linux?