[OS-012][실무] 인터넷 없는 읽기 전용 Linux 실습실 만들기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[OS-012][실무] 인터넷 없는 읽기 전용 Linux 실습실 만들기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 77회 작성일 26-09-06 11:33

본문

[이번 수업]

내 컴퓨터 안에 일회용 Linux 컨테이너를 만들고 사용자·파일·자원 상태를 안전하게 확인합니다. 네트워크와 쓰기 범위를 막아 실제 서버를 건드리지 않는 실습실을 구성합니다.

[선수지식]

CORE-008의 컨테이너, OS-003의 권한, OS-005의 사용자, OS-007의 자원 확인을 알면 좋습니다. Docker 명령을 실행할 수 있어야 합니다.

[학습목표]

1. 격리 범위와 컨테이너의 한계를 설명한다.
2. 네트워크·권한·쓰기·CPU·메모리를 제한한다.
3. 종료하면 사라지는 환경에서 Linux 명령을 확인한다.

[핵심개념]

컨테이너는 프로세스, 네트워크, 파일시스템 같은 자원을 이름공간(namespace)으로 나눠 보이게 합니다. 하지만 호스트의 Linux 커널을 함께 쓰므로 완전한 가상머신과 같지 않습니다. 격리 설정을 여러 겹 적용하고 신뢰하지 않는 코드를 실행하지 않는 태도가 필요합니다.

예제의 `--network none`은 컨테이너 네트워크를 끊고, `--read-only`는 루트 파일시스템 쓰기를 막습니다. `/tmp`만 임시 메모리 파일시스템으로 열며 실행·특수 권한을 제한합니다. `--cap-drop ALL`, `no-new-privileges`, 일반 사용자, 프로세스·메모리·CPU 한도도 함께 적용합니다. `--rm`은 종료 뒤 컨테이너를 지웁니다.

[따라하기]

처음에는 이미지 다운로드에 인터넷이 필요할 수 있습니다. 다운로드 뒤 아래 한 줄로 실습실을 시작하세요. macOS·Linux 터미널과 Windows PowerShell에서 같은 명령을 사용할 수 있습니다.
```sh
docker run --rm -it --name linux-lab --network none --read-only --tmpfs /tmp:rw,noexec,nosuid,size=16m --cap-drop ALL --security-opt no-new-privileges=true --pids-limit 64 --memory 256m --cpus 1 --user 65534:65534 ubuntu:24.04 sh
```

컨테이너 안에서 다음을 차례로 실행합니다.
```sh
id
cat /etc/os-release | head -n 3
touch /tmp/check.txt
ls -l /tmp/check.txt
touch /etc/check.txt
exit
```

예상 결과는 id에 65534번 일반 사용자가 표시되고 `/tmp/check.txt`는 만들어지는 것입니다. `/etc/check.txt`는 권한 또는 읽기 전용 오류로 실패해야 합니다. exit 뒤 `docker ps -a --filter name=linux-lab`에 남은 컨테이너가 없어야 합니다. Windows에서 Docker 실행 환경이 Linux 컨테이너 모드인지 확인하세요.

각 옵션은 목적이 있습니다. 읽기 전용 루트는 변경을 막고, 작은 임시 `/tmp`는 꼭 필요한 쓰기만 허용합니다. 자원 한도는 실수로 호스트가 느려지는 범위를 줄입니다. 네트워크 차단은 패키지 설치도 막으므로 필요한 도구는 검토한 이미지에 미리 포함해야 합니다.

[흔한 실수]

`--privileged`를 붙이거나 호스트 전체 폴더와 컨테이너 엔진 소켓을 연결하지 마세요. root 사용자, 넓은 네트워크, 무제한 자원으로 시작하면 실습실의 목적이 사라집니다. 컨테이너만 믿고 중요한 호스트에서 낯선 프로그램을 실행하는 것도 금물입니다.

[보안 주의]

본인 소유의 로컬·격리 환경과 공개된 연습 명령만 사용합니다. 비밀번호·토큰·개인 파일을 컨테이너에 넣지 마세요. 이미지는 공식 출처와 변경 내역을 확인하고 최신 보안 수정이 포함된 버전으로 다시 만들며, 더 강한 경계가 필요하면 별도 가상머신을 사용합니다.

[직접 해볼 과제]

컨테이너가 실행 중일 때 다른 터미널에서 `docker inspect linux-lab`을 열어 NetworkMode가 none이고 ReadonlyRootfs가 true인지 찾아 체크리스트에 기록하세요.

[확인문제]

1. 컨테이너가 완전한 가상머신과 다른 핵심 이유는 무엇인가요?
2. 읽기 전용 루트와 임시 `/tmp`를 함께 쓰는 이유는 무엇인가요?
3. 자원 한도와 네트워크 차단은 어떤 실수를 줄이나요?

[다음 학습]

NET-012에서 이 실습실을 바탕으로 작은 웹서비스의 네트워크 구성도를 만듭니다.

[공식 참고 자료]

https://docs.docker.com/reference/cli/docker/container/run/
https://docs.docker.com/engine/security/
https://man7.org/linux/man-pages/man7/namespaces.7.html
https://github.com/opencontainers/runtime-spec/blob/main/config-linux.md
https://ubuntu.com/about/release-cycle

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
1,774
어제
5,103
최대
16,772
전체
772,828
Copyright © 소유하신 도메인. All rights reserved.