Rapidamente tornar um arquivo legível e seu caminho executável?

5

Se eu tenho um arquivo que quero tornar legível para o mundo, mas é profundo em várias camadas de diretórios que não são executáveis no mundo, eu tenho que alterar as permissões para o caminho inteiro e o arquivo.

Eu posso fazer chmod 755 -R /first/inaccessible/parent/dir , mas isso altera as permissões para todos os outros arquivos nos diretórios de caminho e torna o próprio arquivo executável quando eu apenas quero que ele seja legível.

Existe uma maneira simples de fazer isso em bash?

    
por LangeHaare 23.10.2017 / 12:39

4 respostas

1

Integrando as do chepner astute comentário em relação aos diretórios que apenas realmente necessitam de permissão de execução:

Configuração:

$ mkdir -p /tmp/lh/subdir1/subdir2/subdir3
$ touch /tmp/lh/subdir1/subdir2/subdir3/filehere
$ chmod -R 700 /tmp/lh
$ find /tmp/lh -ls
16    4 drwx------   3 user  group        4096 Oct 23 12:01 /tmp/lh
20    4 drwx------   3 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1
21    4 drwx------   3 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1/subdir2
22    4 drwx------   2 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1/subdir2/subdir3
23    0 -rwx------   1 user  group           0 Oct 23 12:01 /tmp/lh/subdir1/subdir2/subdir3/filehere

Prep:

$ f=/tmp/lh/subdir1/subdir2/subdir3/filehere

Faça:

$ chmod o+r "$f"
$ (cd "$(dirname "$f")" && while [ "$PWD" != "/" ]; do chmod o+x .; cd ..; done)
chmod: changing permissions of '.': Operation not permitted
$ find /tmp/lh -ls
16    4 drwx-----x   3 user  group        4096 Oct 23 12:01 /tmp/lh
20    4 drwx-----x   3 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1
21    4 drwx-----x   3 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1/subdir2
22    4 drwx-----x   2 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1/subdir2/subdir3
23    0 -rwx---r--   1 user  group           0 Oct 23 12:01 /tmp/lh/subdir1/subdir2/subdir3/filehere

Se você realmente preferir que os diretórios intermediários também tenham permissões de execução, apenas altere o comando chmod para chmod o+rx .

A mensagem de erro que recebi dos resultados acima do meu ID de usuário não-raiz tentando alterar as permissões do diretório /tmp , que eu não possuo.

O loop é executado em um subshell para isolar a alteração de diretórios do $ PWD do seu shell atual. Ele inicia o loop digitando o diretório que contém o arquivo, em seguida, faz um loop para cima, chmod'ing ao longo do caminho, até que ele fique no diretório raiz / . O loop sai quando atinge o diretório raiz - ele não tenta chmodar o diretório raiz.

Você pode criar um arquivo de script ou uma função dele assim:

function makeitreadable() (
  chmod o+r "$1"
  cd "$(dirname "$1")" &&
    while [ "$PWD" != "/" ]
    do
      chmod o+x .
      cd ..
    done
)
    
por 23.10.2017 / 18:18
7

Uma maneira de fazer isso:

#! /bin/sh
fname=/full/path/to/file
dir=${fname%/*}
while [ x"$dir" != x ]; do
    chmod 0755 "$dir"
    dir=${dir%/*}
done
chmod 0644 "$fname"
    
por 23.10.2017 / 12:50
0

Isso mudará as subpastas para 0755

find /first/inaccessible/parent/dir -type d -exec chmod 0755 {} \;

Isso irá procurar por seu arquivo e alterar suas permissões

chmod +r $(find /first/inaccessible/parent/dir -type f -name YourFileName)

Espero que ajude. (FYI: por padrão pastas devem ter 0755)

    
por 23.10.2017 / 16:42
-1

Exponha o arquivo em um caminho menos protegido

Você deve ser capaz de fazer um link simbólico para o arquivo, a partir de um caminho diferente em seu sistema de arquivos - que deve tornar o arquivo original acessível, com quaisquer permissões, sem expor todos os outros diretórios e arquivos diretório em que seu arquivo está.

É claro que você precisa ter / disponibilizar um caminho diferente que seja legível pelo usuário / sistema alvo ...

    
por 23.10.2017 / 13:51