traceroute -d
권한이 있는 "표준" 사용자로 인증 하려고 합니다 sudo
. 그런데 실행시키면 sudo traceroute -d
사용자로 실행이 되기 root
때문에 일반 사용자로 실행하는 방법을 알고 싶습니다. 나는 기본적으로 사용자 수퍼유저(일명 루트)를 만들기 위해 여러 가지 방법을 시도했지만 성공하지 못했습니다.
작동하는 유일한 방법은 /etc/passwd의 uid와 그룹 ID를 0으로 변경하는 것입니다. 그러나 이렇게 하면 사용자 "identity"가 "root"로 변경됩니다. 예를 들어 whoami를 실행하면 "표준" 사용자 이름 대신 "root"가 표시됩니다.
이것이 필요한 이유는 --uid-owner를 기반으로 하는 일부 네트워크 경로가 있고 이제 디버깅을 시도하고 있지만 sudo b/c로 실행하는 것은 의미가 없으며 "루트" 사용자로 실행되기 때문입니다. 다른 경로가 있습니다.
답변1
traceroute
로 실행할 필요는 없습니다 root
. 단지 기능만 있으면 됩니다 CAP_NET_ADMIN
. 따라서 traceroute
커널이 파일 기능을 지원하고 이를 차단하는 Linux 보안 모듈(SELinux, AppArmor)이 없는 경우 이를 파일의 파일 기능으로 설정할 수 있으며 그러면 항상 이 기능을 사용할 수 있습니다(그러나 모든 사용자에 대해).
setcap CAP_NET_ADMIN+ep /usr/sbin/traceroute
traceroute
실행하는 동안 pscap
. 이는 프로세스의 UID/EUID에 영향을 미치지 않습니다.
어떻게 해야 할지 모르겠지만, 제가 아는 한 AppArmor(그리고 아마도 SELinux)를 사용하여 일부 기능을 갖춘 프로세스를 실행하는 것도 가능합니다. 물론 주요 임무는 사용 가능한 기능을 제한하는 것입니다.