들어가며
- 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 유무를 확인해 보시기 바랍니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.