아래 올라온 글을 보고
강좌라고 하기에는 너무 거창하고 또 그럴 실력도 안되지만
삽질을 통해 배운 내용을 같이 알면 좋을 것 같아 글을 적어봅니다.
도커 컨테이너로 만들어진 앱을 실행할 때, 많은 경우(주로 linuxserver.io 이미지가 그러하죠) puid/pgid를 기본 환경변수로 받습니다.
리눅스는 제가 느끼기에 윈도우에 비해 소유자와 권한에 대해서 매우 철저한 편인데 도커로 실행하는 앱, 또 앱이 쓰고 읽는 파일관련 권한도 결국에는 리눅스 위에 돌아가므로 여기에 대한 권한을 명확히 해줘야 합니다.
도커 컨테이너를 실행하고 htop 같은 것으로 모니터링 해보면 해당 앱이 특정 소유자 권한으로 실행되는 것을 쉽게 확인할 수 있죠. 환경(라이브러리 같은)은 지정된 가상 공간(컨테이너)을 참조하지면 결국 앱의 실행은 호스트에서 돌아가는 다른 프로세스와 똑같습니다. 이 도커기반 앱 실행의 사용자/권한을 원하는대로 컨트롤 하기 위한 옵션이 puid/pgid 입니다.
그러면 도커에서 사용자 관리는 어떻게 하는가?
도커는 루트 권한으로 돌아가기 때문에 이미지에서 사용자/소유권 처리 안해주면 그냥 루트권한으로 실행됩니다. 하지만 이 경우 도커 앱이 생성하는 모든 폴더는 루트만 접근 가능해지는 등등... 불편한 점 뿐만 아니라 보안을 생각할때 전지 전능한 루트권한을 3자 프로세스에 주는 것은 매우 위험하므로 도커에서조차도 지양하도록 하고 있죠.
그러면 어떻게 하느냐? 뭐 정답이란 없겠지만 보통 이런 방식을 씁니다.
일단 임시 유저를 하나 만듭니다. 더미 유저라는 편이 더 맞겠네요. 보통 호스트에서 쓰지 않는 user:group uid:gid로 지정을 합니다. abc:abc 911:911 뭐 이런식으로... 911은 왠만한 호스트 시스템에서 사용하지 않을법한 그런 대역이라서 그런걸로 알고 있습니다. id는 호스트와 공유되고 namespace라 할까? abc 이런건 컨테이너 안에서만 유효하더군요.
여기까지만 이미지를 만들때 미리 작업해 놓습니다. 아직 사용자가 어떤 유저로 실행을 원하는지 모르니까요.
그런 다음 사용자가 지정한 PUID/PGID가 있으면 임시로 만들어진 abc 유저의 id 911을 사용자가 지정한 id로 변경해줍니다. 볼륨 매핑처럼 사용자 매핑 같은거죠. 이 부분은 앱을 실행할 때 처리됩니다. 그런 뒤에 이 abc유저를 가지고 파일폴더 권한 설정, 앱 실행 등등을 처리하도록 합니다. 하지만 유저가 지정하지 않으면? 그냥 abc에 911로 그냥 실행하는거죠.
컨테이너에서 들어가서 볼륨 매핑된 폴더를 ls 해보면 보통 소유자가 abc로 되어 있을겁니다. 하지만 호스트의 매핑된 동일 폴더를 ls 해보면 약간 이야기가 다릅니다. 만약 puid/pgid를 줬다면 호스트의 사용자로, 아니라면 듣도보도 못한 911로 소유권이 종종 바뀌는 것을 경험하게 됩니다.
권한 관련 옵션이 없는 도커앱은 아래의 경우를 생각해 볼 수 있고
1) 루트로 실행됨 (혹시라도 앱에 악성코드나 취약점이 있어서 호스트로 접근 가능하다면 보안 위협)
2) 랜덤 생성된 유저로 실행됨 (php-fpm이나 셀레니움 같이 백엔드 데몬만 떠있어서 요청을 처리하고 돌려주는 단순 기능이면 상관없음)
권한 관리가 되어 있는데도 제대로 지정해주지 않는 다음의 경우도 있겠네요.
1) 귀찮아서 puid=0 pgid=0 넣어서 루트로 실행한다. 위의 1)번과 동일한 상황
2) 지정해주지 않는다. == 도커 컨테이너에게만 abc라고 알려진 911 유저가 활개치고 다닐 수 있음.
정리하면 이렇습니다.
제가 만들어 쓰는 도커 이미지도 간단한거 빼고는 다 puid/pgid를 입력하게 되어 있으니 왠만해서는 입력해서 쓰시는걸 추천합니다.
https://www.linuxserver.io/docs/puid-pgid/
비슷한 내용이 여기에 적혀 있는데.. 이 내용 찾는것도 상당히 힘들었던걸로.. ㅎㅎ
시놀로지가 엄연히 리눅스인데도.. syno로 시작하는 커스텀이 꽤 많은지라.. 그런듯해요
1. id 911은 모든 도커이미지에서 사용되는 건가요? 아니면 이치로님께서 루트권한을 주지 않기 위해서 이치로님의 도커 이미지에서만 911로 지정되도록 해두신 건가요?
2. 다수의 설치기들을 보면 puid, pgid를 0으로 루트권한을 주는데. 그렇게 하면 글에서 말씀하신 접근문제, 보안등의 문제가 다시 발생하는게 아닌지 궁금합니다. 이건 다른 문제인가요?
2. 다수의 설치기 어떤 곳에서 그러던가요? (공격아님) 보통 권장하는 방법이 아닐텐데요...
도커도 완전초보인데 어렵게 설정하는거 하나하나 해서 잘사용중입니다
download: 필터를 활용해서 토렌트파일 백업하려고 여러사이트들 적용중에보니
마그넷링크로 제공하는 사이트는 오류가 나더라구요 그래서 공홈검색해보니
마그넷링크로 제공되면 파일로저장하기위해선 convert_magnet: yes 필터를써야 한다고 되있고
libtorrent패키지 가 필요하다고 되어있네요 또 열심히 검색해보니
https://pypi.org/ pypi 공식패키지에 litorrent가 누락되어있다고 확인하였고
대체제로 docker run wiserain_flexget pip install libtorrent-test
pip install vext.libtorrent
을사용해서 설치까진 했는데 파일설치만가지곤 작동하지않는지 플렉스겟에선 여전히 오류가 나네요 ㅠ
"https://discuss.flexget.com/t/solved-convert-magnet-cannot-work-libtorrent-ceased-to-exist/3537/2"
공홈에서 저와 똑같은 이유로 올라온 문제고 저분은 해결이 되었다는데
제가 초보라 봐도 하나도 모르겠습니다
단순하게는 저인스톨한 리브토렝을 실행하면 될거같기도해서 실행하는법은 모르지만
일단 도커 컨터이너에 접속해보려고 docker exec -t -i wiserain_flexget /bin/bash 해도 접속은 안되고
개인선에서 찾아볼거 정말 다찾아보고 막혀서 질문드립니다 ㅠ
저렇게 설치까지 한다음 어떻게 해야하는지 도움이 필요합니다