Confuso sobre o bit “execute” de um diretório [duplicado]

2

Eu li que, se o bit "execute" não estiver definido em um diretório, você não poderá definir esse diretório como o diretório de trabalho do seu processo.

Mas eu não entendo porque é que, quando você define o diretório de trabalho do seu processo, você está apenas alterando uma string na memória do seu processo. Então, o que a configuração do diretório de trabalho do seu processo tem a ver com o bit "execute" de um diretório?!

    
por user9002947 07.12.2017 / 23:51

2 respostas

3

Do ponto de vista do kernel unix, alterar seu diretório de trabalho requer a chamada da chamada de sistema chdir() .

Esta chamada de sistema executa verificações de permissões no kernel para ver se o processo tem permissão de execução para esse caminho. Isto é apenas por definição / especificações do unix.

Se não tiver permissão, a chamada do sistema retornará um erro. Em caso afirmativo, o diretório de trabalho atual é alterado para o processo.

Esse estado é, na verdade, representado como um ponteiro para o inode do diretório, não uma cadeia simples. É por isso que você pode renomear um diretório que um processo esteja ocupando.

Nota: você pode realmente executar sem ler em um diretório. Ler permite ler a listagem do diretório. Com a execução somente você poderia cd para um diretório e abrir um arquivo se você já sabia seu nome.

    
por 08.12.2017 / 00:08
3

Alterar o diretório de trabalho é um pouco mais complicado do que apenas alterar uma string na memória de processo: ela é mantida no kernel e alterada por uma chamada de sistema. Portanto, o kernel faz uma verificação de controle de acesso quando o diretório de trabalho é alterado. Além disso, se o x bit não estiver definido em um diretório, não será possível acessar nenhum arquivo dentro do diretório, independentemente do diretório de trabalho.

O conceito de "execução" de um diretório realmente não existe na maneira como o conceito de executar um programa, chamando-o de bit "executar" em um diretório é um pouco enganador. Mas muitas vezes é chamado por outros nomes, a especificação POSIX chama isso de "executar / search "permissão, e eu vi isso chamado a permissão" access ". As páginas man do GNU também o chamam de "pesquisa", por ex. chdir(2) em erros:

EACCES Search permission is denied for one of the components of path.

Da mesma forma que você não pode "executar" um diretório, você também não pode "pesquisar" ou "acessar" um arquivo regular, então é compreensível que o mesmo bit tenha sido reutilizado nos tempos antigos.

    
por 08.12.2017 / 00:20