Мне интересно, есть ли какой-нибудь способ не допустить того, чтобы определенные устройства стали выходным файлом dd
команды и целью fdisk
команды. В настоящее время я использую две операции для настройки записи загрузчика, ядра и корневой файловой системы на SD-карту, которая выглядит как /dev/sdd
. Я всегда немного тревожно , что я буду смешивать sdd
с sdb
, или sda
так как буквы Aи Dблизко на клавиатуре, и я хотел бы найти способ , чтобы предотвратить команды с этим форматом:
dd if=/dev/sd[a-zA-Z0-9]* of=/dev/sd[ab]
или
fdisk /dev/sd[ab]
Ответы:
Вы можете попробовать написать правило udev, чтобы дать дополнительным жестким дискам достаточно уникальные имена.
Другая идея: всякий раз, когда вы можете сформулировать требование безопасности: «Дело не в том, кто это делает, а в том, как они это делают», вы говорите о принудительном применении типов, и в большинстве дистрибутивов Linux TE делается на уровне MAC. Большая часть моего опыта работы с MAC связана с "SELinux"
Вы не можете заблокировать его на уровне DAC, иначе вы не сможете выполнить ввод-вывод на устройстве (не обязательно сбой DAC в качестве модели безопасности, просто текущая политика DAC основана исключительно на идентификации, поэтому все программы работающие под определенным именем получают одинаковые права без дополнительного административного выражения). Можно заблокировать его на уровне MAC, чтобы обычные компоненты пользовательского пространства не могли ничего сделать с файлом блока, но ваши корневые утилиты и некоторые части платформы могут это сделать. На Fedora это уже в некотором роде, когда блочные устройства отображаются с типом SELinux
fixed_disk_device_t
и grub,bootloader_exec_t
увидев следующий пример:Принимая во внимание, что
dd
есть обычная метка bin_t:bin_t
(очевидно) все еще может писать на блокирующие устройства, но создание нового типа контекста файла дляfdisk
иdd
и написание правила selinux для запрета доступа нового типаfixed_disk_device_t
не должно быть слишком сложным. Вам просто нужно сделать так, чтобы обычные пользовательские роли не могли этого сделать, но пользователи с этимsysadm_t
могут это сделать, затем не забудьте просто сделатьnewrole -r root:sysadm_r
перед тем, как пытаться переразметить диск или выполнить перезаписьdd
на блочном устройстве (которое не должно это будет огромная сделка, так как ты не бегаешьfdisk
каждый день целый день).Возможно, больше работы, чем вы искали, но TE - это механизм, который решает общую проблему, с которой вы сталкиваетесь. Лично
udev
правило, наверное, ты самая безопасная ставка. Я упоминаю о TE только в том случае, если вы заинтересованы в решении более широкого круга задач, подобных этому.источник
Если вы не уверены
/dev/sdx
, используйте альтернативные имена устройств, которые вы можете найти в/dev/disk/
.Например, у меня есть SD-кардридер
/dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000011-0:0
. Конечно, это немного многословно, но, по крайней мере, нельзя перепутать его с жестким диском.Кроме того, он
hdparm -i /dev/sdx
может показать полезную информацию, если это жесткий диск, и поможет избежать несчастных случаев ...источник
/dev/disk/*
он доступен в любой системе Linux.mysdcard=/dev/sdd
и тогда вы, конечно, просто используете$mysdcard
в качестве аргумента, где вам это нужно.Есть более длинные, значимые имена в
/dev/disk/by-*
. Для целого диска/dev/disk/by-id
содержит символьную ссылку на устройство, содержащее модель диска и серийный номер.Для дополнительной защиты дайте себе разрешение на доступ к устройству (например
sudo chown sj755 /dev/disk/by-id/ata-Yoyodine-50RDF15H
), затем сделайте все остальное под вашим собственным пользователем, а не с правами root.Убедитесь в том , чтобы перепроверить , что диск , который вы собираетесь действовать от того, имеет ожидаемое содержание, например , чек
fdisk -l /dev/whatever
,file - </dev/sdz99
... В оболочке, Esc .чтобы вспомнить аргумент предыдущей команды, никогда не перепечатывать имя устройства.источник
Я вижу два способа сделать это:
источник