Gostaria de saber se existe alguma maneira de impedir que certos dispositivos se tornem o arquivo de saída do dd
comando e o destino do fdisk
comando. Atualmente, estou usando as duas operações para configurar uma gravação de um carregador de inicialização, kernel e sistema de arquivos raiz em um cartão SD, que aparece como /dev/sdd
. Estou sempre um pouco ansioso que eu vou misturar-se sdd
com sdb
, ou sda
desde as letras Ae Destão perto do teclado, e eu gostaria de encontrar uma maneira de impedir que os comandos com este formato:
dd if=/dev/sd[a-zA-Z0-9]* of=/dev/sd[ab]
ou
fdisk /dev/sd[ab]
Respostas:
Você pode tentar escrever uma regra do udev para fornecer nomes suficientes ao HDD suplementar.
Outra idéia: sempre que você pode definir um requisito de segurança como "Não é quem está fazendo, é como está fazendo", você está falando sobre imposição de tipos e, na maioria das distros do Linux, a TE é feita no nível MAC. A maior parte da minha experiência com MAC é com "SELinux"
Você não pode bloqueá-lo no nível do DAC, caso contrário, não seria capaz de executar E / S no dispositivo (não necessariamente uma falha do DAC como modelo de segurança, é apenas uma política atual do DAC que é baseada apenas na identidade, para todos os programas a execução sob uma identidade específica obtém direitos idênticos sem expressão administrativa adicional possível). O bloqueio no nível do MAC pode ser feito para que os componentes regulares do espaço do usuário não possam fazer nada com o arquivo de bloqueio, mas seus utilitários raiz e certas partes da plataforma. No Fedora, esse já é o caso dos dispositivos de bloco aparecendo com o tipo SELinux de
fixed_disk_device_t
e grub, tendobootloader_exec_t
o seguinte exemplo:Considerando que
dd
possui um rótulo bin_t regular:bin_t
(aparentemente) ainda pode escrever para dispositivos de bloco, mas a criação de um novo tipo de contexto de arquivo parafdisk
edd
e escrever uma regra selinux para não permitir o novo tipo de acessarfixed_disk_device_t
não deve ser muito difícil. Você só precisaria fazê-lo para que as funções de usuário regulares não possam fazê-lo, mas os usuários com osysadm_t
podem fazê-lo; lembre-se de fazer umnewrole -r root:sysadm_r
antes de tentar re-particionar o disco ou executar umdd
dispositivo over-block (o que não deve ser ' Não é um grande negócio, já que não é como se você corressefdisk
todos os dias o dia inteiro).Provavelmente mais trabalho do que você procurava, mas o TE é o mecanismo que resolve o problema geral em que você está se deparando. Pessoalmente, a
udev
regra é provavelmente a sua aposta mais segura. Menciono apenas o material da TE, caso você esteja interessado em resolver um conjunto maior de problemas semelhantes a este.fonte
Se não tiver certeza
/dev/sdx
, use os nomes de dispositivos alternativos que você pode encontrar/dev/disk/
.Por exemplo, meu leitor de cartão SD é
/dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000011-0:0
. Isso é um pouco detalhado, com certeza, mas pelo menos não há como confundi-lo com um disco rígido.Como alternativa, um
hdparm -i /dev/sdx
pode mostrar informações úteis se for um disco rígido e ajudar a evitar acidentes infelizes ...fonte
/dev/disk/*
está disponível em qualquer sistema Linux.mysdcard=/dev/sdd
e, é claro, você pode usar$mysdcard
como argumento sempre que precisar.Existem nomes mais longos e significativos em
/dev/disk/by-*
. Para um disco inteiro,/dev/disk/by-id
contém um link simbólico para o dispositivo de disco que contém o modelo e o número de série do disco.Para obter proteção adicional, dê a si mesmo a permissão para acessar o dispositivo (por exemplo
sudo chown sj755 /dev/disk/by-id/ata-Yoyodine-50RDF15H
) e faça o resto com seu próprio usuário, em vez de com o root.Verifique se o disco em que você irá atuar possui o conteúdo esperado, por exemplo
fdisk -l /dev/whatever
, verifiquefile - </dev/sdz99
, ... No shell, Esc .para recuperar o argumento do comando anterior, nunca digite novamente o nome do dispositivo.fonte
Eu vejo duas maneiras de conseguir isso:
fonte