환경:
- 운영 체제:중앙 운영 체제8(일반/centos8 도보 여행가상자)
- 가상화: VMware-Workstation 16.1.0 빌드-17198959
재현 단계:
- 새 장치 정책 만들기
cd /sys/fs/cgroup/devices
mkdir custom_poc
- tty로 사용되는 장치를 확인합니다(다중 방법):
tty를 사용하세요:
root@centos8# tty /dev/pts/0
프로세스 STDIN 가져오기:
ls -l /proc/$$/fd/{0,1,2} lrwx------. 1 root root 64 Mar 5 11:25 /proc/2446/fd/0 -> /dev/pts/0 lrwx------. 1 root root 64 Mar 5 11:25 /proc/2446/fd/1 -> /dev/pts/0 lrwx------. 1 root root 64 Mar 5 11:25 /proc/2446/fd/2 -> /dev/pts/0
- 다음에 tty 장치를 추가하십시오
devices.deny
.
장치의 메이저 번호와 마이너 번호를 확인하세요.
ls -l /dev/pts/0 crw--w----. 1 vagrant tty 136, 0 Mar 5 11:28 /dev/pts/0
접근 불가:
root@centos8# echo 'c 136:0 w' > /sys/fs/cgroup/devices/custom_poc/devices.deny root@centos8# echo $$ > tasks root@centos8# echo 'a' > /dev/pts/0 -bash: /dev/pts/0: Operation not permitted
그러나 STDIN 장치에 대한 액세스를 제거한 후에도 Bash 터미널은 제대로 작동합니다. 다음은 간단한 whoami의 출력입니다.
root@centos8# whoami root
답변1
~에서커널 문서:
추적 및 실행을 위한 cgroup 구현열려 있는장치 파일에 대한 mknod 제한 사항.
이러한 제한사항은 다음에만 적용됩니다.열리는장치 파일. 이는 표준 Unix 권한과 같은 대부분의 다른 액세스 제어 권한과 동일합니다.
읽기+쓰기 모드로 파일을 연 후 해당 파일을 읽고 쓸 수 있습니다. 액세스 제어는 모든 read()
합계 에 적용되지 않으므로 write()
오버헤드가 너무 많이 추가되고 애플리케이션에서 매우 놀라운 동작이 발생할 수 있습니다. mmap
예를 들어 파일이 메모리에서 ped()되는 경우에도 적용하기 어렵습니다.
귀하의 경우 제한이 적용되기 전에 /dev/pts/0
열렸습니다 (아마도 부모 중 하나, 터미널 에뮬레이터, 아마도 getty
... sshd
, 쉘이 파일 설명자를 상속했을 것입니다).
마찬가지로 실행할 프로세스를 포크할 때 하위 프로세스는 fd를 상속하고 이러한 fd 는 whoami
실행 중에 유지되며 장치 파일을 열지 않고 a만 실행됩니다 .whoami
whoami
write(1, "root\n", 5)
그러나 echo a > /dev/pts/0
쉘은 리디렉션을 수행하기 위해 파일을 열려고 시도하지만 지금은 이를 수행할 수 없도록 차단되어 있습니다.