Isso pode não ser realmente sobre o comando rm , pois existem maneiras fáceis de excluir arquivos sem usá-lo . Se o problema é que seus amigos estão, inadvertidamente, usando indevidamente o comando rm , as soluções que restringem o uso desse comando especificamente ou fazem com que ele funcione 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 forma que você não deseja, então você precisa implementar medidas de segurança , e nenhuma solução que se concentre no comando rm (ou qualquer conjunto discreto de comandos) irá mantê-lo seguro.
Você precisa controlar o acesso ou apenas evitar erros honestos?
Supondo que seus amigos saibam que você não quer que eles excluam seus arquivos, há duas possibilidades:
-
Eles podem estar fazendo isso de propósito. Nesse cenário, seus amigos estão deliberadamente excluindo seus arquivos e você não pode confiar neles para tentar obedecer com seus desejos sobre como eles tratam seus dados quando eles usam seu computador. A única solução para este problema é para usar uma medida efetiva de segurança efetiva , como Thomas Ward explicou em detalhes . Muitas vezes, a melhor medida é evitar que eles usem o computador. Mas fazê-los usar suas próprias contas de usuário pode fornecer alguma proteção.
-
Eles podem estar fazendo isso por engano. Nesse cenário, seus amigos são extremamente propensos a acidentes e continuam executando rm dos comandos que desejam que não tivessem. Eles querem tratar você e seus dados com respeito, mas são muito ruins em fazer isso na prática, porque eles continuam executando o comando errado, excluindo o arquivo errado ... ou algo parecido. Embora seja bom acreditar que isso é o que está acontecendo, aconselho-o a não presumir que as pessoas que continuam excluindo seus dados depois de mandá-las parar estão operando sem má vontade.
Além disso, mesmo que suas intenções sejam boas, dar a elas contas de usuário separadas ainda é a maneira mais fácil de evitar que eles excluam seus arquivos, além de não permitir que eles usem seu computador.
Se a situação for realmente a # 2 - seus amigos não tentar excluir seus arquivos, mas precisarem de ajuda para não acidentalmente excluí-los, e a única maneira como eles já acidentalmente excluí-los é através do inadvertido uso indevido de um pequeno número de comandos (como rm ) que eles têm problemas específicos usando corretamente - então as técnicas da resposta do Videonauth podem ser de alguma utilidade. Mas você deve entender que elas não são medidas de segurança, porque o comando rm é apenas uma das muitas maneiras fáceis de excluir arquivos . Veja abaixo para detalhes.
Eu recomendo que você se pergunte: "A minha situação é basicamente a mesma que se eu, em vez das outras pessoas que usam o meu computador, fosse a pessoa que usava rm incorretamente?"
Se a resposta for não , então, isso é uma questão de segurança da informação, e você precisa impedir que seus amigos usem sua conta de usuário. Se a resposta for yes , então você pode usar as mesmas abordagens que você usaria se você fosse a pessoa usando indevidamente rm :
-
Educação. Seus amigos precisam saber o que estão fazendo e como evitá-lo.
-
Mudanças de interface. Sem eliminar a capacidade real de excluir arquivos (o que requer contas de usuário separadas), você pode tornar mais difícil acidentalmente excluir arquivos, tornando-a tão simples co_de% por si só, sem nenhuma ação adicional, não excluirá imediatamente
rm file . A resposta da Videonauth oferece uma abordagem para isso. Nesta resposta, apresento outro.
Mas mesmo que seus amigos não estejam tentando fazer nada de errado, você ainda deve considerar que eles usem suas próprias contas de usuário separadas . Isso ainda resolverá o problema - as mesmas medidas de segurança que protegem os dados contra a destruição deliberada também o protegerão da destruição não intencional. Mesmo sem intenções maliciosas, se alguém continuar fazendo algo que você não quer que eles façam, então você não pode confiar neles para evitar fazer aquilo.
Tornar file pronta antes da exclusão pode ajudar a evitar alguns erros.
Para ajudar as pessoas a evitar acidentalmente a exclusão de arquivos com rm , você pode criar rm a alias do shell que, na verdade, executa rm . Passar o sinal rm -i para -i faz com que ele avise o usuário antes de excluir cada arquivo (veja rm ).
Você pode fazer isso (para sua conta de usuário) adicionando man rm ao seu arquivo alias rm='rm -i' ou .bash_aliases . Veja esta questão e aquele para detalhes. Isso entrará em vigor para as suas conchas de bash recém-abertas.
Isso fornece nenhuma segurança real e não é infalível na prevenção de erros, porque:
- Eles podem optar por prosseguir com a exclusão, quando solicitado.
- Eles podem ignorar o alias de várias maneiras, inclusive executando
.bashrc ou unaliasing ( /bin/rm ).
-
Existem muitas situações em que a expansão de alias não ocorre e, nessas situações,
unalias rm não será executado com rm .
- Eles ainda podem excluir arquivos usando qualquer uma das técnicas para fazer isso que não exigem
-i (como é o caso com A abordagem do Videonauth - veja abaixo).
- Eles ainda podem danificar dados sem excluir nenhum arquivo, por exemplo, sobrescrevendo-os ou alterando seu conteúdo (como também acontece com a abordagem da Videonauth).
Mas se você não precisa de segurança real (veja acima), então este pode ser o caminho a percorrer. Em comparação com a abordagem de impedir que seus amigos usem o comando rm fornecido pelo sistema:
-
Aliasing rm to rm é menos eficaz na prevenção de erros - até que eles passem a usar outra técnica para remover arquivos. Nesse ponto, impedi-los de usar rm -i será totalmente ineficaz, mesmo se eles não estiverem tentando fazer algo errado, já que presumivelmente eles usarão rm (ou qualquer um dos inúmeros outros comandos que removem um arquivo) com igual irreflexão.
-
Por outro lado, como a expansão de alias só ocorre em algumas situações - grosso modo, uso interativo comum do shell - seus amigos podem pensar que eles serão solicitados quando não forem realmente solicitados (porque o comando está em um script, por exemplo, ou emitido de um shell diferente). O jeito da Videonauth não tem esse problema, que é uma vantagem objetiva desse método sobre unlink .
-
Quando um script é executado, a menos que seja escrito deliberadamente para usar aliases, seus aliases não são expandidos nele. Isso significa que é muito improvável que o aliasing alias rm='rm -i' to rm quebre nada. Esta é uma vantagem objetiva de rm -i .
alias rm='rm -i' não pode fazer nada que outro programa perfeitamente normal não possa fazer.
Não há nada de especial sobre rm . É uma maneira conveniente e autodocumentada de remover arquivos, portanto, restringir o acesso a ele pode quebrar 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 root ) não pode executar sem executá-los. Por exemplo, rm permite que você execute programas como outro usuário, depois de verificar se está autorizado a fazê-lo. sudo edita o banco de dados onde as senhas dos usuários são armazenadas, mas apenas permite você muda sua própria senha (a menos que você seja root, caso em que você pode mudar a senha de qualquer pessoa).
passwd e /usr/bin/sudo podem fazer isso porque têm o conjunto de bit setuid , conforme mostrado pelo /usr/bin/passwd que aparece na coluna mais à esquerda quando você executa s :
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 ls -l não tem /bin/rm : suas permissões são s , enquanto -rwxr-xr-x e /usr/bin/passwd têm /usr/bin/so . Isso faz com que, independentemente de quem executa -rwsr-xr-x ou passwd , ele seja executado como usuário root, já que root é o proprietário do executável. (Há também um bit setgid, que, quando definido, faz com que os executáveis sejam executados com a identidade do grupo do proprietário do grupo, e não do chamador.)
Exceto para quaisquer vulnerabilidades de segurança que ainda não tenham sido descobertas (ou que foram descobertas, mas ainda não foram corrigidas), sudo e sudo são seguras porque esses utilitários são escritos com muito cuidado para que eles possam faça coisas que o interlocutor deve fazer.
passwd não funciona dessa maneira. Não é setuid porque não precisa ser. Permissões do diretório (e ocasionalmente permissões de arquivo ) controlam quais arquivos um usuário pode excluir e não precisam se tornar root para fazer isso.Apenas para ficar bem claro, por favor, nunca defina o bit setuid em /bin/rm . As implicações de segurança seriam desastrosas, desde então, não importa quem executa rm , é como se o root rodasse! (Utilitários como rm e sudo verificam quem os está realmente executando e verificam se algo é permitido antes de fazê-lo; passwd não faz isso.)
Verificar se o bit setuid (ou setgid) está definido em um executável irá dizer se restringir quem pode executá-lo é uma chance de melhorar a segurança. Executáveis que não são setuid (ou setgid) não possuem nenhum status especial, e qualquer um pode simplesmente copiá-los e executar a cópia, 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 até seu local no navegador de arquivos gráficos (Nautilus, se você estiver usando o Unity ou o GNOME Shell) e excluir o arquivo. Há também vários comandos que podem ser usados para excluir um arquivo de um terminal, sem nunca usar rm .
Por exemplo, para remover um arquivo chamado rm no diretório atual, os seguintes comandos, que funcionam de maneira simples no Ubuntu e não requerem acesso a foo.txt , conseguirão isso. (Só para ter certeza, eu os testei em um sistema mínimo 16.04 instalado apenas com os utilitários padrão do sistema, após a exclusão rm .)
-
/bin/rm
-
unlink foo.txt
-
busybox rm foo.txt
-
perl -e 'unlink("foo.txt")' ( python3 -c 'import os; os.remove("foo.txt")' em vez de python em versões mais antigas)
Essa lista, é claro, está longe de ser completa. Nenhuma lista completa de tais comandos é possível. Evitar a exclusão de arquivos é 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 evitar isso. Por outro lado, alterar o comando python3 (para exigir uma senha ou de qualquer outra forma) ou restringir o acesso a rm não o impede.