Script para encontrar arquivos menos permissivos que 750?

0

Eu preciso escrever uma regra STIG que verificará todos os arquivos dentro do diretório pessoal de um usuário e resultará em um 1 se algum for menos permissivo que 750.

Isso é o que eu fiz até agora.

egrep ":[0-9]{4}:" /etc/passwd | cut -d: -f6 |
while read line; do
  if [ ! -e "${line}" ];then
    exit 1
  else
    if [ 'stat -c "%a" "${line}"' -gt 750 ];then
      exit 1
    fi
  fi
done

No entanto, isso não funciona quando as permissões são um número como 557. Não consigo pensar em uma maneira, pelo menos com o meu nível de habilidade, para fazer isso funcionar.

Como eu verificaria todos os arquivos dentro de um diretório home, e teria que retornar 1 se ele encontrasse um arquivo que fosse menos permissivo que 750?

Exemplo: 751.757, 551, 501, 001, 770, 570 .. tudo deve falhar. Meu script não captura tudo isso.

Para esclarecer: preciso garantir que NENHUM dos arquivos no diretório pessoal tenha QUALQUER "outro" atributo. Se eles têm ethier r, w ou x no "outro", ele precisa falhar. Além disso, no "grupo", ele precisa apenas não ter w. Contanto que não consiga encontrar nenhum arquivo onde o "grupo" tenha escrito ou o "outro" tenha lido, escrito ou executado, então ele deve passar. Se encontrar teses, precisa falhar.

Se eu também pudesse modificar isso para que os arquivos pertencentes à raiz fossem excluídos, isso seria útil

    
por TrevorKS 29.07.2018 / 08:35

1 resposta

1

if any are found to be less permissive than 750

Se os bits de permissão forem 0750 , isso corresponde a rwxr-x--- . Qualquer coisa que tenha, por exemplo bits definidos no grupo "outro", é (basicamente por definição) mais permissivo. Da mesma forma, algo como 0700 é menos permissivo (não dá acesso ao grupo).

No entanto, algo como 0644 / rw-r--r-- seria mais e menos permissivo, pois permitiria o acesso de leitura a "outros", mas não permitiria o acesso de execução a ninguém.

To Clarify: I need to ensure NONE of the files in the home directory have ANY "other" attributes.

Isso, é claro, é diferente da definição acima. Mas também é mais fácil procurar por arquivos que tenham alguns dos conjuntos de permissões definidos, então vamos fazer isso, em vez de procurar por arquivos que tenham apenas um subconjunto de alguns conjuntos de permissões.

Supondo que você tenha o GNU encontrado, há a condição -perm /mode , que significa "Qualquer um dos bits de permissão modo está definido para o arquivo." (veja página de manual ). Portanto, find -type f -perm /027 encontraria quaisquer arquivos regulares que tivessem algum dos bits ----w-rwx set. A condição similar em, e. A localização do FreeBSD é -perm +027 ( página man ).

Então, talvez algo nesse sentido:

x=$(find "$dir" -type f -perm /027 -print -quit)
if [ "$x" != "" ]; then
    echo "some files were found"
fi
    
por 29.07.2018 / 18:21