Como tornar um caminho legível pelo mundo?

2

Para tornar algum item X legível pelo mundo, não é suficiente que ele tenha as permissões certas: cada componente do caminho absoluto que leva a ele também deve ter as permissões corretas. (Meu entendimento, corrija-me se eu estiver errado, é que o próprio X deve ter seu conjunto de bits legível por todos (4), e todo o componente diretório em seu caminho deve ter seu mundo-executável (1 ) bit set.) Qual é a maneira mais simples de fazer isso?

FWIW, meu melhor palpite seria algo como:

function _mkwr {
    chmod o+x $1 || return 0
    parent=$( dirname $1 )
    if [[ $parent = $1 ]]; then return 0; fi
    _mkwr $parent
}

function mkwr {
    chmod o+Xr $1
    _mkwr $( dirname $1 )
}
    
por kjo 07.03.2013 / 00:31

2 respostas

1

Você está certo sobre as permissões: cada componente do diretório deve ser mundialmente executável, e o item em si deve ser legível por todos (e provavelmente também por ser executável em todo o mundo, se for um diretório).

Um enrugamento adicional é que, se o caminho envolver links simbólicos, você precisará criar todos os diretórios intermediários necessários para resolver também o mundo simbólico do link simbólico.

Se você tem um caminho livre de links simbólicos, um simples loop pode fazer o trabalho:

make_directory_world_accessible () {
  dir=$1
  case $dir in /*) :;; *) dir=$PWD/$dir;; esac
  while [ -n "$dir" ]; do
    chmod a+x "$dir"
    slashes=${dir##*[!/]}; dir=${dir%$slashes}; dir=${dir%/*}
  done
}

Com links simbólicos, você precisa procurar todos os links simbólicos manualmente e recorrer a cada componente do diretório. O kernel faz isso internamente, mas não expõe o processo. Por exemplo, dado um link simbólico /foo/bar -> one/two/three , não apenas você precisa tornar /foo/one e /foo/two public, mas também precisa verificar se one e two são links simbólicos e recorrer adequadamente.

    
por 07.03.2013 / 02:41
5

Você está parcialmente certo. Em um diretório, a permissão x significa a permissão para usar esse diretório para obter os objetos aos quais faz referência. O r right é necessário para ler o diretório, isto é, listar os nomes dos objetos aos quais ele faz referência (observe que se sua permissão for r-- , você poderá listar os nomes, mas não acessar os objetos; se for --x você pode acessar os objetos contanto que você seja capaz de fornecer o nome correto, mas não de listá-los). A permissão w significa modificar o diretório, ou seja, renomear objetos referenciados, excluir referências ou adicionar novos. Novamente, isso é completamente independente das outras permissões.

Outro aspecto é que existem 3 conjuntos de permissões, para o usuário , o grupo e outros (às vezes chamado ugo ). O conjunto de bits do usuário é para o proprietário do arquivo, o grupo para usuários pertencentes ao grupo do arquivo. Ao verificar as permissões, se o usuário que está tentando acessar for o proprietário do arquivo, as permissões de usuário se aplicam. Se o usuário não for o proprietário do arquivo, mas pertencer ao grupo do arquivo, as permissões do grupo serão aplicadas. Somente se nenhum dos casos anteriores se aplicar, as outras permissões serão verificadas.

Observe que, como os bits de permissão são completamente independentes, o acima indica que pode haver arquivos aos quais nem o proprietário nem o grupo têm acesso, mas outros têm permissões completas. Um pouco estranho, mas consistente e simples.

    
por 07.03.2013 / 00:47