Tentando encontrar qualquer diretório inicial que possa ser escrito por qualquer pessoa

0

Estou tentando localizar diretórios pessoais de qualquer usuário e seus arquivos que podem ser gravados por qualquer pessoa.

Eu escrevi isto:

find /home -type d -perm -200 | grep . || 
   echo no world-writable directories here

Isso só detecta diretórios, mas eu gostaria de adicionar arquivos.

    
por user230654 12.06.2013 / 08:27

2 respostas

0
getent passwd | 
cut -d: -f1,6 | 
while IFS=: read user home; do 
    if [[ -d $home ]] && (( (0$(stat -c %a $home) & 2) == 2 )); then 
        echo $user $home
    fi
done

O teste para writable mundial também pode ser escrito assim:

[[ $(stat -c %A $home) == *?w? ]]

Explicado:

  1. getent passwd - obtém informações sobre todos os usuários no sistema em um formato / etc / passwd
  2. cut ... - selecione apenas o ID do usuário e o diretório inicial
  3. [[ -d $home ]] - assegura que home dir é um diretório
  4. (( (0$(stat -c %a $home) & 2) == 2 )) :% stat -c %a $home retorna as permissões do arquivo no formato octal (ex: 755 ). Prefixe um zero para que o bash saiba que é um número octal. Em seguida, execute um bit a bit e obtenha o bit "gravável pelo mundo". Se esse valor for zero, o diretório não será gravável pelo mundo. Se o valor for 2 (binário 10), então o diretório é mundialmente gravável.
  5. Então, se é um diretório, e é mundialmente gravável, então envie o ID do usuário e o diretório.
  6. o formulário alternativo [[ $(stat -c %A $home) == *?w? ]] examina as permissões do arquivo em forma de string (ex: drwxr-xr-x ) e verifica se o segundo caractere é um "w"
por 12.06.2013 / 11:22
0

Não tenho certeza do que você está tentando fazer. Se você quiser encontrar todos os arquivos e diretórios em /home com permissões de 200 , faça

find /home -perm -200

No entanto, essa não é a lista de arquivos e pastas graváveis do mundo, 200 significa que o arquivo pode ser gravado por seu proprietário. Se você quiser que todos os arquivos e pastas que podem ser escritos por todos façam isso:

find /home -perm -a=w

Seu grep . não faz nada. . significa "Corresponder QUALQUER personagem", por isso sempre será verdade. Se você estiver procurando por arquivos ou pastas cujo nome comece com . , você pode precisar de grep "^\." .

    
por 12.06.2013 / 19:09