프로그램에서는 (기호) /proc/pid/
링크를 검색하여 네트워크 네임스페이스를 열거합니다 ns/net
. 프로그램은 호스트 자체의 "루트" 네임스페이스(원래 초기화) 내에서 실행됩니다. 일반적으로 스캐너 부분을 루트로 실행해야 합니다. 그렇지 않으면 /proc/pid/
다른 프로세스 정보에 대한 액세스가 제한됩니다. 가능하면 스캐너를 루트로 실행하는 것을 피하고, 권한을 제거하는 번거로움도 피하고 싶습니다.
/proc/pid/
루트가 아닌 사용자가 스캐너를 실행하고 전체 트리를 보고 네트워크 네임스페이스 링크를 읽을 수 있도록 스캐너에 어떤 Linux 기능을 설정해야 합니까 ?
답변1
몇번의 시행착오 끝에 CAP_SYS_PTRACE
그것이 실제로 필요하다는 것을 알게 되었습니다.
대신 유사한 작업을 포함하여 필요한 접근 권한이 제공 CAP_DAC_READ_SEARCH
되지 않습니다 .CAP_DAC_OVERRIDE
readlink()
내가 본 것은 상호 확인될 수 있다: 첫째,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
당신은 또한 볼 수 있습니다이 답변