Vou usar a sintaxe de localização do gnu para o sinalizador -perm neste exemplo:
Basicamente - se você jogar fora extensões malucas como ACLs, você tem 3 chocies - proprietário, grupo e "outro" acesso de gravação. Soa como um trabalho por 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, certifique-se de que a saída dos grupos seja a mesma do meu sistema linux de teste
$ groups snoopy
snoopy : snoopy doghouse linus admin wwI woodstock
$
Este é um exemplo aproximado de como você encontraria arquivos graváveis por um usuário. Isso acontecerá quando for executado como qualquer usuário, mas se você executá-lo como um usuário não-uid0, somente encontrará itens que estejam nos diretórios em que o usuário que está executando o script tenha permissões de leitura e execução.
#!/bin/sh
user=snoopy
directory=/
# first files owned by the user and writable
find "$directory" -follow -user "$user" -perm /u+w 2> /dev/null
# now for files that are group writable with the user in that group
for groups in $(groups snoopy 2> /dev/null | cut -f2 -d:)
do
find "$directory" -follow -group "$user" -perm /g+w 2> /dev/null
done
# now for everything else
find "$directory" -follow -perm /o+w 2> /dev/null