티스토리 뷰

Certificate/RHCSA

RHCSA 8 기출문제 - PODMAN 심화!

우주아줌마 2023. 2. 13. 20:56
728x90
반응형

- 컨테이너 하면 Docker 가 떠오르시겠지만 RHEL에서는 PODMAN을 밀고 있습니다!

설명은 나중에 하고 RHCSA8 기출문제 에서 가장 난도  높아 많이들 어려워하시는

그리고 NOPASS에서 가장 주범이라고 들 하시는  분들이 계신 거 같아  몇 가지 언급하고자 포스팅합니다.

제가 1월에 RHCSA9 시험을 한 번 응시했다가 떨어졌는데요.
Root 에서는 podman 관련 명령어 아무 이상 없이 작동하는데, 일반 유저 에서는 podman 명령어 입력 시 오류가 나면서 안 되더라구요.
컨테이너 부분을 가장 신경써서(RH199 guide 기준) 준비하고 갔는데, 명령어 자체가 안 먹어 버리니 멘붕이 오더라구요.
오류 내용은 정신이 없어서 기억하지 못 하지만, 제가 놓친 부분이 있을까요?

그리고 컨테이너 관련 2문제가 나왔는데,
첫 번째는 Root로 build 해서 이미지 생성하는 것이고
두 번째는 앞에서 생성한 이미지로 Rootless 컨테이너 생성 및 systemd 등록 이었는데
애초에 Root로 build 한 이미지가 일반 유저 상태에서는 안 보이잖아요? (podman images)
문제의 의도는 무엇일까요?

위와 같은 댓글로 문의를 주셔서... 

 ' ROOT로 build 해서 이미지 생성 과정'

 ' Rootless  컨테이너 생성 후 systemd  등록과  일반 유저 관련 '

이렇게 두 개 작성 해볼게요요

PODMAN 심화! RHCSA8 기출에 중요한 문제예요 ~~

 

Rootless 컨테이너 실행

 ' 컨테이너 호스트에서 root 사용자 또는 권한이 없는 일반 사용자로 컨테이너를 실행할 수 있습니다.

권한이 없는 사용자가 실행하는 컨테이너를 rootless 컨테이너라고 합니다.

 

Rootless 컨테이너는 더 안전하지만 몇 가지 제한 사항이 있습니다.

예를 들어, rootless 컨테이너는 컨테이너 호스트의 권한이 있는 포트(1024 미만의 포트)를 통해 네트워크 서비스를

게시할 수 없습니다.

필요에 따라 root로 직접 컨테이너를 실행할 수 있지만 그러면 시스템의 보안이 다소 저하되고

공격자가 버그를 이용하여 컨테이너를 손상시킬 수 있습니다.

 

--- 인용구 내용을 보면 ' 권한이 없는 일반 사용자로 컨테이너를 실행할 수 있습니다.'

 

  1.  일반 사용자로 Systemd 서비스 실행
    systemd로 시스템 서비스는 물론 사용자 서비스도 관리할 수 있다.
    사용자는 systemd 사용자 서비스를 통해 자체 서비스용 유닛 파일을 만들고 root 액세스 권한 없이도
    systemctl 명령을 사용하여 그러한 서비스를 관리할 수 있습니다.
    !! 참고!!
    루트가 아닌 사용자로 사용자 서비스를 활성화하면 SSH를 사용하거나 텍스트 또는 그래픽 콘솔을 통해 
    첫 번째 세션을 열 때 해당 서비스가 자동으로 시작됩니다.
    마지막 세션을 닫으면 서비스가 중지되고 , 이 동작은 시스템이 시작될 때 시작되고 시스템이 
    종료될 때 중지되는 시스템 서비스와는 다릅니다.

    !! 참고 2!!
    loginctl enable-linger 명령을 실행하여 이 기본 동작을 변경하고 활성화된 서비스가 서버와 함께
    시작되고 서버가 종료되면 중지되도록 강제 실행할 수 있습니다.
    ( 작업을 되돌리려면 loginctl disable-linger 명령을 사용합니다.  현재 상태를 확인은 loginctl show-user 유저명)

  2. Systemd 사용자 서비스 설정
    사용자 서비스를 제어하려면 systemctl --user 명령어와 옵션을 사용합니다.
    systemd.unit 및 systemd.service에 대해 찾아보시고 공부하셔야 합니다.

[user@host]$ mkdir -p ~/.config/systemd/user/     # 우선 서비스를 사용할 유저로 systemd.unit 디렉토리를 만들어준다.
[user@host]$ podman denerate systemd --name '컨테이너명' --files --new
             # podman generate systemd 명령은 컨테이너를 모델로 사용하여 구성파일을 만들고
             systemd에서는 처음에는 컨테이너가 없을 것으로 가정하기 때문에 파일을 만든 다음
             컨테이너를 삭제해야 합니다.
             ## -name '컨테이너명' 은 유닛 파일을 생성할때 모델로 사용할 기존 컨테이너의 이름을 지정해줍니다.
                (podman 은 이 이름을 사용하여 container-container_name.service 유닛 파일의 이름을 빌드함)
             ## --new 옵션은 서비스가 시작되면 컨테이너를 만들고 중지되면 삭제하도록 podman을
             구성함

  3. Systemd를 사용하여 컨테이너 시작과 중지

     컨테이너를 제어는 systemctl 명령을 사용하고

   - 시작 : systemctl --user start container -web  # systemd로 만든  container-'컨테이너명'으로 입력

   - 중지 : systemctl --user stop container-web
   - 상태 : systemctl --user status container-web 

 

 

 


 연습 - 1.  컨테이너 관리 툴 설치, rootless  컨테이너 실행

           2.  시스템이 시작될 때 시작할 컨테이너에 대해 systemd 설정

 

 

[root@serverb]# yum module install container-tools
[user@serverb]# podman run -d --name nginx -p 80:80 -v registry.access.redhat.com/ubi8/nginx-120 
[user@serverb]# curl http://localhost:80/    # ngix 구동된 웹페이지 확인

# nginx 컨테이너가 서버와 함께 자동으로 시작되도록 serverb 에서 user 유저로 systemd를 구성 
[user@serverb]# mkdir -p ~/.config/systemd/user/
[user@serverb]# podman generate systemd --name nginx --files --new
[user@serverb]# podman stop nginx
[user@serverb]# podman rm nginx
[user@serverb]# systemctl --user daemon-reload
[user@serverb]# systemctl --user enable --now container-nginx.service
[user@serverb]# loginctl enable-linger

여기까지 RHCSA8 기출 중에 가장 중요한 PODMAN입니다.

실습으로 확인하시고 궁금하신 내용 댓글 달아 주세요

 

728x90
반응형
댓글