Por que o comando rm se comportou assim e que danos eu teria causado?

0

Suponha que estou no diretório / home / userA

Existe um ambiente variável $ XMLFILES que aponta para / u / xml / xmlfiles. A variável de ambiente $ XMLFILES está no ambiente / perfil do usuárioA

Eu faço logon como userA, em seguida, 'su' no userB e faço cd em / home / userB / testdata.

Eu não percebi que eu era userB então eu emiti o comando

rm $XMLFILES/*

E de repente eu vejo isso

bash-3.00$ rm $XMLFILES/*
rm: /bin not removed: Permission denied
rm: /boot is a directory
rm: /cdrom is a directory
rm: /dev is a directory
rm: /devices is a directory
rm: /etc is a directory
rm: /export is a directory
rm: /home is a directory
rm: /kernel is a directory
rm: /lib is a directory
rm: /lost+found is a directory
rm: /mnt is a directory
rm: /net is a directory
rm: /noffprotect: override protection 644 (yes/no)? ^C

Eu pressionei [CTRL + C] assim que vi a mensagem de proteção de substituição. Eu acho que desde que $ XMLFILES era nulo porque eu estava logado como userB o comando que foi emitido era realmente

rm *

Agora, o que eu não entendo é por que ele tentou excluir tudo da pasta raiz? desde que eu estava em / home / userB, deveria ter apenas tentado apagar tudo no 'nível superior de' / home / userB '? o comando rm não era nem mesmo uma exclusão recursiva.

Considerando que o usuário em que eu estava conectado como não era o usuário root, isso causaria algum dano?

    
por ziggy 13.11.2010 / 19:57

2 respostas

6

Não, como $XMLFILES estava vazio, tentou remover /* . Tudo o que podemos fazer é remover os arquivos do diretório raiz, que um usuário normal não deve ser capaz de criar em primeiro lugar.

    
por 13.11.2010 / 20:01
2

$ XMLFILES teria sido uma string vazia, então o que você teria realmente emitido teria sido

rm ""/*

que teria sido avaliado até

rm /*

É por isso que você precisa ser muito cuidadoso ao usar $ variáveis (isto é, verificar sua existência primeiro) em argumentos de linha de comando.

    
por 13.11.2010 / 20:04