Server

Server_chroot환경_사용자분리

하루이2222 2024. 7. 8. 16:46

우분투 22.04에서 schroot를 사용하여 woody 사용자의 /home/woody 디렉토리를 chroot 환경의 루트로 설정하고, 그 안에 /home/woody/home/woody를 사용자의 홈 폴더로 설정하는 방법을 설명.

1. woody 사용자 생성

우선, woody 사용자를 생성합니다. 생성되지 않았다면 아래 명령어로 생성.

sudo adduser woody

2. schrootdebootstrap 패키지 설치

schrootdebootstrap 패키지를 설치.

sudo apt-get update
sudo apt-get install schroot debootstrap

3. schroot 설정 파일 편집

/etc/schroot/schroot.conf 파일을 편집하여 woody 사용자의 chroot 환경을 설정.

sudo nano /etc/schroot/schroot.conf

파일의 끝에 다음 내용을 추가.

[woody]
description=Chroot environment for woody
directory=/home/woody
users=woody
root-users=woody
type=directory

4. chroot 환경 설치

chroot 환경을 설치할 디렉토리를 만들고 debootstrap을 사용하여 우분투 기본 시스템을 설치.

sudo mkdir -p /home/woody
sudo debootstrap --variant=minbase jammy /home/woody http://archive.ubuntu.com/ubuntu/

여기서 jammy는 Ubuntu 22.04 LTS의 코드명.

5. 필수 디렉토리 및 파일 설정

chroot 환경 내에 필요한 파일 시스템 구조를 설정하고 필요한 파일을 복사함.

sudo mkdir -p /home/woody/{bin,lib,lib64,usr,usr/bin,dev,proc,sys,run,home}
sudo cp -v /bin/bash /home/woody/bin/
sudo cp -v /bin/ls /home/woody/bin/
sudo cp -v /bin/mkdir /home/woody/bin/

# 필요한 라이브러리 파일 복사 (ldd 명령어를 사용하여 확인)
sudo cp -v /lib/x86_64-linux-gnu/{libtinfo.so.6,libdl.so.2,libc.so.6,libselinux.so.1} /home/woody/lib/
sudo cp -v /lib64/ld-linux-x86-64.so.2 /home/woody/lib64/ #동일 한 파일일 이라 뜨면 패스 

6. 장치 파일 생성

chroot 환경 내에서 필요한 장치 파일을 생성.

sudo mknod -m 666 /home/woody/dev/null c 1 3
sudo mknod -m 666 /home/woody/dev/tty c 5 0
sudo mknod -m 666 /home/woody/dev/zero c 1 5
#입력 해보고 동일한 파일 이라 뜨면 패스

sudo mount --bind /dev /home/haru2/dev
# /dev 디렉토리를 /home/haru2/dev에 바인드 마운트.
# 목적: /dev의 장치 파일을 /home/haru2/dev에서도 접근 가능하게 함.

sudo mount --bind /proc /home/haru2/proc
# /proc 디렉토리를 /home/haru2/proc에 바인드 마운트.
# 목적: /proc의 가상 파일 시스템을 /home/haru2/proc에서도 접근 가능하게 함.

sudo mount --bind /sys /home/haru2/sys
# /sys 디렉토리를 /home/haru2/sys에 바인드 마운트.
# 목적: /sys의 시스템 정보를 /home/haru2/sys에서도 접근 가능하게 함.

sudo mount --bind /tmp /media/hongyongjae/Database/cagongjoke/tmp
# /tmp 디렉토리를 /media/hongyongjae/Database/cagongjoke/tmp에 바인드 마운트.
# 목적: /tmp의 임시 파일을 /media/hongyongjae/Database/cagongjoke/tmp에서도 접근 가능하게 함.
# 이게 없으면 apt-get 사용시 /tmp에 파일을 생성할수 없어서

#dated and the previous index files will be used. GPG error: #http://archive.ubuntu.com/ubuntu jammy InRelease: Couldn't create temporary file #/tmp/apt.conf.aRYMpu for passing config to apt-key
#W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease  #Couldn't create temporary file /tmp/apt.conf.aRYMpu for passing config to apt-key
#W: Some index files failed to download. They have been ignored, or old ones used #instead.

#에러가 뜰수 있음

sudo mount -t devpts devpts /home/haru2/dev/pts
# devpts 파일 시스템 타입으로 새로운 장치 파일 시스템을 /home/haru2/dev/pts에 마운트.
# 목적: 의사 터미널 장치를 /home/haru2/dev/pts에서 사용 가능하게 함.
# 쉽게 말해 sudo 사용 가능하게 하는 명령임!

7. 사용자 홈 디렉토리 생성 및 설정 파일 복사

chroot 환경 내에 실제 사용자 홈 디렉토리를 생성하고, 필요한 설정 파일을 복사.

sudo mkdir -p /home/woody/home/woody
sudo cp -v /etc/skel/.bashrc /home/woody/home/woody/
sudo cp -v /etc/skel/.profile /home/woody/home/woody/
sudo cp -v /etc/skel/.bash_logout /home/woody/home/woody/
sudo chown -R woody:woody /home/woody/home/woody
sudo chown root:root woody
sudo chmod 755 woody

8. /etc/passwd 파일 설정

chroot 환경 내에 /etc/passwd 파일을 설정하여 woody 사용자의 홈 디렉토리와 셸을 지정.

sudo nano /home/woody/etc/passwd

다음 내용을 추가하거나 수정.

woody:x:1000:1000:Woody,,,:/home/woody/home/woody:/bin/bash

9. SSH 데몬 설정

SSH 데몬의 설정 파일을 편집하여 woody 사용자가 로그인 시 자동으로 chroot 환경으로 들어가도록 설정.

sudo nano /etc/ssh/sshd_config

파일의 끝에 다음 내용을 추가합니다:

Match User woody
    ChrootDirectory /home/woody
    AllowTcpForwarding no
    X11Forwarding no
    ForceCommand /bin/bash

SSH 데몬을 재시작.

sudo systemctl restart ssh

10. schroot 환경 확인

설정을 마친 후 schroot 명령어를 사용하여 woody 사용자의 chroot 환경이 올바르게 설정되었는지 확인함.

sudo schroot -c woody

이제 프롬프트가 woody@hostname:~$와 같이 일반 사용자 셸 프롬프트처럼 표시되어야함.

a. woody 사용자에게 sudo 권한 부여

woody 사용자가 sudo 명령어를 사용할 수 있도록 권한을 부여.

echo "woody ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/woody
chmod 0440 /etc/sudoers.d/woody

이제 woody 사용자는 chroot 환경 내에서 sudo 명령어를 사용 가능.

!외부 스토리지에 사용자 파일을 저장시 마운트된 경로서 부터 소유자가 root 여야함

ex) chroot 사용자의 환경 경로 가 /media/hongyongjae/Database/user 일경우
루트 경로 에 존재하는 /media를 제외 /hongyongjae/Databese/user 까지의 경로를 전부 root가 가지고 있어야함!

아니면 ssh 에서 접근이 안됨...알고 싶지 않았음...나도 몰랐지 이걸가지고 개삽질을 하게 될줄..
ssh는 메인 시스템의 ssh 에서 chroot 세션을 생성해서 넘기는 원리임.