我在“RH413 Red Hat Server Hardening”课程中读到这一点,我们挂载文件系统,nodev
然后不允许从中挂载特殊文件/设备。但是,它没有显示示例。
然而,我在 RHEL 机器上执行了以下操作,发现dd
当使用 nodev 选项挂载文件系统时,我们无法将特殊字符设备与命令创建的任何文件关联起来。后来我删除了nodev
选项,并能够使用dd
命令将字符设备与新创建的文件关联起来。
这是我们使用选项挂载 FS 时所期望的行为nodev
还是我还缺少其他内容?
命令如下:
[root@server Special]# mount | grep /Special
/dev/mapper/home on /Special type ext4 (rw,nodev,relatime,seclabel,data=ordered)
[root@server Special]#
[root@server Special]# ls -l
total 16
drwx------. 2 root root 16384 Feb 20 01:40 lost+found
crw-r--r--. 1 root root 1, 5 Feb 21 04:53 spFile
[root@server Special]#
[root@server Special]# dd if=spFile of=newDev bs=1K count=20000
dd: failed to open ‘spFile’: Permission denied
[root@server Special]#
nodev
通过添加删除exec
。
[root@server ~]# mount | grep /Special
/dev/mapper/home on /Special type ext4 (rw,relatime,seclabel,data=ordered)
[root@server ~]#
[root@server Special]# dd if=spFile of=newDev bs=1K count=20000
20000+0 records in
20000+0 records out
20480000 bytes (20 MB) copied, 0.527708 s, 38.8 MB/s
[root@server Special]#
[root@server Special]# ls -l
total 20016
drwx------. 2 root root 16384 Feb 20 01:40 lost+found
-rw-r--r--. 1 root root 20480000 Feb 21 05:10 newDev
crw-r--r--. 1 root root 1, 5 Feb 21 04:53 spFile
[root@server Special]#
[root@server Special]# mkdir /spDev
[root@server Special]# mount newDev /spDev/
[root@server Special]# df -h /spDev/
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 18M 326K 17M 2% /spDev
[root@server Special]#
答案1
首先...
我发现我们无法将特殊字符设备与
dd
命令创建的任何文件关联起来
你所展示的实验并没有创造带有 的文件dd
,它尝试使用 写入特殊字符设备dd
。
1)什么是设备文件?
设备文件可以被认为是内核中设备的链接。虽然它们存储在磁盘上,但它们描述的实际设备与存储的文件系统无关。在这方面,将它们视为类似于指向内核内部某些内容的符号链接。
文件名无关紧要;正如符号链接可以命名为任何名称并放置在任何位置一样,设备文件也可以命名为任何名称并存储在任何位置,但它仍然指向同一设备。
2)为什么它们是一个安全问题?
出于显而易见的原因,并非任何人都可以直接连接到设备。例如,您不希望普通用户只读取您的硬盘驱动器,而忽略文件系统及其权限。
如果将驱动器插入计算机并安装它,则存在该磁盘上存在具有不安全权限的设备文件的风险。这些可能指向一些应该受到保护的东西。因此,插入磁盘后,您可能会错误地让某人访问设备。
3)nodev
做什么?
这堵住了安全漏洞。它告诉操作系统禁止任何程序通过存储在该文件系统上的设备文件访问设备。
在您的实验中,您使用 DD 尝试使用设备文件(链接到该设备)写入设备。因为在第一种情况下,您安装的nodev
操作系统禁止dd
(以及所有其他程序)使用该设备文件。
编辑:有关设备文件的更多信息
上面我提到设备文件类似于符号链接。对于设备文件,主编号和次编号用于指定它们链接到的内容。如果我们举一个操作系统自动创建的例子:
$ ls -l /dev/zero /dev/random /dev/sda /dev/sda1
crw-rw-rw- 1 root root 1, 8 Feb 16 23:24 /dev/random
brw-rw---- 1 root disk 8, 0 Feb 16 23:24 /dev/sda
brw-rw---- 1 root disk 8, 1 Feb 16 23:24 /dev/sda1
crw-rw-rw- 1 root root 1, 5 Feb 16 23:24 /dev/zero
因此,在我的系统上,如果我调用,mknod foo c 1 8
我最终会得到一个与 相同的字符设备/dev/random
。需要明确的是,这是同一个设备,只是指向它的不同文件。
根据您问题中的打印输出,它有 主号码1
次号码5
。在我的系统上,那就是/dev/zero
.
答案2
nodev
只是意味着该文件系统上的设备节点不起作用。它们可以从以前就存在,您可以创建它们,但无法打开它们。
# mount -ttmpfs -onodev tmpfs /tmp/test
# cd /tmp/test/
# cp -a /dev/sda .
# ls -l
total 0
brw-rw---- 1 root disk 8, 0 Dec 16 18:24 sda
# head -c512 ./sda | od -c
head: cannot open './sda' for reading: Permission denied
这与您尝试打开时的情况相同spFile
。当然,如果删除它确实有效nodev
。 (exec
与此无关,它控制在文件系统外执行程序,这是另一回事。)
# mount -oremount,dev .
# head -c512 ./sda |od -c
0000000 372 270 \0 ...
至于你的意思是“将特殊字符设备与 dd 创建的文件关联起来”,我不知道你的意思。