인터넷 접속 없이 프로그램을 실행하고 싶습니다.
unshare -n ping 127.0.0.1
.
권한이 없는 사용자로서 를 반환하고 Operation not permitted
, 권한 있는 사용자로서 필요한 를 반환합니다 Network is unreachable
.
권한이 없는 사용자에게도 작동하도록 하는 방법이 있습니까?
답변1
util-linux의 이후 버전에서는 unshare
이 옵션을 얻었습니다 --map-root-user
. unshare(1)
버전 2.26.2 인용 :
-r, --map-루트-사용자
현재 유효한 사용자 및 그룹 ID가 새로 생성된 사용자 네임스페이스의 수퍼유저 UID 및 GID에 매핑된 경우에만 이 프로그램을 실행하십시오. 이를 통해 권한 없이 실행하는 경우에도 새로 생성된 네임스페이스의 다양한 측면(예: 네트워크 네임스페이스에서 인터페이스 구성 또는 마운트 네임스페이스에 파일 시스템 마운트)을 관리하는 데 필요한 기능을 쉽게 얻을 수 있습니다. 순전히 편의 기능으로서 여러 UID 및 GID 범위 매핑과 같은 더 복잡한 사용 사례는 지원하지 않습니다. 이 옵션은 --setgroups=deny를 의미합니다.
따라서 최신 시스템에서는 다음을 실행할 수 있습니다.
unshare -n -r ping 127.0.0.1
그러면 예상되는 Network is unreachable
.
Debian 시스템에서는 여전히 오류가 나타날 수 있으므로 Operation not permitted
먼저 다음 명령을 실행하여 권한이 없는 사용자 네임스페이스를 활성화해야 합니다.
sudo sysctl -w kernel.unprivileged_userns_clone=1
참고: 더 넓은 범위의 사용 사례의 경우 bwrap --unshare-net
간략하게 설명된 것처럼 더 복잡한 사용 사례를 고려할 수 있습니다.다른 답변으로.
답변2
또한 새 네트워크 네임스페이스를 입력하는 또 다른 방법은 unshare -n
더 높은 수준의 Bubblewrap( )을 사용하는 것입니다 bwrap --unshare-net
.
bwrap --bind / / --dev /dev --unshare-net -- your-program args …
참고: 그렇다면 your-program args …
ICMP ping 127.0.0.1
는 Bubblewrap에서 지원되지 않으므로 OP 예에는 " Network is unreachable
"가 표시되지 않습니다.
프로그램이 있다는 점도 주목할 가치가 있습니다.--unshare-net
하다루프백 인터페이스를 가져오지만 네트워크 네임스페이스 격리 인터페이스를 가져옵니다.
답변3
이 setcap
유틸리티를 사용하여 공유 해제를 설정할 수 있습니다.
sudo setcap cap_sys_admin+ep /usr/bin/unshare
그 후에는 unshare -n ping 127.0.0.1
더 이상 설명할 수 없고 좋은 생각인지는 모르겠지만 작동하고 사용자 이름으로 whoami
표시되지 않습니다 .root