No Linux, como posso encontrar todos os arquivos e diretórios graváveis (ou, na verdade, não graváveis) por um usuário específico?
Edit: Para esclarecer, eu quis dizer sob um subdir particular, não todo o sistema. E sim, isso significa todas as permutações e combinações de gravabilidade de usuário, grupo e mundo que permitiriam que esse usuário escrevesse. Eu sei o que a pergunta implica semanticamente, eu esperava que um ou poucos liners fossem executados para obter uma lista desses arquivos.
Respostas:
Use o comando 'find' se você tiver o findutils versão 4.3.0 ou superior instalado:
Para todos os arquivos no diretório atual que podem ser gravados pelo usuário atual:
Para todos os arquivos no diretório atual que não são graváveis pelo usuário atual:
De acordo com a página do manual:
fonte
2>&1 | grep -v "Permission denied"
podem ser adicionadosfind . -writable 2>&1 | grep -v "Permission denied"
Você pode criar um script Perl (
writable.pl
) como este:e use esse script, como root, da seguinte maneira:
preenchimento
USERNAME
eDIRECTORY
conforme apropriado.fonte
Tem certeza de que essa é realmente a pergunta que você deseja fazer?
Dizer "Quero ver todos os arquivos nos quais a conta X pode gravar" significa que todos os arquivos pertencentes a eles com u + w, todos os arquivos pertencentes a qualquer grupo ao qual pertencem estão definidos como g + w e todo mundo de arquivo gravável (o + W).
Não gravável seria ainda mais difícil. Seria melhor fazer uma lista de todos os arquivos e excluir aqueles nos quais eles podem gravar.
fonte
Para a resposta de Eddie, se você escrever:
Em seguida, ele percorrerá diretórios com espaços em seus nomes também.
fonte
Vou usar a sintaxe gnu find para a flag -perm neste exemplo:
Basicamente - se você lançar extensões malucas como ACLs, terá três chocies - proprietário, grupo e "outros" acessos de gravação. Soa como um trabalho para um loop.
Há muito espaço para otimizar isso, mas deixarei isso para outra pessoa ... Além disso, nunca consigo me lembrar de todos os detalhes de encontrar e cruzar sistemas de arquivos e esse tipo de bobagem. Além disso, verifique se a saída dos grupos é igual à do meu sistema linux de teste
Este é um exemplo aproximado de como você encontra arquivos graváveis por um usuário. Isso será executado quando qualquer usuário, mas se você o executar como um usuário não uid0, encontrará apenas itens que estão nos diretórios para os quais o usuário que está executando o script possui permissões de leitura e execução.
fonte
Este comando deve encontrar todos os diretórios graváveis, você pode alterar as permissões como achar melhor:
fonte
Não tenho certeza se essa é a melhor maneira, mas deve fazer o que você pede:
é claro que a chave está no
-w
switch, que também pode ser negadaEDIT: Pensando mais sobre isso, este script imprime o que é gravável pelo usuário atual, obviamente não funcionaria para um determinado usuário.
fonte