Предотвратите 'dd' от уничтожения SSD или жесткого диска

У меня есть два SSD и на жестком диске.

Когда я использую sudo dd if=/dev/zero of=/dev/sdd count=1000 хорошие вещи происходят, и я стираю разделы из своей карты флэш-памяти USB.

Когда я использую sudo dd if=/dev/zero of=/dev/sdb count=1000 плохие вещи происходят, и я освобождаю разделы Windows 7 и Ubuntu 14.04 от своего Жесткого диска на 500 ГБ.

Плохие вещи произошли однажды. Как я могу предотвратить dd от выполнения его снова?

т.е. Проверка это of= не содержит sda, sdb или sdc.

2
задан 5 March 2017 в 22:47

1 ответ

Создать dd сценарий обертки

Откройте терминал с помощью Ctrl+Alt+T. Затем звоните gedit с:

gksu gedit /usr/local/bin/dd

и скопируйте и вставьте эти команды:

#!/bin/bash

# Who called this script?
PARENT_COMMAND="$(ps -o comm= $PPID)"   
if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo dd ..." is ok)
    echo dd must be called with sudo powers
    exit 1
fi

# log dd usage for audit trails
# log-file '"$PARENT_COMMAND"" - ""$@"' "/var/log/dd-usage"

# Display hints & arguments. Get any key to proceed or <Ctrl>+C to abort
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║                                                                ║"
echo "║                      dd - Data Duplicator                      ║"
echo "║                                                                ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo
echo " Parameter 1 hint: if=/dev/zero"
echo " Parameter 2 hint: of=/dev/sdY where Y cannot be a, b or c"
echo " Parms >2 hints:   bs=512 is default block size"
echo " Parms >2 hints:   count=100 will process 100 blocks"
echo
echo " Use /bin/dd --help for more info (don't use dd --help)"
echo
# Display drive letterss, names and sizes without partitions for guide
lsblk -ido KNAME,TYPE,SIZE,MODEL
echo
echo " Current parameters: "”$@”
echo
echo "      Press <Enter> to continue or <Ctrl>+C to abort."

read ANYKEY

if [[ "$2" != of=* ]]; then
    echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
    echo "ERROR! Parameter 2 must start with 'of=' (output file=)"
    exit 2
fi

if [[ "$2" =~ "sda" ]]; then
    echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
    echo "ERROR! Output file (of=) cannot be /dev/sda"
    exit 2
fi

if [[ "$2" =~ "sdb" ]]; then
    echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
    echo "ERROR! Output file (of=) cannot be /dev/sdb"
    exit 2
fi

if [[ "$2" =~ "sdc" ]]; then
    echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
    echo "ERROR! Output file (of=) cannot be /dev/sdc"
    exit 2
fi  

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

exit 0

Сохраните файл и выход gedit.

Наконец отметьте новое dd как исполняемый файл с:

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

На что это похоже

Ниже то, как появляется на Вашем терминальном экране при вызове нового dd сценарий, не используя защищенные диски.

$ sudo dd if=/dev/zero of=/dev/sdd bs=512 count=100
╔════════════════════════════════════════════════════════════════╗
║                                                                ║
║                       dd - Data Duplicator                     ║
║                                                                ║
╚════════════════════════════════════════════════════════════════╝

 Parameter 1 hint: if=/dev/zero
 Parameter 2 hint: of=/dev/sdY where Y cannot be a, b or c
 Parms >2 hints:   bs=512 is default block size
 Parms >2 hints:   count=100 will process 100 blocks

 Use /bin/dd --help for more info (don't use dd --help)

KNAME TYPE   SIZE MODEL
sda   disk 223.6G KINGSTON SHSS37A
sdb   disk 465.8G ST9500423AS     
sdc   disk 119.2G KingFast        
sdd   disk  29.8G USB Flash Drive 
sr0   rom   1024M DVD+-RW GT80N   

 Current parameters: 'if=/dev/zero of=/dev/sdd bs=512 count=100'

      Press <Enter> to continue or <Ctrl>+C to abort.

100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.00339331 s, 15.1 MB/s

Примечания

Поскольку сценарий обертки расположен в /usr/local/bin это называют, прежде чем регулярная команда сохранила в /bin.

Второй параметр должен начаться of= и не может содержать sda, sdb или sdc, добавьте больше дисков защитить или вычесть диски в зависимости от Вашей установки.

Строка тянет символы, может не работать над более старыми платформами или различными наборами символов. Используйте "+---+" для верхних и нижних строк и "|" для средних строк или удалите их в целом.

log-file сценарий для входа команд к файлам аудита. Можно заменить его собственной командой и не прокомментировать строку путем удаления продвижения #.

2
ответ дан 2 December 2019 в 03:43

Другие вопросы по тегам:

Похожие вопросы: