시스템이 새롭고 (예 : RHEL 7) setns
시스템 콜을 지원하는 경우 마운트 네임 스페이스를 사용하여 수행 할 수 있습니다. 루트 액세스가 필요합니다.
아이디어는 프로세스에 대한 별도의 마운트 네임 스페이스를 만들고이 네임 스페이스 내에 /dev/random
이상의 다른 파일 또는 FIFO를 바인드 마운트하여이 마운트 네임 스페이스의 프로세스가이 바인드 마운트 파일의 데이터를 읽도록합니다. 다른 프로세스에는 일반 /dev/random
이 표시됩니다.
이렇게하는 방법입니다.
준비 :이 직원을 모두 작동하게하려면 다음 명령을 실행하십시오 (기본값으로 작동하지 않을 수 있으므로 자세한 내용은 this question 참조).
# mount --make-rprivate/
이제 새 마운트 네임 스페이스에서 실행되는 셸을 만듭니다.
# unshare -m /bin/bash
당신은 새로운
bash
가 자신의 마운트 네임 스페이스가있는 시작했다. 당신이 쉘 내부에서 일부 다른 쉘에서 다음 명령의 결과를 비교할 수 있습니다
이 쉘 :
# ls -l /proc/self/ns/mnt
lrwxrwxrwx. 1 root root 0 Sep 26 16:06 /proc/self/ns/mnt -> mnt:[4026532148]
다른 쉘 : 숫자가 다르다는 것을
가
$ ls -l /proc/self/ns/mnt
lrwxrwxrwx. 1 ec2-user ec2-user 0 Sep 26 16:06 /proc/self/ns/mnt -> mnt:[4026531840]
주, 그래서 두 개의 셸이 다른 마운트 네임 스페이스에 있고 첫 번째 셸에서 수행 된 마운트는 시스템의 다른 프로세스에서 볼 수 없습니다 (이 셸의 모든 하위 항목 제외).
이제이 셸에서 기존 /dev/random
에 바인딩 할 수 있습니다. 당신은 할 수 있습니다 기능 테스트를 위해
# ls -l /dev/random
-rw-r--r--. 1 root root 16 Sep 26 16:18 /dev/random
# cat /dev/random
some large text
:
$ ls -l /dev/random
crw-rw-rw-. 1 root root 1, 8 Sep 26 15:45 /dev/random
$ cat /dev/random
�Znp7�v�c��Ω^C
그러나 우리의 쉘에 특별한입니다 :
# echo 'some large text' > /tmp/fakerandom
# mount --bind /tmp/fakerandom /dev/random
다른 프로세스가 그들을 위해, 평소와 같이 /dev/random
작품이 표시되지 않습니다 약간의 FIFO로 /dev/random
을 대체하고 다른 일부 프로세스에서 해당 FIFO에 알려진 데이터를 기록하십시오 (필요한 경우 자세한 내용은 mkfifo(1)
참조).
마운트 네임 스페이스에 대한 자세한 내용은 this 우수 기사에서 확인할 수 있습니다.