실습> ssh의  chroot 기능을 이용하여 보안을 좀더 강화해보자.

!!! 참고 : http://www.digimoon.net/blog/343 !!!


1. chroot 기능 비활성화 테스트 

2. chroot 설정을 위한 설정파일 변경

3. chroot 설정을 위한 시스템환경 세팅 

4. chroot 설정을 위한 시스템 바이너리 복사

5. chroot 설정을 위한 라이브러리 세팅 

6. chroot 기능 활성화 테스트 

7. 부팅시 chroot 기능을 활성화 

8. bash 프롬프트 변경하기


1. chroot 기능 비활성화 테스트 

# ssh sysadmin@localhost

$ cd /

$ ls

bin   dev  home  lost+found  misc  net  proc  sbin     srv  tmp  var

boot  etc  lib   media       mnt   opt  root  selinux  sys  usr

$ cd etc

$ tail passwd

squid:x:23:23::/var/spool/squid:/sbin/nologin

rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

  :

  :


2. chroot 설정을 위한 설정파일 변경

# vi /etc/ssh/sshd_config



-- /etc/ssh/sshd_config --

#Subsystem      sftp    /usr/libexec/openssh/sftp-server

Subsystem sftp  internal-sftp

Match Group chrootusers        <-- chroot 에 적용할 그룹 설정 

ChrootDirectory /chroot        <-- /chroot 디렉토리 설정

-- /etc/ssh/sshd_config --



# /etc/init.d/sshd restart



3. chroot 설정을 위한 시스템환경 세팅 

5. chroot 설정을 위한 라이브러리 세팅 

!!! 아래 Tree 구조로 세팅 

/chroot

|-- bin   -- /bin 명령어 복사 ls, bash, sh ...

|-- dev   -- zero, null 생성

|-- etc   -- profile, bashrc 복사 

|-- home  -- /home  mount

|-- lib   -- /lib   mount

|-- tmp   -- /tmp  mount

|-- usr

|   |-- bin  -- /usr/bin 명령어 복사 id, vim ...

|   `-- lib  -- /usr/lib mount 

`-- var      -- X


# groupadd chrootusers

# mkdir /chroot (drwxr-xr-x  => drwx--x--x)

# cd /chroot

# mkdir bin etc dev home lib usr tmp var

# mkdir usr/lib

# mkdir usr/bin



# mount --bind /home /chroot/home

# mount --bind /lib /chroot/lib

# mount --bind /usr/lib /chroot/usr/lib

# mount

  :

/home on /chroot/home type none (rw,bind)        <-- 확인 

/lib on /chroot/lib type none (rw,bind)          <-- 확인 

/usr/lib on /chroot/usr/lib type none (rw,bind)  <-- 확인 



# mknod -m 666 /chroot/dev/null c 1 3 

# mknod -m 666 /chroot/dev/zero c 1 5 



4. chroot 설정을 위한 시스템 바이너리 복사

# cd /chroot/bin

# cp -a /bin/bash .

# ln -s bash sh

# cp -a /bin/ls   .

# cp -a /bin/rm   .

# cp -a /bin/mv   .

# cp -a /bin/grep .

# cp -a /bin/awk  .

# cp -a /bin/vi   .

   :

   :


# cd /chroot/usr/bin

# cp -a /usr/bin/id   . 

# cp -a /usr/bin/vim  . 

   :

   :


6. chroot 기능 활성화 테스트 


# useradd -g chrootusers chrootuser1

# echo 1234 | passwd --stdin chrootuser1


-- chrootuser1 로 로그인 --

df / ps / vi   <-- command not found 가 나오면 성공!!! 


# ssh chrootuser1@localhost

Password: 

-bash-3.2$ id

-bash: id: command not found

-bash-3.2$ ps

-bash: ps: command not found

-bash-3.2$ vi

-bash: vi: command not found

-bash-3.2$ ls

bin  dev  etc  home  lib  tmp  usr  var

-bash-3.2$ pwd

/

-bash-3.2$ ls /bin

bash  ls  mv  rm



7. 부팅시 chroot 기능을 활성화 


# echo 'mount --bind /home /chroot/home' >> /etc/rc.local

# echo 'mount --bind /home2 /chroot/home2' >> /etc/rc.local

# echo 'mount --bind /lib /chroot/lib' >> /etc/rc.local

# echo 'mount --bind /usr/lib /chroot/usr/lib' >> /etc/rc.local

# cat /etc/rc.local

-- /etc/rc.local --

  :

  :

mount --bind /home  /chroot/home

mount --bind /home2 /chroot/home2

mount --bind /lib    /chroot/lib

mount --bind /usr/lib /chroot/usr/lib

-- /etc/rc.local --



# reboot



8. bash 프롬프트 변경하기

-bash-3.2$ -> 

# cp /etc/profile /chroot/etc      <-- 그냥 쓰면 에러 발생

# cp /etc/bashrc /chroot/etc       <-- 그냥 쓰면 에러 발생

# vi /chroot/etc/profile  <-- 참고로 필요한 것만 남기고 모두 삭제 



-- /chroot/etc/profile --

ulimit -S -c 0 > /dev/null 2>&1

HOSTNAME=`/bin/hostname`

HISTSIZE=1000

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then

    INPUTRC=/etc/inputrc

fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

-- /chroot/etc/profile --



# cp -a /etc/inputrc /chroot/etc/inputrc



# vi /chroot/etc/bashrc   <-- 참고로 필요한 것만 남기고 모두 삭제 


-- /chroot/etc/bashrc --

shopt -s checkwinsize

PS1="[ssh@\h \W]\\$ "

umask 002

-- /chroot/etc/bashrc --



# ssh chrootuser@localhost


$ pwd

$ id

$ ls /bin



# telnet localhost 22

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

SSH-2.0-OpenSSH_4.3       <-- 보안상 버전정보는 감춘다.