Por que o dd não é protegido contra gravação no disco ativo?

6

Eu uso muito dd. Eu vivo em um contant medo de cometer um erro um dia, por exemplo, escrevendo em sda (disco de computador) em vez de sdb (disco USB) e, em seguida, apagar tudo o que tenho no meu computador.

Eu sei dd é suposto ser uma ferramenta de usuário avançado, mas ainda assim, não faz sentido para mim que você pode basicamente estragar seu computador inteiro, apertando a tecla errada.

Por que não há uma medida de segurança que impeça o dd de escrever no disco de onde recebe o comando? Não tenho certeza de como alguém faria isso de propósito.

Por favor, note que eu não tentei isso sozinho, eu só li sobre isso, então eu poderia estar errado sobre tudo isso.

    
por kursus 18.10.2014 / 14:31

3 respostas

6

É razoável perguntar por que o comando dd não verifica primeiro se seu destino contém um sistema de arquivos montado e, em seguida, solicita confirmação ou exige um sinalizador especial. Uma resposta simples é que isso quebraria qualquer script que esperasse poder usar dd dessa maneira e que não fosse projetado para manipular entradas interativas. Por exemplo, pode ser razoável modificar a tabela de partição de um dispositivo bruto enquanto uma partição desse mesmo dispositivo é montada; você só precisa ter cuidado para modificar apenas o primeiro setor.

Há um grande número de sistemas Linux por aí, e é impossível saber que tipo de configurações malucas as pessoas criaram. Portanto, é muito improvável que os mantenedores do dd façam uma alteração incompatível com versões anteriores que causaria problemas para um número desconhecido de ambientes.

    
por 18.10.2014 / 18:39
11

I know dd is supposed to be a power user tool but still, it doesn't make sense to me that you can basically screw your whole computer by hitting the wrong key.

Considere os tipos de ferramentas elétricas usadas na construção civil e o que você pode estragar fazendo uma pequena coisa errada. Essas coisas poderiam ser mais evitáveis? Provavelmente, mas o contrapeso é até que ponto tornar os acidentes mais evitáveis torna a ferramenta menos útil e / ou mais difícil.

Dirigir automóveis é uma analogia semelhante com conseqüências potencialmente muito mais terríveis, e ainda assim os seres humanos conseguem fazer isso o tempo todo (na verdade, muito mais). É claro que seria mais seguro se eles fizessem isso mais devagar, mas coletivamente decidimos quais riscos valem a pena. Da mesma forma, o computador seria mais seguro se dd não existisse, mas como a sua utilidade é considerada maior do que seus riscos, ele existe.

Why ins't there a security measure that prevent dd from writing on the disk it gets the command from ?

Na verdade, existe, pois por padrão arquivos de dispositivo (como /dev/sda1 ) precisam de privilégios de superusuário para gravar. Portanto, a menos que você esteja trabalhando como root ou via sudo , na verdade, não é possível parafusar todo o seu computador com um botão usando dd .

O que nos leva a por que existem todas as advertências sobre a execução de comandos com privilégios de superusuário. Esses avisos são muito comuns e acho que seria difícil acabar com um sistema * nix sem ter visto eles, como entrar em uma zona de construção sem perceber os sinais ÁREA DO HARD HAT .

Se você não tem um motivo para estar em uma zona de construção, saia. Se você fizer isso, tome as precauções de segurança adequadas. O mundo pode ser um lugar perigoso e alguns lugares mais perigosos que outros. Não aja sem pensar. Um grau de segurança que garanta que nada de ruim possa acontecer - então você não precisa se preocupar em pensar - implica que você também não pode fazer muita coisa. Às vezes isso é desejável, às vezes não é.

    
por 18.10.2014 / 14:58
0

Para "adicionar uma pequena etapa, como uma opção ou uma mensagem de confirmação", você pode fazer o que o artm sugeriu nos comentários à sua pergunta: use um script de wrapper.

Em outras palavras, ao invés de lidar diretamente com os argumentos da linha de comando um tanto desanimadores do dd diretamente, crie um script no bash (ou Python, etc) que receba os argumentos dd que você está interessado, usando uma sintaxe de opção que você está mais confortável com. O script verifica se os argumentos são sensatos e imprime os argumentos (e possivelmente a linha de comando final do dd) para que você possa verificar se tudo está como deveria. E então o script pergunta "OK para continuar? [Y / N]" então você tem que digitar y se você quiser que o script execute a linha de comando do dd que ele construiu para você.

Então, se você nunca quer que o script escreva para / dev / sda ou suas partições, você pode impossibilitar que ele faça isso. Para ajudá-lo a verificar se você realmente selecionou os dispositivos de entrada e saída que pretendia, o script poderia usar o comando blkid para obter o UUID e o rótulo do disco para esses dispositivos. Etc.

    
por 19.10.2014 / 06:40