사용자 환경을 즉시 복제 및 격리


8

이 프로젝트에 우분투 리눅스를 사용할 것입니다.

회의에서 특정 응용 프로그램을 교육하려면 다음이 필요합니다.

  1. 각 학생이 서버 에서 동일한 사용자 계정으로 ssh 할 수 있도록하기 위해
  2. 로그인 할 때마다 사용자를 별도의 격리 된 환경에 자동으로 배치
  3. 각 격리 된 환경에는 응용 프로그램, 예제 구성 파일 및 표준 유닉스 도구 세트 (예 : grep, awk, sort, uniq 등)가 포함됩니다. 그러나 사용자가 자신 만 손상시킬 수있는 한 전체 Linux 파일 시스템에 액세스하는 것도 좋습니다. 고립 된 환경과 다른 환경은 아닙니다.
  4. 사용자 SSH 세션이 종료되면 가상 환경이 파괴되어야합니다.

# 1의 경우 단일 사용자 계정을 사용하여 각 학생에 대한 계정을 만들고 사용자 이름과 암호를 전달할 필요가 없습니다.

내가이 목표를 달성 할 수있는 방법을 아는 사람이 있습니까? LXC, Chroot 등 어떤 기술이 가장 적합합니까? .bash_profile 및 .bash_logout을 사용하여 이러한 환경의 생성 및 파괴를 처리하지만 필요한 환경을 생성 할 수있는 기술이 무엇인지 확실하지 않습니다.

답변:


8

Docker 를 사용하면 매우 쉽게 할 수 있습니다.

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로그인 할 때마다 다른 사용자의 컨테이너뿐만 아니라 외부의 아무것도 볼 수없는 격리 된 컨테이너에 배치됩니다.
그런 다음 컨테이너는 로그 아웃 할 때 자동으로 제거됩니다.


설명:

docker pull ubuntu

여기서 작업 할 기본 이미지를 가져옵니다. Docker는 표준 이미지를 제공하며 우분투는 그중 하나입니다.
 

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

우분투 이미지에서 쉘을 시작합니다. 변경 사항은 사용자에게 유지됩니다. Dockerfile 을 사용하여 이미지를 만들
수도 있지만 한 번은 이것이 더 간단하다고 생각합니다.
 

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

이것은 사용자가 로그인 할 때 강제로 실행되는 가짜 셸입니다. 스크립트는이를 도커 컨테이너로 시작하여 로그 아웃하자마자 자동으로 정리됩니다.
 

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

나는 이것이 명백하기를 바랍니다.
 


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.