unshare
명령 을 확인 하고 있었고 맨 페이지에 따르면
unshare - run program with some namespaces unshared from parent
또한 다음과 같이 네임 스페이스 유형이 나열되어 있습니다.
mount namespace
mounting and unmounting filesystems will not affect rest of the system.
이 마운트 네임 스페이스 의 목적은 정확히 무엇입니까 ? 몇 가지 예를 통해이 개념을 이해하려고합니다.
답변
Running unshare -m
은 호출 프로세스에 마운트 네임 스페이스의 개인용 사본을 제공하고 파일 시스템 속성을 공유 해제하여 더 이상 루트 디렉토리, 현재 디렉토리 또는 umask 속성을 다른 프로세스와 공유하지 않도록합니다.
위의 단락은 무엇을 말합니까? 간단한 예를 사용하여 이해하려고 노력하십시오.
터미널 1:
첫 번째 터미널에서 아래 명령을 수행합니다.
#Creating a new process
unshare -m /bin/bash
#creating a new mount point
secret_dir=`mktemp -d --tmpdir=/tmp`
#creating a new mount point for the above created directory.
mount -n -o size=1m -t tmpfs tmpfs $secret_dir
#checking the available mount points.
grep /tmp /proc/mounts
마지막 명령은 다음과 같이 출력을 제공합니다.
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
이제 다음 명령도 수행했습니다.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
ls
명령 의 출력은
ls -lFa
total 4
drwxrwxrwt 2 root root 80 Sep 3 22:23 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
-rw-r--r-- 1 root root 0 Sep 3 22:23 hello
-rw-r--r-- 1 root root 0 Sep 3 22:23 helloagain
그렇다면이 모든 일을하는 데있어 가장 중요한 것은 무엇입니까? 왜해야합니까?
이제 다른 터미널 ( 터미널 2 )을 열고 아래 명령을 수행하십시오.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
출력은 다음과 같습니다.
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
파일 hello
과는 helloagain
볼 수 없으며 심지어 이러한 파일을 확인하기 위해 루트로 로그인. 따라서이 기능을 사용하면 다른 루트 소유 프로세스도 보거나 찾아 볼 수없는 개인 임시 파일 시스템을 만들 수 있습니다.
의 맨 페이지 unshare
에서
마운트 네임 스페이스 파일 시스템 마운트 및 마운트 해제는 명시 적으로 공유로 표시된 파일 시스템을 제외하고 나머지 시스템 (CLONE_NEWNS 플래그)에 영향을 미치지 않습니다 (mount –make-shared 사용, 공유 플래그는 / proc / self / mountinfo 참조).
unname –mount 후에 mount –make-rprivate 또는 mount –make-rslave를 사용하여 새 네임 스페이스의 마운트 지점이 실제로 부모 네임 스페이스와 공유되지 않도록하는 것이 좋습니다.
네임 스페이스에 사용되는 메모리는 커널에서 가져온 VFS입니다. 그리고 처음부터 바로 설정하면 루트 권한이없는 루트 사용자 인 전체 가상 환경을 만들 수 있습니다.
참고 문헌 :
예제는 이 블로그 게시물 의 세부 정보를 사용하여 구성 됩니다. 또한이 답변의 인용문은 Mike의 훌륭한 설명에서 비롯 됩니다. 이것에 관한 또 다른 훌륭한 읽을 거리는 여기 의 답변에서 찾을 수 있습니다 .
답변
버블 랩을 시스템에 설치 한 경우 한 단계로 쉽게 수행 할 수 있습니다.
bwrap --dev-bind / / --tmpfs /tmp bash
위의 예에서 내부 bash는 / tmp에 대한 자체 뷰를 갖습니다.
@Ramesh의 답변에서 영감을 얻은 솔루션-감사합니다!