프로세스 수준에서 Linux에서 사용 가능한 표준 스트림을 제한 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/185082

  •  06-07-2019
  •  | 
  •  

문제

Stdin, Stdout 및 Stderr에만 액세스 할 수있는 Linux 프로세스를 스폰 할 수 있기를 원합니다 (더 이상 아무것도 없음). 프로세스 수준 자체 에서이 작업을 수행 할 수 있습니까? 또한 스폰 된 프로세스가 스트림의 다른 쪽 끝이 가리키는 "사물"을 변경할 수 없다는 것을 암시 적으로 진술하고 있습니다.

은유 적으로 :

  • 프로세스에는 어딘가에서 오는 입력 파이프가 있으며 파이프가 시작되는 위치를 변경할 수 없으므로 입력의 출처를 제어 할 수 없습니다.
  • 프로세스에는 출력 및 오류 파이프가 어딘가에있는 파이프가있어 출력 파이프의 다른 쪽 끝이 어디로 가리키는 지 변경할 수 없으므로 출력이 어디로 가는지 제어 할 수 없습니다.
  • 새로운 파이프를 만들 수 없습니다.

나는 또한 현재 Selinux를보고 있습니다. 이로 인해이 세 스트림에만 액세스 할 수있는 프로세스를 만들 수 있습니까? 고맙습니다.

도움이 되었습니까?

해결책

다른 답변에 명시된 바와 같이 Selinux에는 모든 프로세스를 잠그는 데 도움이되는 다양한 권한이 있습니다.

커널은 예를 들어 파일이 객체, 디렉토리는 객체, UNIX 데이터 그램 소켓에 대한 액세스를 관리합니다 (예 : 파일은 객체, UNIX 데이터 그램 소켓은 객체 및 그 이상입니다.

아마도 가장 쉬운 일은 약간의 정책을 작성하는 것입니다. 운 좋게도 Selinux는 기본적으로 거부되므로 프로그램을 실행하고 Selinux 거부 로그를보고 프로그램이 원하는 작업 만 수행하도록 허용하십시오. 다시 말해 MSG (SystemV 메시지 대기열의 메시지), MSGQ (SystemV 메시지 큐 자체), SEM (Semaphores), SHM (공유 메모리) 및 아마도 다른 사람들과 같은 객체 클래스와 관련된 권한을 추가하지 않습니다.

처음으로 할 때 Selinux가 켜져 있지만 허용됩니다 (Setenforce 0 참조).

또한 일부 정책을 구축하는 데 도움이되는 도구를 제안합니다. 기본적으로 RAW M4를 작성하는 것이 약간 압도적 일 수 있습니다.

다른 팁

이것은 매우 비슷하게 들립니다 이 LWN 기사에 설명 된 내용 기본적으로 읽기, 쓰기 및 종료를 제외한 모든 SYSCALL을 차단합니다.

루트 인 경우 디렉토리에 chroot, 권한을 삭제하여 더 이상 파일 시스템 쓰기 액세스가 없도록하고 EXEC를 얻을 수 있습니다. 이는 프로그램이 새 파일을 만들지 못하게합니다. 그러나 프로그램이 파이프와 소켓을 만들지 못하게하는 방법은 없으며 (Selinux를 사용하면 아무것도 할 수 없음) 프로그램이 파일 디스크립터를 재 배열하고 닫지 못하게하는 방법이 없습니다.

글쎄, 나는 당신이 사용할 수 있다고 생각합니다 ptrace 모든 syscall을 가두고 당신이 승인 한 것만 허용하기 위해서는 "방법이 없다"고 말할 때 나는 "쉬운 방법이 없다"는 것을 의미합니다. 이것은 눈에 띄는 오버 헤드가 발생하지만 충분히 조심하면 안전하게 만들 수 있습니다. 그만큼 strace 또는 이 길을 따라 가기로 결정하면 프로젝트가 좋은 출발점 일 수 있습니다.

Selinux는 일을 할 수있었습니다. 특정 시스템에 대한 권한을 할당하여 특정 시스템 호출을 사용 할 수 있습니다. Open, Pipe 및 기타에 대한 접근을 거부함으로써 당신은 당신이 설명하는 것을 정확하게 수행 할 수 있어야합니다.

두 번째로 가능한 경로는 LD_PRELOAD 기능을 사용하고 자신의 개방형 파이프 등을 제공하는 것입니다. 기능. 프로그램이 여전히 시스템 호출에 더 직접적으로 액세스 할 수 있기 때문에 이것은 100% 안전하지 않습니다 (잠재적으로 적대적인 프로그램이라고 가정).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top