환경:

환경:

환경:

재현 단계:

  1. 새 장치 정책 만들기
cd /sys/fs/cgroup/devices
mkdir custom_poc
  1. 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
    
  1. 다음에 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만 실행됩니다 .whoamiwhoamiwrite(1, "root\n", 5)

그러나 echo a > /dev/pts/0쉘은 리디렉션을 수행하기 위해 파일을 열려고 시도하지만 지금은 이를 수행할 수 없도록 차단되어 있습니다.

관련 정보