Verificando se os dotfiles dos usuários não são agrupáveis ou podem ser gravados em todo o mundo

1

Preciso verificar se os arquivos pontilhais do usuário não são agrupáveis ou podem ser gravados pelo mundo: O comando abaixo listará todos os arquivos:

find /home/ -name "\.*" -perm /g+w,o+w

Saída:

/home/system/.java
/home/ldap/.java

Minha consulta é, como faço SSH para a máquina (várias VMs) e, em seguida, encontrar esses arquivos usando o comando acima e corrigi-lo usando:

chmod go-w /home/<\USER><\FILE>
chmod go-w /home/<\USER>/<\DIRECTORY>

Eu preciso escrever um script de shell.

    
por Prashant Singh 08.08.2015 / 08:11

2 respostas

3

Você pode usar apenas o loop para executar chmod em todos os arquivos / pasta retornados pelo comando find.

for i in 'find /home/ -name ".*" -perm /g+w,o+w'; do chmod go-w $i; done

Isto irá executar chmod em todos os arquivos / pastas que foram encontrados com o comando find.

É assim que se parece com um script bash.

#!/bin/bash
for i in 'find /home/ -name ".*" -perm /g+w,o+w'; do chmod go-w $i; done

EDITAR:

Acrescentar apenas -exec chmod g-w,o-w "{}" \; ao final do find, como sugerido por Drav Sloan no comentário da questão, é muito mais eficiente que o loop.

Então você pode usar apenas

find /home/ -name ".*" -perm /g+w,o+w -exec chmod g-w,o-w "{}" \;

ou como script bash:

#!/bin/bash
find /home/ -name ".*" -perm /g+w,o+w -exec chmod g-w,o-w "{}" \;

Se você salvá-lo como script.sh, poderá executá-lo com:

bash script.sh

Se você deseja executar o loop remotamente, algo assim deve funcionar se você colocar script.sh em todas as máquinas:

ssh machine "bash script.sh"

ou se for apenas localmente

ssh machine 'bash -s' < script.sh

Se você deseja executar um script em vários servidores, pode colocar o ssh em loop ou usar o utilitário pssh.

Se você colocar todos os servidores no arquivo serverlist, poderá usar o pssh para executar o script local em todos esses servidores:

pssh -h serverlist -i -I < script.sh

ou com loop for e ssh:

for i in 'cat serverslist'; do ssh $i 'bash -s' < script.sh; done
    
por 08.08.2015 / 08:24
0

Se tudo o que você quer fazer é forçar os arquivos a serem não graváveis, o que não deveria ser suficiente?

$ chmod g-w,o-w ~/.*
    
por 08.08.2015 / 08:24