Isso pode não ser realmente sobre o rm
comando, pois existem maneiras fáceis de excluir arquivos sem usá-lo . Se o problema é que seus amigos estão rm
usando incorretamente o comando acidentalmente , soluções que restringem o uso desse comando especificamente ou o fazem funcionar de maneira diferente podem ser de alguma ajuda. Por outro lado, se o problema é que seus amigos estão deliberadamente tratando seus dados de uma maneira que você não deseja, é necessário implementar medidas de segurança reais e nenhuma solução que se concentre no rm
próprio comando (ou em qualquer conjunto de comandos discreto) irá mantê-lo seguro.
Você precisa controlar o acesso ou apenas evitar erros honestos?
Supondo que seus amigos saibam que você não deseja que eles excluam seus arquivos, há duas possibilidades:
Eles poderiam estar fazendo isso de propósito. Nesse cenário, seus amigos estão excluindo deliberadamente seus arquivos e você nem pode confiar neles para tentar cumprir seus desejos sobre como eles tratam seus dados quando usam seu computador. A única solução para esse problema é usar uma medida de segurança efetiva real , como Thomas Ward explicou em detalhes . Geralmente, a melhor medida é impedir que eles usem o computador. Mas fazê-los usar suas próprias contas de usuário pode fornecer alguma proteção.
Eles poderiam estar fazendo isso por engano. Nesse cenário, seus amigos são extremamente propensos a acidentes e continuam executando rm
comandos que gostariam que não tivessem. Eles querem tratar você e seus dados com respeito, mas são muito ruins na prática porque continuam executando o comando errado, excluindo o arquivo errado ... ou algo assim. Embora seja bom acreditar que isso é o que está acontecendo, aconselho você a não supor que as pessoas que continuam excluindo seus dados depois que você pediu para parar de operar estão operando sem má vontade.
Além disso, mesmo que suas intenções sejam boas, fornecer contas de usuário separadas ainda é a maneira mais infalível de impedi-los de excluir seus arquivos, além de não permitir que eles usem seu computador.
Se a situação realmente for # 2 - seus amigos não estão tentando excluir seus arquivos, mas precisam de ajuda para não excluí-los acidentalmente , e a única maneira de excluí-los acidentalmente é através do uso indevido inadvertido de um pequeno número de comandos (como rm
) que eles têm problemas específicos para usar corretamente - então as técnicas na resposta da Videonauth podem ser úteis. Mas você deve entender que elas não são medidas de segurança, porque o rm
comando é apenas uma das muitas maneiras fáceis de excluir arquivos . Veja abaixo os detalhes.
Eu recomendo que você se pergunte: "Minha situação é basicamente a mesma que se eu, e não as outras pessoas que usam meu computador, estivessem usando rm
incorretamente?"
Se a resposta for negativa , é uma questão de segurança das informações e você precisa impedir que seus amigos usem sua conta de usuário. Se a resposta for sim , então você pode usar as mesmas abordagens que você usaria se você fosse a pessoa abusar rm
:
- Educação.Seus amigos precisam saber o que estão fazendo e como evitá-lo.
- Alterações na interface. Sem tirar a capacidade real de excluir arquivos (o que requer contas de usuário separadas), você pode dificultar a exclusão acidental de arquivos, fazendo com que seja executado apenas por si só, sem nenhuma ação adicional, não será excluído imediatamente .
rm file
file
A resposta da Videonauth oferece uma abordagem para isso. Nesta resposta, apresento outra.
Mas mesmo que seus amigos não estejam tentando fazer algo errado, você ainda deve considerar tê-los usar suas próprias contas de usuário separadas . Isso ainda resolverá o problema - as mesmas medidas de segurança que protegem os dados da destruição deliberada também os protegerão da destruição não intencional. Mesmo sem intenção maliciosa, se alguém continuar fazendo algo que você não deseja, então você não pode confiar que ele se abstenha de fazer isso.
Fazer rm
solicitação antes da exclusão pode ajudar a evitar alguns erros.
Para ajudar as pessoas a evitar a exclusão acidental de arquivos rm
, você pode criar rm
um alias de shell que realmente é executado rm -i
. Passar o -i
sinalizador para fazer rm
com que ele solicite ao usuário antes de excluir cada arquivo (consulteman rm
).
Você pode fazer isso (para sua conta de usuário) adicionando alias rm='rm -i'
ao seu arquivo .bash_aliases
ou .bashrc
. Veja esta pergunta e essa para detalhes. Isso entrará em vigor para suas conchas do bash recém-abertas.
Isso não fornece segurança real e também não é infalível para evitar erros, porque:
- Eles podem optar por continuar com a exclusão, quando solicitado.
- Eles podem ignorar o alias de várias maneiras, inclusive executando-o
/bin/rm
ou dessalinizando-o ( unalias rm
).
- Existem muitas situações em que a expansão do alias não ocorre e, nessas situações
rm
, não será executada -i
.
- Eles ainda podem excluir arquivos usando qualquer uma das técnicas necessárias, o que não é necessário
rm
(como é o caso da abordagem da Videonauth - veja abaixo).
- Eles ainda podem danificar os dados sem excluir nenhum arquivo, como sobrescrevê-los ou alterar seu conteúdo (como também é o caso da abordagem da Videonauth).
Mas se você não precisa de segurança real (veja acima), esse pode ser o caminho a seguir. Em comparação com a abordagem de impedir que seus amigos usem o rm
comando fornecido pelo sistema :
Alias rm
para rm -i
é menos eficaz na prevenção de erros - até que eles usem alguma outra técnica para remover arquivos. Nesse ponto, impedi-los de usar rm
será totalmente ineficaz, mesmo se eles não estiverem tentando fazer algo errado, pois presumivelmente eles usarão unlink
(ou qualquer um dos inúmeros outros comandos que removem um arquivo) com a mesma falta de consideração.
Por outro lado, como a expansão do alias ocorre apenas em algumas situações - grosso modo, o uso interativo comum do shell - seus amigos podem pensar que serão solicitados quando não forem realmente solicitados (porque o comando está em um script, por exemplo, ou emitido a partir de um shell diferente). A maneira da Videonauth não apresenta esse problema, que é uma vantagem objetiva desse método alias rm='rm -i'
.
Quando um script é executado, a menos que seja escrito deliberadamente para usar aliases, seus aliases não são expandidos nele. Isto significa que aliasing rm
para rm -i
é muito improvável que quebrar nada. Esta é uma vantagem objetiva de alias rm='rm -i'
.
rm
não pode fazer nada que nenhum outro programa perfeitamente comum não possa fazer.
Não há realmente nada de especial rm
. É uma maneira conveniente e auto-documentada de remover arquivos; portanto, restringir o acesso a ele arrisca a quebra de vários scripts que dependem dele. Mas está longe de ser a única maneira de excluir arquivos - é apenas um programa comum.
Alguns comandos executam alguma tarefa que um usuário limitado (não raiz ) não pode executar sem executá-los. Por exemplo, sudo
permite executar programas como outro usuário, após verificar se você tem permissão para fazê-lo. passwd
edita o banco de dados em que as senhas dos usuários estão armazenadas, mas permite alterar sua própria senha (a menos que você seja root e, nesse caso, pode alterar a senha de qualquer pessoa).
/usr/bin/sudo
e /usr/bin/passwd
pode fazer isso porque eles têm o bit setuid definido, como mostra o s
que aparece na coluna mais à esquerda quando você executa ls -l
:
ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root 60272 Feb 18 2016 /bin/rm
-rwsr-xr-x 1 root root 54256 Mar 29 2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo
Observe que /bin/rm
não tem s
: suas permissões são -rwxr-xr-x
, enquanto /usr/bin/passwd
e /usr/bin/so
têm -rwsr-xr-x
. Isso faz com que, independentemente de quem execute passwd
ou sudo
, na verdade, ele seja executado como usuário root, pois o root é o proprietário do executável. (Também há um bit setgid, que, quando definido, faz com que os executáveis sejam executados com a identidade do grupo do proprietário do grupo, em vez da do chamador.)
Exceto por quaisquer vulnerabilidades de segurança que ainda não foram descobertas (ou que foram descobertas, mas ainda não foram corrigidas) sudo
e passwd
são seguras porque esses utilitários são escritos com muito cuidado para que eles possam fazer apenas as coisas que o autor da chamada deve receber. façam.
/bin/rm
não funciona dessa maneira. Não está definido porque não precisa estar. Permissões de diretório (e ocasionalmente permissões de arquivo ) controlam quais arquivos um usuário pode excluir e não precisam se tornar raiz para fazê-lo. Apenas para ficar perfeitamente claro, nunca ative o bit setuidrm
. As implicações de segurança seriam desastrosas, desde então, não importa quem execute rm
, é como se a raiz o executasse! (Os utilitários gostam sudo
e passwd
verificam quem realmente os está executando e verificam se algo é permitido antes de fazê-lo; rm
não faz isso.)
A verificação se o bit setuid (ou setgid) está definido em um executável informará se restringir quem pode executá-lo tem uma chance de melhorar a segurança. Os executáveis que não são setuid (ou setgid) não têm nenhum status especial e qualquer um pode simplesmente copiá-los e executá-los, trazer sua própria cópia de outra máquina, escrever um script ou programa que faça a mesma coisa ou usar outro programa para fazer isso.
Excluindo arquivos sem rm
A maneira óbvia de excluir um arquivo sem rm
no Ubuntu é navegar para sua localização no navegador de arquivos gráfico (Nautilus, se você estiver usando o Unity ou o GNOME Shell) e excluir o arquivo. Também existem inúmeros comandos que podem ser usados para excluir um arquivo de um terminal, sem nunca serem utilizados rm
.
Por exemplo, para remover um arquivo chamado foo.txt
no diretório atual, os seguintes comandos, que funcionam imediatamente no Ubuntu e não requerem acesso rm
, o conseguirão. (Só para ter certeza, eu os testei em um sistema mínimo 16.04 instalado com apenas os utilitários de sistema padrão, após a exclusão /bin/rm
.)
unlink foo.txt
busybox rm foo.txt
perl -e 'unlink("foo.txt")'
python3 -c 'import os; os.remove("foo.txt")'
(em python
vez de python3
em versões mais antigas)
Naturalmente, essa lista está longe de estar completa. Nenhuma lista completa de tais comandos é possível. Impedir a exclusão de arquivo é uma das coisas que as contas de usuário separadas e as permissões de arquivo e diretório existem para alcançar. Eles funcionam muito bem para evitá-lo. Por outro lado, alterar o rm
comando (para exigir uma senha ou de qualquer outra forma) ou restringir o acesso para rm
não impedi-lo.