ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • _Docker_chroot container & isolation
    Tools/Docker 2024. 5. 31. 20:24

    개발을 하면서 Docker에 대해 많이 들어봤을 거라 생각한다.

    그럼 Docker란 무엇일까?

    Docker (이미지 출처: 나무위키)

     

    Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다.

    실제로 우리가 Github에서 Open source를 사용하려고 하면, Docker로 배포하는 경우를 많이 볼 수 있다.

    Docker를 가상머신과 비슷하게 생각해도 좋지만, 운영체제를 가상화하지 않는 컨테이너 기술이니만큼 가상머신에 비해서 가볍고 한 대의 서버에 여러 개의 서비스를 구동하기 좋다.

     

    1. chroot

     docker에 대해 알아보기전에 chroot에 대해 살펴보자.

    리눅스 파일시스템은 root로부터 파일 시스템이 시작된다.

    chroot는 change root directory의 약자로 root dir.를 특정 디렉터리로 변경하는 기능을 가지는데, 상위 디렉터리에 프로세스가 접근할 수 없도록 설정하여 해당 경로에 프로세스를 격리할 수 있다.

    실제로 이 기능을 사용하여 각자 private mount layout을 가질 수 있으며 격리된 directory hierarchy를 통해 경로를 속일 수 있다.

    Directory Tree Showing Chroot "Jail" (ref: security queens)

     

    chroot을 이해하기 위해 간단한 실습을 해보자.

     

    사전준비: 

    1. vsftpd 설치

    우선 ftp서비스를 제공하는 vsftpd를 설치

    $ sudo apt -y install vsftpd

     

    설치 후 서비스가 running 되었는지 확인하고, running이 아니라면 start 한다.

    active가 아니면 아래의 명령어를 터미널에서 실행.

    $ sudo systemctl is-active vsftpd

     

    2. filezilla 설치

    $ sudo apt -y install filezilla
    $ filezilla  # start filezilla

    filezila를 실행하면 다음과 같은 창을 볼 수 있다.

    FileZilla

    우상단의 File아래의 Open the Site Manager 아이콘을 클릭하면 아래의 창이 나오는데 New site를 클릭하여 다음과 같이 설정해 준다.

    만약 한글인 경우는 Charset의 Force UTF-8을 클릭해 줘야 글씨가 깨지지 않는다.

    이제 Connect를 클릭하여 연결하자.

    연결되면 다음의 화면이 보인다.

    좌측이 local 우측이 remote 시스템이다. (하지만 같은 위치)

    일단, Help 아래의 아이콘을 클릭하여 연결을 끊어주자.

    그리고 /etc/vsftpd.conf를 root 권한으로 실행하여 다음 2행을 추가하고 저장하자. (114번 줄쯤에 주석으로 처리되어 있다.)

    설정을 완료하고 vsftpd를 재실행하자

    추가로 status도 확인할 수 있다.

    다시 filezilla로 재접속하면 remote에서 Home directory 자체가 root directory가 되었다.

    chroot가 root가 된 것이다.

    이는 chroot의 예시이며, 다양한 방법으로 사용할 수 있다.

     

    2. Isolation

    시스템 내의 존재하는 자원이 한정적이기 때문에 한정적인 자원을 효율적으로 분배하면 시스템의 가용성으로 올릴 수 있다.

    그렇기 때문에 isolation(격리)가 필요하게 되었다.

    현대적인 OS는 프로세스가 독립적인 공간을 가지게 해준다고 한다.

    예를 들어서 내가 OpenCV3 version을 사용하는 프로그램과 OpenCV4 version을 사용하는 프로그램이 있다면, 격리 기술을 사용하여 독립적으로 프로그램을 실행시킬 수 있다.

    보안, 자원 관리적 측면에서 호환, 충돌 측면에서 다양한 이점을 얻을 수 있다.

     

    3. Docker

    Docker는 container를 세련된 방식으로 구현한 제품의 일종.

    Host OS위에서 작동하는 격리된 프로세스의 일종으로 Virtual Machine과 달리 Memory, File system의 I/O에서 발생되는 크리티컬한 overhead가 없다.

    하지만, daemon으로 작동하면서 child process로 수직 관리를 한다는 단점(daemon이 죽으면 다 죽음), 관리자 권한 사용이 필요하다는 단점(보안적인 문제)이 있다.

    Docker와 Hypervisor(VM?)의 차이

     

    이러한 docker의 보안적 문제를 해결하기위해 RedHat계열 Linux에서는 podman을 사용하고 있다.

    'Tools > Docker' 카테고리의 다른 글

    _Docker_docker 설치 및 권한  (1) 2024.06.03
Designed by Tistory.