설명하다:

설명하다:

이 프로젝트에서는 Ubuntu Linux를 사용할 예정입니다.

컨퍼런스에서 특정 애플리케이션을 교육하려면 다음이 필요합니다.

  1. 모든 학생이 SSH로 접속할 수 있도록 허용동일한서버의 사용자 계정
  2. 사용자가 로그인할 때마다 자동으로 별도의 격리 환경에 배치
  3. 각 격리 환경에는 애플리케이션, 샘플 구성 파일 및 표준 Unix 도구 세트(예: grep, awk, sort, uniq 등)가 포함되어 있습니다. 그러나 사용자가 자신의 파일 시스템만 손상시킬 수 있는 한 전체 Linux 파일 시스템에 액세스하는 것은 괜찮습니다. 타인의 환경이 아닌 고립된 환경.
  4. 사용자의 SSH 세션이 종료되면 가상 환경이 삭제되어야 합니다.

#1에서는 각 학생마다 계정을 만들고 사용자 이름과 비밀번호를 나눠줄 필요가 없도록 단일 사용자 계정을 사용하려고 합니다.

내가 이러한 목표를 달성할 수 있는 방법을 아는 사람이 있나요? 이 목적에 가장 적합한 기술(예: LXC, Chroot 등)은 무엇입니까? 이러한 환경의 생성 및 파괴를 처리하기 위해 .bash_profile 및 .bash_logout을 사용하는 것을 고려하고 있지만 어떤 기술이 필요한 환경을 생성할지 잘 모르겠습니다.

답변1

그리고루스트어바웃이 작업을 쉽게 수행할 수 있습니다.

docker pull ubuntu

docker run -t -i ubuntu /bin/bash
# make your changes and then log out
docker commit $(docker ps -a -q | head -n 1) sandbox

cat > /usr/local/bin/sandbox <<EOF
#!/bin/sh
exec docker run -t -i --rm=true sandbox /bin/bash
EOF
chmod a+x /usr/local/bin/sandbox

echo /usr/local/bin/sandbox >> /etc/shells

useradd testuser -g docker -s /usr/local/bin/sandbox
passwd testuser

testuser로그인할 때마다 격리된 컨테이너에 배치되며 컨테이너 외부는 물론 다른 사용자의 컨테이너도 볼 수 없습니다.
로그아웃하면 컨테이너가 자동으로 삭제됩니다.

참고: 사용자는 명령을 지정하여 이러한 상황을 피할 수 있습니다. 예를 들어: ssh foo.example.com /bin/bash. 보안이 염려된다면 의 ForceCommand옵션을 사용할 수 있습니다 /etc/sshd_config.


설명하다:

docker pull ubuntu

여기서는 사용할 기본 이미지를 얻습니다. Docker는 표준 이미지를 제공하며 우분투도 그 중 하나입니다.
 

docker run -t -i ubuntu /bin/bash
# make your changes and then log out

여기서는 우분투 이미지에서 쉘을 시작합니다. 귀하가 변경한 모든 내용은 사용자에게 그대로 유지됩니다.
당신은 또한 사용할 수 있습니다도커파일이미지를 구축하지만 일회성으로 생각하면 더 간단할 것 같습니다.
 

docker commit $(docker ps -a -q |  head -n 1) sandbox

여기서는 마지막 실행 컨테이너를 이름이 지정된 새 이미지로 변환합니다 sandbox.
 

cat > /usr/local/bin/sandbox <<EOF
#!/bin/sh
exec docker run -t -i --rm=true sandbox /bin/bash
EOF

이는 사용자가 로그인할 때 강제로 실행되는 가짜 셸입니다. 스크립트는 Docker 컨테이너로 실행하고, 로그아웃하면 자동으로 정리됩니다.
 

chmod a+x /usr/local/bin/sandbox

나는 이것이 분명하기를 바랍니다 :-)
 

echo /usr/local/bin/sandbox >> /etc/shells

이는 귀하의 시스템에서는 필요하지 않을 수 있지만 내 시스템에서는 쉘이 /etc/shells.
 

useradd testuser -g docker -s /usr/local/bin/sandbox

새 사용자를 생성하고 해당 사용자의 쉘을 우리가 생성할 스크립트로 설정합니다. 이 스크립트는 강제로 샌드박스 컨테이너에서 실행되도록 합니다. docker사용자가 새 컨테이너를 시작할 수 있도록 이들은 이 그룹의 구성원입니다 .
사용자를 docker 그룹에 넣는 또 다른 방법은 개별 명령에 대한 sudo 권한을 부여하는 것입니다.
 

passwd testuser

나는 이것이 또한 분명하기를 바랍니다.
 

답변2

당신은 그것을 사용할 수 있습니다지옥불제한된 인클로저. 기본적으로 SSH 또는 텔넷을 통해 열리는 일반 bash 세션에 마운트, PID, IPC 및 네트워크 네임스페이스를 연결합니다. 가상환경은 로그아웃 시 자동으로 소멸됩니다. 다음은 간단한 가이드입니다:

Linux 네임스페이스를 사용하여 로그인 셸을 제한하는 방법

관련 정보