nodev
나는 파일 시스템을 마운트한 다음 특수 파일/장치를 마운트하는 것을 허용하지 않는 "RH413 Red Hat Server Hardening" 과정에서 이 내용을 읽었습니다 . 그러나 예를 보여주지는 않습니다.
그러나 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
. 분명히 말하면 이것은 동일한 장치이며 이를 가리키는 다른 파일일 뿐입니다.
귀하의 질문에 대한 인쇄물에 따르면 major number 1
와 Minor number 가 있습니다 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로 생성된 파일과 특수 문자 장치 연결",난 당신이 무슨 뜻인지 모르겠어요.