CRIO 사용 시 privileged 옵션을 사용하지 않을 때 su 명령어 사용해야 할 경우

작성자 김효상 수정일 2023-06-02 18:20

#podman, #crio, #kubernetes 1.24

들어가며

  • Kubernetes CRI를 CRIO 사용 시 root 권한으로 컨테이너가 동작할 경우 privileged 옵션이 false 일 경우 sudo 권한을 사용 할 수 없습니다.
  • 이런 경우 securityContext 속성 중 capabilities 를 옵션을 추가하여 sh 파일을 실행 시 su, sudo 명령어 사용 방법을 알아봅니다.


Linux Capabilities

Root User의 privilege를 개별 단위로 세분화 할 수 있는 기능을 Capabilities라 합니다.


CRIO에서 su, sudo 명령어를 사용하지 못하는 이유

특정 capability가 없을 경우 root 권한으로 컨테이너가 실행 된 후 sudo 명령어를 사용 시 아래와 같이 오류가 발생합니다. 

이 경우 root user에 AUDIT_WRITE capability 가 없어 발생하는 오류로 AUDIT_WRITE capability를 추가하여 sudo 혹은  su 권한을 오류 없이 사용 할 수 있습니다.

sudo: unable to send audit message
sudo: pam_open_session: System error
sudo: policy plugin failed session initialization

Capabilities 적용 방법

containers > securitycontext > capabilities > add 속성에 필요한 capability 를 추가 할 수 있습니다.

      containers:
      - name: hub
        image: jupyerhub-image
        imagePullPolicy: IfNotPresent
        securityContext:
          allowPrivilegeEscalation: true
          capabilities:
            add:
              - AUDIT_WRITE
Docker를 사용 할 경우 root user의 기본 capabilities에는 AUDIT_WRITE 추가 되어 있어 capability 추가 없이 sudo 및 su 명령어를 사용 할 수 있습니다.


참고 사이트

https://man7.org/linux/man-pages/man7/capabilities.7.html

https://dockerlabs.collabnix.com/advanced/security/capabilities/#cap_intro


capabilites를 확인하는 명령어는 capsh 이며 명령어를 사용하기 위해서는 libcap 패지키가 설치 되어있어야합니다.
명령어 예: capsh --print | grep "Current:"



마치며

  • Docker 외의 컨테이너 런타임을 사용할 경우 Docker Runtime 에서 발생하지 않던 이슈를 확인해 보았습니다.
  • 다른 컨테이너 런타임을 사용 할 경우 root user에서 예상치 못한 오류로 보게 될 경우 capabilities 유무를 확인해 보시기 바랍니다.




아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300