글쎄요, 저는 Docker를 사용하고 있지만 아직 Chroot 감옥에 익숙하지 않습니다.
Debian/Node.js의 Docker 이미지가 설치되어 있습니다. 하지만 저는 모든 Debian 사용자가 Docker의 루트 액세스 없이 자신의 Node.js 애플리케이션을 실행할 수 있기를 바랍니다.
예:
- 사용자:조립식 쇠지레
- 집:/집/지미
- 껍데기:/bin/bash
그래서조립식 쇠지레이제 Node.js 애플리케이션을 실행할 수 있습니다./bin/bash껍데기. 그러나 전체 시스템을 수정할 수도 있습니다(예를 들어 "rm -R /etc"를 실행할 수 있음). 내가 맞나요?
그런 다음 예를 들어 수정할 수 있습니다.지미의껍데기:/usr/sbin/nologin그리고 웹 UI에서만 Node.js 인스턴스를 시작/중지할 수 있는 옵션을 제공했지만... Node.js의 "fs" 모듈을 사용하면 전체 시스템을 수정할 수 있었습니다. 내가 맞나요?
이제 내가 옳다면 두 가지 선택이 있습니다
- 나는 "chroot 감옥"을 만들 수 있다고 생각했습니다.조립식 쇠지레. 그래서 /home/jimmy는 chroot 감옥이 될 것입니다. 그는 Node.js 애플리케이션을 실행할 수 있지만 전체 시스템을 수정할 수는 없습니다. Node.js "fs"는 /home/jimmy로 제한됩니다. 내가 맞나요?
- 상관하지 마세요. 지미를 위해 새 Docker 컨테이너를 초기화하세요... 괜찮습니다. 하지만 내 생각에는 = 새 컨테이너 = 새 시스템 = 더 많은 데이터(MB)
좋아, 첫 번째 옵션이 나에게 필요한 것이라고 말하는 사람이 있다면 괜찮습니다. jimmy가 포트 8080을 사용하여 Node.js 웹 서버를 실행하고 다른 사용자가 동일한 포트를 사용하는 경우 포트를 어떻게 바인딩합니까? Docker를 사용하면 컨테이너가 시작되기 전에 이 문제를 처리할 수 있을 것이라고 생각했습니다.
답변1
사용자 로그인에 대해 일부 오해가 있는 것 같습니다.
Nodejs를 통해 /bin/bash
또는 직접 액세스하는 사용자는 수정 권한이 있는 파일만 수정할 수 있습니다. 대부분은 /etc
by 가 쓸 수 없으므로 전체 디렉토리에 jimmy
액세스할 수 없습니다 .rm
을(를) 사용하는 것이 맞습니다 /usr/sbin/nologin
. 사용자는 시스템에 로그인할 수 없습니다. 이 경우 Nodejs 액세스를 위해 웹 UI를 실행할 때 웹 UI가 액세스하고 싶지 않거나 사용자가 액세스할 수 있는 파일에 대한 액세스를 허용하지 않는지 확인해야 합니다.
어떤 솔루션을 선택하더라도 동일한 IP 주소와 포트에서 여러 서비스를 실행할 수 없습니다. 다른 IP 주소의 동일한 포트에 서비스를 바인딩하거나 다른 포트를 사용할 수 있습니다. 해결책은 각 사용자가 해당 포트에서 실행되도록 한 다음 각 서비스에 대한 프록시 역할을 하는 웹 서버를 구축하는 것입니다.
Docker 사용에 대해 이야기했는데, 사용 중인 가능한 사용자 제한 사항은 모르겠지만 왜 Docker를 사용하지 않는지 잘 모르겠습니다. 추가 격리 및 네트워크 관리 기능을 갖춘 chroot와 매우 유사합니다. Docker는 기본적으로 단일 서비스를 실행하도록 설계되었으므로 각 사용자는 Nodejs 인스턴스를 실행하기 위한 자체 컨테이너를 갖게 됩니다.
Docker가 옵션이 아니고 이 작업을 올바르게 수행할 수 있다고 확신하는 경우 chroot를 사용하는 것이 좋습니다. 그렇지 않으면 어디에서나 적절한 권한이 있는 다중 사용자 로그인을 제공하는 단일 시스템으로 귀하의 요구 사항을 충족할 수 있을 것 같습니다.