Questão Como posso configurar uma senha para o comando 'rm'?


Meus amigos continuam apagando meus arquivos usando o terminal. Então, por favor me ajude explicando como fazer uma senha para rm comando.


29
2017-12-27 12:25


origem


Você vai querer proteger com senha a conta do usuário para que esses "amigos" não a acessem em primeiro lugar. - Andrea Lazzarotto
Você deve realmente tentar aprender como o sistema funciona e usar sua funcionalidade. - AlexP
É provável que os seus amigos tentem "ensinar-lhe uma lição", aparafusando o seu computador quando o deixam desprotegido. Aprenda essa lição protegendo sua conta e impedindo o acesso de convidados ou fornecendo acesso de convidado com permissões reduzidas. - Ken Williams
Por favor, lembre-se também sobre o unlink comando. Também sobre o mv comando, porque você pode efetivamente substituir arquivos com ele. Além disso... - Kos
Com amigos como esses, quem precisa de inimigos? - kasperd


Respostas:


Não há maneira fácil de configurar essa senha no rm comando em si, não sem muito hacking de código que provavelmente vai quebrar coisas como apt-get instalar pacotes e remover arquivos, e fazer com que você tenha que digitar a senha milhares de vezes, ou potencialmente interromper o acesso ao comando para pessoas que seria precisa disso (como você, para deletar seus próprios arquivos). Você pode fazer isso com várias contas de usuário e vários conjuntos de permissões de acesso, além de restringir o acesso a diferentes seções de dados, como seu diretório inicial, para que eles não possam ser acessados.

(A outra opção é a conta de usuário individual de cada usuário e, em seguida, as Listas de Controle de Acesso, conforme detalhado na seção outra resposta que foi postado por Videonauth)

Aqui está o problema central - você está deixando seus amigos usarem seu sistema. Este tem numerosos implicações de segurança - o conceito de "qualquer pessoa com acesso físico à caixa será capaz de controlar o sistema e realizar quaisquer tarefas" é um Mantra de Segurança de TI, e é por isso que você não "compartilha" o acesso a sistemas físicos, exceto com confiança pessoal autorizado.


O único verdadeiramente maneira sã de fazer isso é não dar aos seus amigos o acesso a seu computador, e dar-lhes um "convidado" "sistema" dedicado que eles podem usar, que você realmente não se importa com os arquivos em tanto. Essa é a maneira mais "segura" de manter seus arquivos seguros.


É claro que, se isso não for uma opção, sua única opção realmente segura é configurar várias contas de usuário, uma para cada usuário, com diferentes pastas base e não permitir acesso ao seu diretório pessoal ou acesso à casa de qualquer outro usuário. diretórios. E então mantenha tudo o que você não quer que eles toquem no seu diretório pessoal, e não os dê sudo Acesse o root senha ou compartilhe sua senha com eles.

É assim que você faria isso:

Digamos que meu nome seja "Foo" e eu quero que o usuário "Bar", um amigo, use meu sistema, mas não acesse meus arquivos. O primeiro passo é negar o acesso a qualquer pessoa, exceto eu, ao meu diretório pessoal. Isso é para permitir que outros usuários não exclua seus arquivos, mas também evite que outros usuários procurem em seu diretório pessoal e vejam que tipos de coisas você tem em seu diretório pessoal:

chmod 750 /home/Foo

O segundo passo é criar uma conta de usuário para "Bar" (não digite o que está entre parênteses abaixo, é apenas para fins informativos). Dessa forma, podemos garantir que ele tenha seu próprio conjunto separado de direitos de acesso:

sudo adduser --create-home --user-group --shell /bin/bash Bar
sudo passwd Bar
(set a temporary password - you will not see characters as you type though)

o terceiro passo é então restringir o seu diretório home também para que ninguém possa bisbilhotar seus arquivos também. Isso é apenas fazer as coisas iguais.

sudo chmod 750 /home/Bar

Lave as mãos, lave-as bem e repita essas etapas para quantos usuários você tiver no sistema. Eles não poderão acessar seus arquivos e, como você não concederá privilégios de administrador, eles não poderão excluir seus arquivos sem tentar sudopara fazer isso - já que você não permite isso, eles não podem tocar em suas coisas. E eles não poderão ver seus arquivos também, sem se tornarem superusuários, o que não acontecerá aqui.


SEMPRE RECORDE ESTE: Ao conceder a alguém acesso físico à máquina ou acesso em geral, você colocará seus arquivos e dados em risco. Esse é um fato amplamente aceito no mundo de segurança de TI e que continua sendo verdadeiro. Dar a seus amigos acesso ao seu computador sempre colocará seus dados em risco, portanto, dê a eles seu próprio sistema para mexer com eles ou simplesmente não dê acesso a eles seu máquina.


Apenas uma nota sobre criptografia de disco

Embora a criptografia de disco funcione bem para proteger seus dados de terceiros, há limitações.

  1. Se o sistema estiver ligado, o disco já está descriptografado, portanto, você está em risco.
  2. Alguns sistemas têm partido abordagens de criptografia de disco. Por exemplo, alguns sistemas Acer usam sua senha para autorizar somente a criptografia / descriptografia e usar senhas codificadas, ou usar criptografia fraca que é facilmente quebrada.
  3. Há sempre métodos para invadir as 'chaves', ou tentar extraí-las da memória logo após o sistema ser desligado, mas antes que os dados da RAM sejam 'eliminados' ou deteriorados. (Eu não irei em profundidade sobre estes, mas estes riscos Faz existir).
  4. O acesso físico à máquina, quer o sistema esteja criptografado ou não, sempre colocará seus dados em risco. Não forneça acesso físico (ou acesso remoto à rede) a pessoas que você não deseja potencialmente dar acesso total ao seu sistema.

Embora a Criptografia de Disco não resolva esses problemas, ela coloca camadas extras de dores de cabeça para um agente de ameaça. Alguém que é um cara mau pode desistir se é criptografado, ou eles podem torturá-lo (fila obrigatória Tira cômica do XKCD Security).

Portanto, se o seu sistema estiver criptografado, mas você estiver permitindo que outros usuários o utilizem, eles terão uma senha para descriptografar ou se você deixar o laptop descriptografado para que eles possam acessar o SSH ou ter acesso físico. Em ambos os casos, é ruim.

Dito isso, se o seu sistema não estiver criptografado, essa seção não será relevante para você.


46
2017-12-27 12:40



Meu laptop tem um disco rígido criptografado. Está permitindo que outros acessem ainda um risco? - Tim
@Tim Sim, se o sistema estiver ligado e descriptografado. E mesmo quando está desligado, ainda é possível com a tecnologia certa, tempo e dedicação para encontrar chaves de decodificação potencialmente ainda armazenadas na RAM. A criptografia de disco é não100% de proteção - há maneiras de contornar isso, é mais uma questão de "o cara mau está disposto a gastar tanto tempo e esforço nisso". E, a julgar pela pergunta do OP, o sistema está ativado e não criptografado (total ou parcialmente), portanto, o risco de exclusão está presente. - Thomas Ward♦
@Tim Para adicionar à resposta de Thomas, alguns laptops quebraram a implementação de criptografia de disco (se você estiver usando hardware FDE). Laptops Acer AFAIR realmente não usam sua senha para criptografia, eles usam apenas para autorizar a criptografia / descriptografia com senha codificada. - gronostaj
Os dados estarão sempre em risco se a pessoa não confiável tiver acesso a um sistema, criptografado ou não - Sergiy Kolodyazhnyy
@LightnessRacesinOrbit apt-get corre dpkg, qual executa scripts que costumam usar rm. Na minha caixa Xenial, cd /var/lib/dpkg/info; grep -P '\brm\b' *inst produz 344 linhas, dos quais 333 parecem usos reais do rm comando - apenas em instalação scripts. grep -P '\brm\b' *rm mostra ainda mais em scripts de remoção (para excluir arquivos de configuração, não arquivos de pacote). - Eliah Kagan


Isso pode não ser realmente sobre o rm comando, desde existem maneiras fáceis de excluir arquivos sem usá-lo. Se o problema é que seus amigos estão, inadvertidamente, usando rm comando, então 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 quer, então você precisa implementar medidas de segurança reais, e nenhuma solução que enfoque o rm comando em si (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, existem duas possibilidades:

  1. Eles poderiam estar fazendo isso de propósito. Nesse cenário, seus amigos estão deliberadamente excluindo seus arquivos e você não pode confiar experimentar para cumprir seus desejos sobre como eles tratam seus dados quando eles usam seu computador. A única solução para este problema é usar uma medida de segurança efetiva real, 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.

  2. Eles poderiam estar fazendo isso por engano. Nesse cenário, seus amigos são extremamente propensos a acidentes e continuam correndo rm comandos que eles 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 infalível de impedir que eles excluam seus arquivos, além de não permitir que eles usem seu computador.

Se a situação realmente é # 2 - seus amigos não são tentando para apagar seus arquivos, mas só precisa de ajuda não acidentalmente excluindo-os, e a única maneira de apagá-los acidentalmente é através do inadvertido uso indevido de um pequeno número de comandos (como rm) que eles têm problemas em usar corretamente - então as técnicas de Videonauth resposta pode ser de alguma utilidade. Mas você deve entender que não são medidas de segurança, porque a rm comando é apenas um dos muitos 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, 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 sim, então você pode usar as mesmas abordagens que você usaria se você foram o único uso indevido 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 dificultar acidentalmente excluir arquivos, tornando-o tão em execução rm Arquivo por si só, sem nenhuma ação adicional, não será excluída imediatamente file. Resposta de Videonauth dá uma abordagem para isso. Nesta resposta, apresento outro.

Mas mesmo que seus amigos não estejam tentando fazer nada errado, você deve ainda considere 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ção maliciosa, 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.

Fazer rm O prompt antes da exclusão pode ajudar a evitar alguns erros.

Para ajudar as pessoas a evitar acidentalmente excluir arquivos com rm, você pode fazer rm uma alias do shell que realmente roda rm -i. Passando o -i bandeira para rm faz com que ele solicite ao usuário antes de excluir cada arquivo man rm).

Você poderia fazer isso (para sua conta de usuário) adicionando alias rm='rm -i' para o seu .bash_aliases ou .bashrc Arquivo. Vejo essa questão e aquele para detalhes. Isso entrará em vigor para os seus shells bash recém-abertos.

Isso fornece sem segurança reale 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 pseudônimo de várias maneiras, inclusive executando /bin/rm ou unaliasing ele (unalias rm).
  • Existem muitas situações em que a expansão de alias não ocorree nessas situações rm não será executado com -i.
  • Eles ainda podem excluir arquivos usando qualquer uma das técnicas para fazer isso que não exigem rm (como é o caso com Abordagem da Videonauth -- ver abaixo).
  • Eles ainda podem danificar os 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 seus amigos de usar o sistema fornecido rm comando:

  • Aliasing rm para rm -i é menos eficaz na prevenção de erros - até que eles passem a usar outra técnica para remover arquivos. Nesse ponto, impedindo-os de usar rm será totalmente ineficaz, mesmo que não estejam tentando fazer algo errado, já que presumivelmente eles usarão unlink (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 a partir de um shell diferente). O caminho de Videonauth não tem esse problema, que é uma vantagem objetiva desse método sobre 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. Isso significa que o aliasing rm para rm -i É muito improvável que quebre alguma coisa. Esta é uma vantagem objetiva alias rm='rm -i'.

rmnão pode fazer nada que outro programa perfeitamente comum não possa fazer.

Não há nada 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 é limitada (nãoraiz) o usuário não pode executar sem executá-los. Por exemplo, sudo permite executar programas como outro usuário, após a verificação para garantir que você tenha permissão para fazê-lo. passwd edita o banco de dados onde as senhas dos usuários são armazenadas, mas apenas permite que você altere sua própria senha (a menos que você seja root, caso em que você pode alterar a senha de qualquer pessoa).

/usr/bin/sudo e /usr/bin/passwd pode fazer isso porque eles têm o bit setuid set, como mostrado pelo 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

Notar que /bin/rm não tem s: suas permissões são -rwxr-xr-x, enquanto /usr/bin/passwd e /usr/bin/so ter -rwsr-xr-x em vez de. Isso faz com que, não importa quem corre passwd ou sudoNa verdade, ele é 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 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 seguros porque esses utilitários são escritos com muito cuidado, de modo que eles só podem fazer coisas que o autor da chamada deve poder fazer.

/bin/rm não funciona dessa maneira. Não é setuid porque não precisa ser. Permissões de diretório (e ocasionalmente permissões de arquivo) controlar quais arquivos um usuário pode excluir, e eles não precisam se tornar root para fazê-lo. Só para ficar perfeitamente claro por favor, nunca coloque o bit setuid em rm. As implicações de segurança seriam desastrosas, desde então, não importa quem rm, é como se o root rodasse! (Utilitários como sudo e passwd Verifique quem está realmente executando-os e verifique se algo é permitido antes de fazê-lo; rm não faz tal coisa.)

Verificar se o bit setuid (ou setgid) está definido em um executável lhe dirá 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é sua localização no navegador de arquivos gráficos (Nautilus, se você estiver usando o Unity ou o GNOME Shell) e excluir o arquivo. Existem 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 foo.txt no diretório atual, os seguintes comandos, que funcionam fora do padrão no Ubuntu e não requerem acesso a rm, vai conseguir isso. (Só para ter certeza, eu testei eles um sistema mínimo de 16.04 instalado apenas com os utilitários padrão do sistema, 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")' (python ao invés de python3 em versões mais antigas)

Essa lista é, claro, nem de perto 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. Em contraste, mudar o rm comando (para exigir uma senha ou de qualquer outra forma) ou restringir o acesso a rm não o impeça de todo.


19
2017-12-27 19:51



Para uso real, eu gosto do GNU rm's -I opção. Ele solicita apenas a exclusão de 4 ou mais arquivos ou a exclusão recursiva. Então você não tem o hábito de sempre usar -f, \rm para evitar expansão de alias ou digitar y sem ler. Mas ele ainda salvará você de erros de digitação nos quais você retornou antes de sua intenção, ou o seu glob combinou muitos arquivos. - Peter Cordes
Outra maneira interessante de desvincular arquivos: mv foo.txt /tmp/.gone, em seguida, reinicie, descartando o tmpfs que estava apoiando /tmp. Ou apenas use mv para renomear vários arquivos para o mesmo nome, então apenas o último é deixado. Ou apenas oculte arquivos renomeando-os com nomes obscuros. Como a primeira parte desta resposta aponta, se você está tentando se defender contra a malícia e não com a incompetência, basta bloquear as pessoas para fora da sua conta. - Peter Cordes


Você pode alterar as permissões no /bin/rm comando através da seguinte linha que impedirá que seja executado sem acesso ao sudo:

sudo chmod 750 /bin/rm

Isso impede especificamente que eles usem o rm comando fornecido pelo sistema. Você deve estar ciente de que isso não impede que eles excluam arquivos de outras maneiras.

Para também impedir que eles usem rmdir comando, que é uma maneira comum de excluir diretórios, você pode definir permissões da mesma maneira em seu caminho do executável:

sudo chmod 750 /bin/rmdir

Lembre também que você também pode usar esses comandos com os direitos sudo.

Para alterá-lo de volta se você não gostar ou outros problemas ocorrerem use 755 para chmod


Como @muru apontou o acima é uma solução muito grosseira e pode até mesmo quebrar os serviços do sistema que não estão em execução no raiz conta. Por isso, adiciono aqui outra opção usando ACL (listas de controle de acesso) para fazer o mesmo e provavelmente muito mais segura (bom ler bem e você pode pular a parte de habilitação porque a ACL é normalmente instalada nos sistemas Ubuntu hoje em dia):

Então, para fazer o mesmo que acima apenas para os usuários que você deseja bloquear seria

sudo setfacl -m u:<user-name>:- /bin/rm /bin/rmdir

Apenas substituir <user-name> com os nomes de usuários reais que você deseja evitar usando os arquivos.

Como com chmodusando setfacl -m para impedir que usuários específicos sejam executados rm e rmdir aplica-se apenas a esses comandos fornecidos pelo sistema. Ele não os impede de excluir seus arquivos e pastas no Nautilus ou usando outros comandos do terminal.

Explicação:

  • a -m flag significa modificar os arquivos ACL.
  • a primeira parte da mudança, o u significa usuário. Pode ter os seguintes valores u para o usuário, g para grupo e o para todos os outros
  • a parte do meio <user-name> Pode holt o nome do usuário real ou nome do grupo de acordo com o que você deseja alterar. Para definir alterações gerais, você a deixa vazia.
  • a terceira parte contém o tipo de permissões que você deseja definir. Aqui no exemplo queremos definir nenhuma permissão a todos, por isso colocamos -também pode conter as seguintes letras r para permissões de leitura, w para permissões de gravação e x para execução.

16
2017-12-27 12:40



Seria melhor usar as ACLs do que remover permissões de execução para outras pessoas - qualquer serviço do sistema que não seja executado como root agora está desativado. - muru
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdirIIRC. Você pode testar o ACL com getfacl /bin/rm /bin/rmdir - muru
A única desvantagem para ACLs como este é que é mal / complicado manter esses longo prazo. E impossível manter se não houver usuários individuais no sistema para cada pessoa usando o sistema. Caso contrário, é uma boa ideia. - Thomas Ward♦
@DavidFoerster Sim. Há um número efetivamente ilimitado de maneiras de excluir arquivos sem rm. A solução que a Videonauth deu aqui é uma maneira possível de ajudar usuários propensos a acidentes a parar de apagar coisas, mas não fornece nenhuma segurança real (o que pode ser bom, se os amigos do OP não forem deliberadamente tentando subverter os desejos do OP). Videonauth: Eu sugiro que você edite este post para esclarecer que isso não impede que as pessoas excluam arquivos, já que não precisam rm comando para fazer isso. (Eu estou me abstendo de editá-lo, caso você não queira dizer isso.) - Eliah Kagan
Não se esqueça que Perl, Python e todos os compiladores do sistema permitem que outros usuários também excluam arquivos. Evitar que as pessoas excluam arquivos requer mais do que apenas alterar as permissões no rmcomando. - Jonathan Leffler


Esta é uma resposta muito simples e irá parar alguém casualmente usando o comando rm sem dar uma senha. Não é uma solução segura e você deve implantar algumas das sugestões alternativas nas outras respostas.

No entanto, você pode usar o alias para alterar a maneira como o comando rm se comporta. Experimentar:

alias rm="sudo -l >/dev/null && rm"

O que isto faz é quando alguém insere o comando rm, ele executa o comando sudo -l. Este comando força o usuário a digitar sua senha. Se eles acertarem, ele lista seus privilégios (descartamos essa saída) e sai com o status 0, se eles errarem, existe com um erro.

Em seguida, seguimos o comando sudo com um "&&", que sai do seguinte comando - neste caso, "rm", apenas se o comando anterior sair com o status 0 - ou seja, eles acertaram a senha.

Para tornar essa permanente, inclua o comando alias em ~/.bashrc.

Note que isto é muito facilmente derrotado (por exemplo, eles poderiam simplesmente digitar /bin/rm.


8
2017-12-27 18:05





Às vezes não são nossos amigos, somos nossos piores inimigos

Eu escrevi um script para proteger com senha rm como o OP solicitado, mas também colocar em edições para evitar que você apague acidentalmente:

  • /
  • /casa
  • / bin

Editar: 5 de março de 2017 - Alterar o método de verificar se está sendo executado no terminal.


Crie o script

Usar gksu gedit /usr/local/bin/rm e copie nestas linhas:

#!/bin/bash

tty -s;
if [ "0" == "$?" ]; then Terminal="Y"; else Terminal="N"; fi

if [ $Terminal == "Y" ] ; then
    # Running from terminal don't allow delete of / or /toplevel directory even if sudo
    for i in ${@:1}
    do
        # Skip options -i -r -v -d 
        if [[ ${i:0:1} != "-" ]] ; then
            # if parameter doesn't begin with '-' it's file or directory, so get real path.
            fullname=$(realpath "$i" 2>&1) # No error messages if file doens't exist
            # We must have at least two `/` in the full path
            levels=$(echo "$fullname" | tr -cd '/' | wc -c)
            if (( $levels == 1 )); then # Test for 1, will be zero when file doesn't exist.
                echo "Attempting to remove top level directory '$fullname'"
                echo "Use 'sudo /bin/rm $@' instead."
                exit 1 # error
            fi
        fi
    done
fi


if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo rm ..." is ok)
  if [ $Terminal == "Y" ] ; then
  # Only running from a terminal needs password (ie not cron)

    # log rm usage to /var/log/syslog
    PARENT_COMMAND="$(ps -o comm= $PPID)"   
    logger "$PARENT_COMMAND"" - rm command was used on file: ""$fullname"

    # Get password
    Password=$(zenity --password --title="Password for rm")
    encryptPassword=$(echo -n "$Password" | md5sum)

echo "md5sum: $encryptPassword" # Comment out after viewing one time and updating line below.

    if [[ "$encryptPassword" != "d2c30dc65e59558c852ea30b7338abbe  -" ]]; then
        echo "Invalid password!"
        exit 1
    fi
  fi # non-terminals can't enter password.
fi # root doesn't need to enter password.

# Call REAL rm command with parameters passed to this wrapper sript
/bin/rm "$@"

exit 0

Altere a senha "WE2U" para qualquer coisa que você gosta e salve o arquivo.

Marcar novo rm script como executável

Bandeira nova rm script como executável usando:

sudo chmod +x /usr/local/bin/rm

Como funciona

rm password

A menos que a senha seja WE2U, a primeira vez que você executar o script, receberá "senha inválida" e a chave de criptografia da senha digitada será exibida. Copie e cole essa chave de criptografia do terminal no script. Em seguida, comente a linha com o eco que exibiu a chave de criptografia no terminal.

Porque o caminho /usr/local/bin é maior na lista do que /bin nosso comando rm é chamado. Depois de receber uma senha válida, ela chama /bin/rm para fazer a remoção real.

Como Thomas Ward apontou em outra resposta, se você fosse fazer uma sudo apt-get install ... você poderia ser solicitado a senha mil vezes. O script verifica se sudo é usado e não pede uma senha. Além disso, se rm é chamado de dentro do aplicativo da GUI, nenhuma senha é necessária.

O script chama logger para gravar todas as vezes rm foi chamado manualmente usando o terminal. O uso de comandos é gravado para /var/log/syslog.


5
2017-12-30 02:32



Você poderia mascarar a senha simplesmente incluindo uma versão com hash dela no script e, sempre que o usuário digitasse uma senha, ela poderia simplesmente confundi-la e verificá-la no hash codificado. - InitializeSahib
O suporte a senha hash @InitializeSahib (criptografia) foi adicionado ao script. - WinEunuuchs2Unix


Outra alternativa seria criar cópias de backup de todos os arquivos importantes em um diretório ao qual os usuários não-root não têm acesso. Você poderia usar rsync ou unison para sincronizá-los automaticamente, apenas certifique-se de que pelo menos um diretório no caminho para o destino de backup seja de propriedade root e do modo 700. Isso resultaria em ter duas cópias de todos os arquivos. Seria mais seguro apenas criar um usuário convidado para eles usarem, exceto que você precisa lembrar de sempre bloquear ou efetuar logoff antes de fornecer o computador ou deixá-lo sem supervisão.


3
2017-12-27 14:38



Você pode querer apontar como evitar que a exclusão seja propagada? E idealmente uma maneira de desligar e ligar, de modo que quando o usuário estiver fazendo algo que exija que o delete seja permanente, ele será permanente. - ajostergaard
@ajostergaard Meu pensamento foi que sempre que ele recebe o computador de volta de seus amigos, ele verifica manualmente que nada está faltando e restaura qualquer coisa que esteja. Mas a minha ferramenta preferida é usada em uníssono no modo interativo gui, que facilita a visualização (e reversão) de exclusões. - Random832


Não é a resposta direta para a pergunta que você está procurando, mas:

Se seus amigos estiverem excluindo seus arquivos usando o rm comando, em seguida, ou seus amigos são incompetentes, idiotas, ou eles são BOFH wannabes que estão tentando ensinar você a não deixar suas sessões conectadas e desacompanhadas. Em todos os casos, a solução é a mesma: não deixe sua sessão logada e autônoma.

Isso tem a vantagem de não precisar se lembrar de fazer alterações especiais no sistema sempre que você atualiza ou obtém um novo sistema, e também evita que scripts e outras coisas que você usa dependam de comandos que se comportam como esperados da falha de maneiras imprevisíveis.

Também tem a vantagem de impedir que "amigos" passem para a próxima etapa. Você também vai querer "proteger com senha" o mv comando se eles decidirem mover seus arquivos para / dev / null quando descobrirem que uma simples remoção não faz o que eles querem? Quando você está em um jogo como este, o único movimento vencedor é não jogar.


2
2017-12-29 15:32





Eu tenho uma possibilidade semelhante que planejei. No servidor de arquivos, se o armazenamento principal das fotos for gravável, alguém na família (menos técnico ou por acidente) pode excluir algo, arrastar acidentalmente a GUI que move o diretório ou substituir um original por uma versão editada, em vez de renomear. .

Percebi que posso proteger contra isso sem tornar as permissões não-editáveis ​​para todos os outros. O ZFS faz instantâneos periódicos para que qualquer exclusão ou substituição acidental possa ser revertida. (Diferente de um backup, um instantâneo é leve e copia-na-gravação, de modo que não multiplica seu uso de armazenamento.)

O ZFS é nativo do FreeBSD. O Linux tem o btrfs, que também possui instantâneos.


1
2017-12-28 07:08





Uma solução muito boba para um problema muito bobo.

Se você não quiser chmod  rm, rmdirou mv (para mv filename /dev/null) ou usar ACLs, você pode criar um usuário fictício com uma senha, mas você sabe e alias cada comando para sudo [user]e, em seguida, crie aliases para cada comando que seus amigos não conhecem. Desta forma, quando seus amigos digitarem rm o sistema solicitará uma senha (mas a senha errada será registrada), e você ainda poderá digitar rmalias ou o que você escolher para realmente excluir arquivos.

Ou você pode simplesmente criar uma conta de convidado que não tenha acesso ao seu diretório pessoal.


0
2017-12-29 16:26



Parece que você esta no caminho certo. Sua resposta poderia ser melhor, elaborando como configurar o alias, sudo [user] e dummy user - WinEunuuchs2Unix