Linux에서 chroot 명령을 사용하는 방법

0
1062
Linux 랩톱 화면의 터미널 프롬프트
Fatmawati Achmad Zaenuri / Shutterstock.com

그만큼 chroot 명령을 통해 교도소에 보내거나 개발 환경 또는 테스트 환경을 격리하거나 시스템 보안을 향상시킬 수 있습니다. 우리는 당신에게 그것을 사용하는 가장 쉬운 방법을 보여줍니다.

chroot 란 무엇입니까?

명령의 유용성을 측정하려는 경우 명령의 기능과 사용 편의성을 고려해야합니다. 사람들이 사용하기에 너무 복잡하거나 너무 오래 사용하여 사용하려고하면 기능이 0 일 수 있습니다. 아무도 사용하지 않으면 기능이 제공되지 않습니다.

Linux 사용자 (개인 및 포럼)와의 토론에서 chroot 명령은 사용하기 어렵거나 너무 당황하여 설정하기가 지루한 명령입니다. 이 훌륭한 유틸리티는 많이 사용되지 않는 것 같습니다.

chroot 일반 파일 시스템과 상호 작용할 수없는 캡슐화 된 파일 시스템에서 프로그램 또는 Bash와 같은 대화식 쉘을 설정하고 실행할 수 있습니다. 내 모든 것 chroot 환경에 잠겨 있고 포함되어 있습니다. 에 아무것도 chroot 환경은 루트 권한으로 에스컬레이션하지 않고 자체의 특수 루트 디렉토리를 지나칠 수 있습니다. 그것은 이런 유형의 환경에서 별명을 얻었습니다. chroot 교도소. “감옥”이라는 용어를 FreeBSD와 혼동해서는 안됩니다 jail 명령은 chroot 평소보다 안전한 환경 chroot 환경.

그러나 실제로는 사용하는 방법이 매우 간단합니다 chroot단계별로 살펴 보겠습니다. 우리는 모든 배포판에서 작동하는 일반적인 Linux 명령을 사용하고 있습니다. 일부 Linux 배포판에는 설정을위한 전용 도구가 있습니다 chroot 우분투를위한 debootstrap과 같은 환경이 있습니다.

언제 chroot를 사용해야합니까?

chroot 환경은 가상 머신의 기능과 유사한 기능을 제공하지만 더 가벼운 솔루션입니다. 캡 티브 시스템에는 VirtualBox 또는 Virtual Machine Manager와 같은 하이퍼 바이저를 설치 및 구성 할 필요가 없습니다. 또한 캡 티브 시스템에 커널을 설치하지 않아도됩니다. 캡 티브 시스템은 기존 커널을 ​​공유합니다.

어떤 의미에서는 chroot 환경은 가상 머신보다 LXC와 같은 컨테이너에 더 가깝습니다. 가볍고 빠르게 배포 할 수 있으며 자동으로 생성 및 발사 할 수 있습니다. 컨테이너와 마찬가지로 컨테이너를 구성하는 편리한 방법 중 하나는 필요한 것을 달성하기에 충분한 운영 체제를 설치하는 것입니다. '필요한 것'질문은 chroot 환경.

일반적인 용도는 다음과 같습니다.

소프트웨어 개발 및 제품 검증. 개발자는 소프트웨어를 작성하고 제품 검증 팀 (PV)이 소프트웨어를 테스트합니다. PV에서 개발자의 컴퓨터에서 복제 할 수없는 문제가 발견되는 경우가 있습니다. 개발자는 일반 사용자와 PV가 가지지 않는 모든 종류의 도구와 라이브러리를 개발 컴퓨터에 설치했습니다. 종종 개발자에게는 효과적이지만 다른 사람에게는 적합하지 않은 새로운 소프트웨어는 소프트웨어의 테스트 릴리스에 포함되지 않은 개발자 PC의 리소스를 사용하는 것으로 판명되었습니다. chroot 개발자는 소프트웨어를 PV에 제공하기 전에 소프트웨어에 양을 담글 수있는 일반 바닐라 캡 티브 환경을 컴퓨터에 가질 수 있습니다. 캡 티브 환경은 소프트웨어에 필요한 최소한의 종속성으로 구성 할 수 있습니다.

개발 위험 감소. 개발자는 전용 개발 환경을 만들어서 아무 일도 일어나지 않으면 실제 PC를 망칠 수 있습니다.

더 이상 사용되지 않는 소프트웨어 실행. 때때로 당신은 무언가의 오래된 버전을 실행해야합니다. 이전 소프트웨어에 Linux 버전과 충돌하거나 호환되지 않는 요구 사항이있는 경우 chroot 문제 소프트웨어 환경.

복구 및 파일 시스템 업그레이드: Linux 설치가 작동하지 않으면 사용할 수 있습니다 chroot 손상된 파일 시스템을 Live CD의 마운트 지점에 마운트합니다. 이를 통해 손상된 시스템에서 작업하고 정상적으로 루트 /에 마운트 된 것처럼 수정을 시도 할 수 있습니다. 이는 손상된 시스템 내의 예상 파일 경로가 Live CD의 마운트 지점이 아닌 루트 디렉토리에서 올바르게 참조됨을 의미합니다. Linux 파일 시스템을 ext2 또는 ext3에서 ext4로 마이그레이션하는 방법을 설명하는 기사에서 유사한 기술이 사용되었습니다.

링 펜싱 애플리케이션. 내부에서 FTP 서버 또는 기타 인터넷 연결 기기 실행 chroot 환경은 외부 공격자가 할 수있는 피해를 제한합니다. 이는 시스템 보안을 강화하는 데 중요한 단계가 될 수 있습니다.

관련 : Linux에서 Ext2 또는 Ext3 파일 시스템을 Ext4로 마이그레이션하는 방법

chroot 환경 만들기

루트 디렉토리 역할을하는 디렉토리가 필요합니다 chroot 환경. 해당 디렉토리를 간단하게 참조 할 수 있도록 변수를 작성하고 디렉토리 이름을 저장합니다. 여기서는 “testroot”디렉토리의 경로를 저장할 변수를 설정합니다. 이 디렉토리가 아직 존재하지 않더라도 곧 만들 것입니다. 디렉토리가 존재하면 비어 있어야합니다.

chr=/home/dave/testroot

터미널 창에서 chr = / home / dave / testroot

디렉토리가 존재하지 않으면 만들어야합니다. 이 명령으로 그렇게 할 수 있습니다. 그만큼 -p (부모) 옵션은 누락 된 상위 디렉토리가 동시에 작성되도록합니다.

mkdir -p $chr

터미널 창에서 mkdir -p $ chr

운영 체제의 일부를 보유 할 디렉토리를 작성해야합니다. chroot 환경이 필요합니다. Bash를 대화식 쉘로 사용하는 미니멀리즘 Linux 환경을 설정하겠습니다. 우리는 또한 touch, rm, ls 명령. 이를 통해 Bash의 모든 내장 명령을 사용할 수 있습니다. touch, rm, ls. 파일을 생성, 나열 및 제거하고 Bash를 사용할 수 있습니다. 그리고이 간단한 예에서 그게 전부입니다.

당신이 만들 디렉토리를 나열하십시오 {} 버팀대 확장.

mkdir -p $chr/{bin,lib,lib64}

터미널 창에서 mkdir -p $ chr / {bin, lib, lib64}

이제 디렉토리를 새로운 루트 디렉토리로 변경하겠습니다.

cd $chr

터미널 창에서 cd ​​$ chr

미니멀리즘 리눅스 환경에서 필요한 바이너리를 일반“/ bin”디렉토리에서 chroot “/ bin”디렉토리. 그만큼 -v (자세한) 옵션은 cp 각 복사 작업을 수행 할 때 수행중인 작업을 알려주십시오.

cp -v /bin/{bash,touch,ls,rm} $chr

cp -v / bin / {bash, touch, ls, rm} $ chr ina 터미널 창

파일은 우리를 위해 복사됩니다 :

파일이 터미널 창에 복사 될 때 cp에서 출력

이 바이너리에는 의존성이 있습니다. 우리는 그들이 무엇인지 발견하고 복사해야합니다. 그렇지 않으면 환경에 파일을 bash, touch, rm, ls 작동하지 않습니다. 선택한 각 명령에 대해이 작업을 차례로 수행해야합니다. 우리는 먼저 배쉬를 할 것이다. 그만큼 ldd 명령은 우리에 대한 의존성을 나열합니다.

ldd /bin/bash

터미널 창에서 ldd / bin / bash

종속성은 터미널 창에서 식별되고 나열됩니다.

터미널 창에 나열된 배쉬 종속성

이러한 파일을 새로운 환경으로 복사해야합니다. 해당 리스팅에서 세부 사항을 선택하고 한 번에 하나씩 복사하면 시간이 많이 걸리고 오류가 발생하기 쉽습니다.

고맙게도 반 자동화 할 수 있습니다. 종속성을 다시 나열하고 이번에는 목록을 작성합니다. 그런 다음 파일을 복사하는 목록을 반복합니다.

여기서 우리는 사용하고 있습니다 ldd 종속성을 나열하고 파이프를 통해 결과를 egrep. 사용 egrep 사용하는 것과 같습니다 grep 이랑 -E (확장 정규식) 옵션. 그만큼 -o (일치 만) 옵션은 출력을 일치하는 라인 부분으로 제한합니다. 숫자로 끝나는 일치하는 라이브러리 파일을 찾고 있습니다 (0-9).

list="$(ldd /bin/bash | egrep -o '/lib.*.(0-9)')"

list =

우리는 목록의 내용을 사용하여 확인할 수 있습니다 echo:

echo $list

터미널 윈도우에서 $ list 에코

이제 목록이 생겼으므로 파일을 한 번에 하나씩 복사하여 다음 루프를 통해 목록을 살펴볼 수 있습니다. 우리는 변수를 사용하고 있습니다 i 목록을 단계별로 살펴 봅니다. 목록의 각 구성원에 대해 파일을 chroot 보유하고있는 값인 루트 디렉토리 $chr.

그만큼 -v (자세한) 옵션 원인 cp 각 사본을 수행 할 때 발표합니다. 그만큼 --parents 이 옵션을 사용하면 누락 된 상위 디렉토리가 chroot 환경.

for i in $list; do cp -v --parents "$i" "${chr}"; done

$ list에서 i의 경우; cp -v --parents "$ i" "$ {chr}"; 터미널 창에서 수행

그리고 이것은 출력입니다.

터미널 창의 cp 루프에서 출력

이 기술을 사용하여 다른 각 명령의 종속성을 캡처합니다. 루프 기술을 사용하여 실제 복사를 수행합니다. 좋은 소식은 의존성을 모으는 명령을 약간만 편집하면된다는 것입니다.

명령 기록에서 명령을 검색하여 Up Arrow 키를 몇 번 누른 다음 편집하십시오. 루핑 복사 명령은 전혀 변경할 필요가 없습니다.

여기에 우리는 Up Arrow 키를 찾아 명령을 찾아 수정했습니다. touch 대신에 bash.

list="$(ldd /bin/touch | egrep -o '/lib.*.(0-9)')"

list =

이제 이전과 동일한 루프 명령을 반복 할 수 있습니다 :

for i in $list; do cp -v --parents "$i" "${chr}"; done

$ list에서 i의 경우; cp -v --parents "$ i" "$ {chr}"; 터미널 창에서 수행

그리고 우리 파일은 우리를 위해 복사됩니다.

터미널 창에서 터치 종속성을 복사하는 cp 루프의 출력

이제 편집 할 수 있습니다 list 에 대한 명령 줄 ls:

list="$(ldd /bin/ls | egrep -o '/lib.*.(0-9)')"

list =

다시, 동일한 루프 명령을 사용합니다. 목록에있는 파일은 중요하지 않습니다. 그것은 우리를 위해 파일을 복사하는 목록을 맹목적으로 작동합니다.

for i in $list; do cp -v --parents "$i" "${chr}"; done

$ list에서 i의 경우; cp -v --parents "$ i" "$ {chr}"; 터미널 창에서 수행

그리고 의존성 ls 우리를 위해 복사됩니다 :

터미널 창에서 LS 종속성을 복사하는 cp 루프의 출력

우리는 list 마지막으로 명령 줄을 사용하여 rm:

list="$(ldd /bin/ls | egrep -o '/lib.*.(0-9)')"

list =

마지막으로 반복 복사 명령을 사용합니다.

for i in $list; do cp -v --parents "$i" "${chr}"; done

우리의 마지막 의존성은 chroot 환경. 마침내 사용할 준비가되었습니다. chroot 명령. 이 명령은 chroot 환경으로 지정하고 셸로 실행할 응용 프로그램을 지정합니다.

sudo chroot $chr /bin/bash

터미널 창에서 sudo chroot $ chr / bin / bash

우리의 chroot 환경이 활성화되었습니다. 터미널 창 프롬프트가 변경되었으며 대화식 쉘이 bash 우리의 환경에서 쉘.

터미널 창에서 활성 chroot 환경

우리는 환경에 가져온 명령을 시험해 볼 수 있습니다.

ls
ls /home/dave/Documents

터미널 창에서 활성 chroot 환경

그만큼 ls 환경 내에서 사용할 때 예상대로 명령이 작동합니다. 환경 외부의 디렉토리에 액세스하려고하면 명령이 실패합니다.

사용할 수있다 touch 파일을 만들려면 ls 그것을 나열하고 rm 그것을 제거하십시오.

touch sample_file.txt
ls
rm sample_file.txt
ls

터미널 창에서 sample_file.txt를 터치하십시오.

물론 Bash 쉘이 제공하는 내장 명령을 사용할 수도 있습니다. 입력하면 help 명령 행에서 Bash가이를 나열합니다.

help

터미널 창에서 help 명령 출력

exit를 사용하여 chroot 환경:

exit

터미널 창에 chroot 환경을 남기기 위해 exit 사용

당신이 제거하려는 경우 chroot 환경에서 간단히 삭제할 수 있습니다.

rm -r testroot/

터미널 창에서 rm -r testroot /

이렇게하면 파일과 디렉토리가 재귀 적으로 삭제됩니다. chroot 환경.

편의를위한 자동화

그렇게 생각한다면 chroot 환경은 유용 할 수 있지만 설정하기가 약간 어려우므로 별칭, 함수 및 스크립트를 사용하여 반복적 인 작업으로 인한 부담과 위험을 항상 줄일 수 있습니다.

관련 : Linux에서 별명 및 쉘 기능을 작성하는 방법