쿼리 프로세스를 루트로 실행하지 않고 /proc/pid/ns/net에 액세스하시겠습니까?

쿼리 프로세스를 루트로 실행하지 않고 /proc/pid/ns/net에 액세스하시겠습니까?

프로그램에서는 (기호) /proc/pid/링크를 검색하여 네트워크 네임스페이스를 열거합니다 ns/net. 프로그램은 호스트 자체의 "루트" 네임스페이스(원래 초기화) 내에서 실행됩니다. 일반적으로 스캐너 부분을 루트로 실행해야 합니다. 그렇지 않으면 /proc/pid/다른 프로세스 정보에 대한 액세스가 제한됩니다. 가능하면 스캐너를 루트로 실행하는 것을 피하고, 권한을 제거하는 번거로움도 피하고 싶습니다.

/proc/pid/루트가 아닌 사용자가 스캐너를 실행하고 전체 트리를 보고 네트워크 네임스페이스 링크를 읽을 수 있도록 스캐너에 어떤 Linux 기능을 설정해야 합니까 ?

답변1

몇번의 시행착오 끝에 CAP_SYS_PTRACE그것이 실제로 필요하다는 것을 알게 되었습니다.

대신 유사한 작업을 포함하여 필요한 접근 권한이 제공 CAP_DAC_READ_SEARCH되지 않습니다 .CAP_DAC_OVERRIDEreadlink()

내가 본 것은 상호 확인될 수 있다: 첫째,ptrace.c필요한 단서가 제공됩니다 __ptrace_may_access():

/* May we inspect the given task?
 * This check is used both for attaching with ptrace
 * and for allowing access to sensitive information in /proc.
 *
 * ptrace_attach denies several cases that /proc allows
 * because setting up the necessary parent/child relationship
 * or halting the specified task is impossible.
 */

둘째, 다음과 같은 nsfs 관련 기능이 있습니다.proc_ns_readlink()(간접) 호출 __ptrace_may_access().

마침내,개인 7 네임스페이스말하는:

이 하위 디렉터리의 기호 링크는 다음과 같습니다: [...] 역참조 또는 읽기(readlink(2)) 이러한 기호 링크에 대한 권한은 ptrace 액세스 모드 PTRACE_MODE_READ_FSCREDS 검사에 의해 제어됩니다. ptrace(2)를 참조하세요.

답변2

정확하게 말하자면, 네트워크 네임스페이스를 입력하려면 CAP_SYS_PTRACE 및 CAP_SYS_ADMIN이 필요합니다. 예는 다음과 같습니다.

# docker run -it --rm --pid host --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN debian:bullseye-slim bash
root@8b40f2f48808:/# nsenter --net=/proc/1/ns/net bash

당신은 또한 볼 수 있습니다이 답변

관련 정보