ioerror

unshare 사용법 및 옵션 - 네임스페이스 분리로 독립된 프로세스 실행 본문

OS

unshare 사용법 및 옵션 - 네임스페이스 분리로 독립된 프로세스 실행

반응형

 

unshare 사용법 및 옵션 - 네임스페이스 분리로 독립된 프로세스 실행

unshare - Unshare Execution Context

부모 프로세스로부터 격리된 프로세스 실행 환경(Namespace)을 생성하여 명령어를 실행하는 리눅스 전용 명령어이다. 컨테이너 기술(Docker, Podman 등)의 기본 원리가 되는 리눅스 네임스페이스(PID, Mount, Network, User, IPC, UTS 등)를 개별적으로 격리할 수 있으며, 루트 권한 없이도 독립된 실행 환경을 구성할 때 활용된다.

1. 명령어 용도

  • 사용가능 OS: [Linux]
  • 별도의 루트 권한 없이 사용자 네임스페이스를 생성하여 루트처럼 권한을 행사하는 가상 환경 구성 시 사용한다.
  • 네트워크 디바이스 격리, 별도의 호스트명 설정, 프로세스 ID 공간 독립 등 가상화 테스트 환경 구축 시 주로 사용한다.

2. 명령어 서식

unshare [옵션] [명령어 [인자...]]

3. 명령어 옵션

  • 주요 옵션 소개 테이블
옵션 설명 사용가능 OS 및 쉘
-m, --mount 마운트 네임스페이스 분리 (파일시스템 마운트 지점 격리) [Linux]
-u, --uts UTS 네임스페이스 분리 (호스트명 및 도메인명 격리) [Linux]
-i, --ipc IPC 네임스페이스 분리 (System V IPC, POSIX 메시지 큐 격리) [Linux]
-p, --pid PID 네임스페이스 분리 (프로세스 ID 공간 격리) [Linux]
-n, --net 네트워크 네임스페이스 분리 (네트워크 장치, 루프백 격리) [Linux]
-U, --user 사용자 네임스페이스 분리 (UID/GID 매핑 격리) [Linux]
-C, --cgroup Cgroup 네임스페이스 분리 (Cgroup 구조 격리) [Linux]
-T, --time 타임 네임스페이스 분리 (시스템 시계 격리) [Linux]
-f, --fork 지정한 명령어를 자식 프로세스로 fork하여 실행 [Linux]
--mount-proc[=dir] 지정한 디렉토리에 proc 파일시스템을 자동 마운트 [Linux]
-r, --map-root-user 현재 사용자를 새로 생성된 사용자 네임스페이스의 root(UID 0)로 매핑 [Linux]
--keep-caps 사용자 네임스페이스 내에서 획득한 캡처능력(Capabilities) 유지 [Linux]
  • 명령어 옵션 사용시 결과 예시
Bash
 
# 루트 권한 없이 사용자 및 마운트, PID 네임스페이스를 분리하여 독립된 쉘 실행
unshare -r -p -f --mount-proc bash

# 독립된 호스트명(UTS) 네임스페이스 설정
unshare -u bash
hostname my-isolated-node
hostname
# my-isolated-node

# 원래 쉘로 복귀 후 호스트명 확인
exit
hostname
# original-hostname
  1. unshare -r -p -f --mount-proc bash: -r 옵션으로 현재 계정을 root로 매핑하고, -p -f 옵션으로 새로운 PID 1번 프로세스를 갖는 자식 프로세스를 생성하며, --mount-proc을 통해 /proc 파일시스템을 해당 네임스페이스 전용으로 다시 마운트한다.
  2. hostname my-isolated-node: UTS 네임스페이스가 분리된 상태에서 호스트명을 변경하면 전체 시스템이 아닌 해당 쉘 내부에서만 변경된 호스트명이 유지된다.

4. 명령어 특이사항(유의사항)

  • PID 네임스페이스(-p)만 단독으로 분리할 경우, 새로운 PID 공간의 첫 번째 프로세스가 생성되지 않아 오류가 발생하거나 기존 /proc 정보를 그대로 참조하게 된다. 반드시 -f(--fork) 옵션과 --mount-proc 옵션을 함께 사용해야 정상적인 PID 격리가 구현된다.
  • 일반 사용자 계정으로 unshare를 사용할 때는 반드시 -U(--user) 또는 -r(--map-root-user) 옵션을 포함해야 권한 에러(Operation not permitted) 없이 네임스페이스 생성이 진행된다.
  • 리눅스 커널 커스텀 설정이나 보안 정책(sysctl kernel.unprivileged_userns_clone)에 따라 비권한 사용자의 사용자 네임스페이스 생성이 차단되어 있을 수 있다.

관련 명령어들

  • nsenter: 이미 실행 중인 다른 프로세스의 네임스페이스에 진입하여 명령어를 실행하는 명령어이다.
  • chroot: 루트 디렉토리 위치를 변경하여 파일시스템 접근을 제한하는 명령어이다.
  • ip netns: 네트워크 네임스페이스만을 전문적으로 관리하고 제어하는 iproute2 도구 명령어이다.
  • podman: daemonless 방식으로 unshare 및 리눅스 네임스페이스 기술을 활용해 컨테이너를 실행하는 도구이다.

https://ioerror.tistory.com/entry/UNIX-Linux-Command-Reference

 

반응형
Comments