我想知道是否有某种方法可以防止某些特定设备成为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]
我想知道是否有某种方法可以防止某些特定设备成为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]
Answers:
您可以尝试编写udev规则以为补充HDD提供足够独特的名称。
另一个想法:每当您可以将安全性要求表述为“不是谁在做,而是他们在做的”时,您在说的是类型强制,在大多数Linux发行版中,TE是在MAC级别完成的。我大部分的MAC经验是“ SELinux”
您不能将其锁定在DAC级别,否则您将无法在设备上执行I / O(不一定是DAC作为安全模型失败,这只是当前DAC策略仅基于身份,因此所有程序以特定身份运行的用户将获得相同的权利,并且无法获得其他管理表达式)。可以将其锁定在MAC级别,以便常规用户空间组件无法对块文件执行任何操作,但您的根实用程序和平台的某些部分可以执行此操作。在Fedora上,已经出现了SELinux类型fixed_disk_device_t
和grub的块设备,bootloader_exec_t
请参见以下示例:
[root@localhost ~]# ls -lhZ $(which grub2-install)
-rwxr-xr-x. root root system_u:object_r:bootloader_exec_t:s0 /sbin/grub2-install
[root@localhost ~]# ls -lhZ /dev/sda
brw-rw----+ root disk system_u:object_r:fixed_disk_device_t:s0 /dev/sda
[root@localhost ~]# sesearch --allow | egrep bootloader | grep fixed
allow bootloader_t fixed_disk_device_t : lnk_file { read getattr } ;
allow bootloader_t fixed_disk_device_t : chr_file { ioctl read write getattr lock append open } ;
allow bootloader_t fixed_disk_device_t : blk_file { ioctl read write getattr lock append open } ;
[root@localhost ~]#
而dd
具有常规的bin_t标签:
[root@localhost ~]# ls -lhZ $(which dd)
-rwxr-xr-x. root root system_u:object_r:bin_t:s0 /bin/dd
bin_t
(显然)仍然可以写入块设备而是创建一个新的文件上下文类型fdisk
与dd
并将其写入SELinux的规则来访问禁止新型fixed_disk_device_t
应该不会太困难。您只需要进行设置,以使普通用户角色不能执行此操作,但是拥有该sysadm_t
功能的用户可以执行此操作,然后记住newrole -r root:sysadm_r
在尝试重新分区磁盘或dd
在块设备上进行操作之前,请先执行“ a”操作(不应这样做)。没什么大不了的,因为它不像您fdisk
每天都在跑步。
可能比您期望的工作还要多,但是TE是解决您遇到的一般问题的机制。就个人而言,udev
规则可能是您最安全的选择。我只提到TE的东西,以防您有兴趣解决与此类似的更多问题。
如果不确定/dev/sdx
,请使用可以在中找到的备用设备名称/dev/disk/
。
例如,我的SD卡读卡器是/dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000011-0:0
。当然,这有点冗长,但是至少没有办法将其与HDD混淆。
另外,hdparm -i /dev/sdx
如果是硬盘,a 可能会显示有用的信息,并有助于避免不幸的事故...
/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
...在shell下,Esc .调出以前的命令的说法,从来没有重新输入设备名称。
我看到两种方法可以做到这一点: