Como determinar quais arquivos o usuário atual leu e executou permissões, mesmo quando as permissões foram modificadas

0

Estou tentando criar um script de shell no qual o comando lista todos os arquivos legíveis e executáveis permitidos para mim ou para o usuário atual, quem quer que seja e onde quer que seja o local do usuário. Portanto, mesmo que eu mude de permissões no futuro, as alterações ainda serão refletidas.

Isso é o que eu tenho até agora:

user='id -un'
group='id -gn'

IFS='
'
for file in 'ls -al /home/cg/root'; do
    perm=$(echo $file | awk '{print $1}')
    fileowner=$(echo $file | awk '{print $3}')
    filegroup=$(echo $file | awk '{print $4}')
    ownerreadbit=${perm:1:2}
    ownerexecbit=${perm:3:4}
    groupreadbit=${perm:4:5}
    groupexecbit=${perm:6:7}
    worldreadbit=${perm:7:8}
    worldexecbit=${perm:9:10}
    if ["$user"=="$fileowner" && "$ownerreadbit"=="r" && "$ownerexecbit"=="x"]; then
        echo $file
    elif ["$group"=="$filegroup" && "$groupreadbit"=="r" &&" $groupexecbit"=="x"]; then
        echo $file
    elif ["$worldreadbit"=="r" && "$worldexecbit"=="x"]; then
        echo $file
    fi
done
    
por alphabet122 02.03.2018 / 14:39

2 respostas

4

Por que não usar o comando GNU find ?

find /home/cg/root -readable -executable

ou apenas liste os arquivos:

find /home/cg/root -readable -executable -type f
    
por 02.03.2018 / 14:43
0

A resposta do usuário IporSricer find /home/cg/root -readable -executable é o caminho a percorrer. Observe também que o comando find tem uma vantagem adicional de poder personalizar o formato de sua saída, incluindo opções para incluir muitos detalhes possíveis sobre cada arquivo. Consulte a opção -printf na página man . O objetivo principal desta resposta é tentar fornecer feedback útil para sua pergunta para seus futuros scripts.

  1. Não use a saída de ls para o script! Este é um erro comum de iniciante. ref Por que * não * analisar 'ls'?

  2. Em vez de usar ls , use apenas o arquivo globbing do shell, por exemplo. %código%. Essa é (uma das razões) por que o recurso existe.

  3. Seu script não aparece em subdiretórios, mas a resposta do usuário do IporSricer é.

  4. Você usa mal o recurso de expansão de substring do shell, portanto nenhum dos seus testes deve funcionar. O segundo parâmetro é uma subcadeia comprimento , não uma posição final, portanto /home/cg/root/* retorna uma subseqüência de dois caracteres; você quer ${perm:1:2} para uma substring de único caractere.

  5. Um teste mais rápido seria definir variáveis separadas do formulário ${perm:1:1} e testá-las em relação a "rx".

  6. Surpreende-me que pareça dizer que owner=${perm:1:2} funciona dentro de um comando && test; Eu pensei que só deveria funcionar dentro de um [ .

  7. Como todos os três [[ , if , elif estão fazendo a mesma coisa, um elif , você pode combiná-los em um único echo usando o if logical 'or' operator (fora dos testes || ).

Espero que isso seja útil.

    
por 02.03.2018 / 16:00