설치성공기
HOME > 커뮤니티 > 설치성공기

[프로그램] Sulinux SSH 사용자 완전 묶어두기,, CHROOT,,

 글쓴이 : Nefree
작성일 : 07-08-18 14:00    조회 : 11,295  
리눅스를 처음 접해보면서 이런 저런 리눅스를 설치해보다가
 
저를 정착시킨 Sulinux,,
 
서버를 셋팅하고 계정을 추가하고, SSH 엡속하니
 
이게 웬일, /까지 모두 이동 가능하다,, 물론 수정은 할 수 없으나,
 
cat 을 이용하여 내용까지 확인 가능하다,
 
퍼미션으로 막아보려 했으나,, 경로만 알면 다 소용없는짓,,
 
그러다보니 CHROOT 를 알게 되었는데, 한국에 돌아다니는 CHROOT는
계속해서 /bin/bash 파일이 없다면서,,제대로 적용이 되질 않더군요,,
 
안되는 영어 막 끌어내서,,찾아보고 설치해보니,,드디어 성공했답니다.
 
잡소리가 너무 길었군요,,
 
# /etc/rc.d/init.d/sshd stop
 
# rpm -e --nodeps openssh-server openssh-clients openssh
 Sulinux 에 설치된 ssh 패키지를 모두 삭제 합니다.
 이러한 이유때문에 모든 작업은 원격으로 설정하시면 ㅠ 안됨,
 
# tar jxvf openssh*
# vi openssh-4.5p1-chroot/contrib/redhat/openssh.spec
 
%define no_x11_askpass 0 -> %define no_x11_askpass 1
%define no_gnome_askpass 0 -> %define no_gnome_askpass 1
 위와같이 변경합니다.
# rm -rf openssh-4.5p1-chroot/contrib/aix/
# rm -rf openssh-4.5p1-chroot/contrib/hpux/
# rm -rf openssh-4.5p1-chroot/contrib/caldera/
# rm -rf openssh-4.5p1-chroot/contrib/suse/
# rm -rf openssh-4.5p1-chroot/contrib/cygwin/
# rm -rf openssh-4.5p1-chroot/contrib/solaris/
 
# mv openssh-4.5p1-chroot openssh-4.5p1
# tar czvf openssh-4.5p1.tar.gz openssh-4.5p1/
# rm -rf openssh-4.5p1
# yum -y install openssl-devel
# rpmbuild -tb --clean openssh-4.5p1.tar.gz
 설치 시 Zlib 버전때문에 오류가 뜰경우,,,
 zlib 최신 버전을 설치하시고 rpmbuild 하세요^^.
# rpm -Uvh /usr/src/redhat/RPMS/i386/openssh-4.5p1-1.i386.rpm
# rpm -Uvh /usr/src/redhat/RPMS/i386/openssh-server-.i386.rpm
# rpm -Uvh /usr/src/redhat/RPMS/i386/openssh-clients-386.rpm
# rm -f openssh-4.5p1.tar.gz
# rm -f openssh-4.5p1-chroot-tar.bz2
 
# vi /etc/yum.conf
 
exclude=openssh  를 추가해주세요,
 
# vi /etc/rc.d/init.d/sshd
 
initlog -c "$SSHD $OPTION" && success || failure
->  $SSHD $OPTION && success || failure
 로 수정해주세요,,
# vi /usr/sbin/chroot-useradd
 
#!/bin/bash
#
# Usage: ./chroot-useradd username [shell]
#
# Here specify the apps you want into the enviroment
CMD="bash ls touch mkdir tar gzip cp mv rm pwd chmod cat vi id rsync ssh scp ping ssh-keygen perl"
APPS=`which $CMD`
# Sanity check
if [ "$1" = "" ] ; then
echo " Usage: ./chroot-useradd username [shell]"
exit 1
fi
# Obtain username and HomeDir
CHROOT_USERNAME=$1
if [ "$2" = "" ] ; then
useradd $CHROOT_USERNAME
else
useradd -s $2 $CHROOT_USERNAME
fi
[ $? -ne 0 ] && exit 1
usermod -d /home/$CHROOT_USERNAME/./ $CHROOT_USERNAME
passwd $CHROOT_USERNAME
chown $CHROOT_USERNAME /home/$CHROOT_USERNAME
chgrp $CHROOT_USERNAME /home/$CHROOT_USERNAME
rm -f /home/$CHROOT_USERNAME/.* > /dev/null 2>&1
HOMEDIR=`grep /etc/passwd -e "^$CHROOT_USERNAME" | cut -d':' -f 6`
cd $HOMEDIR
# Create Directories no one will do it for you
mkdir -pv $HOMEDIR\etc
mkdir -pv $HOMEDIR\bin
mkdir -pv $HOMEDIR\usr/bin
mkdir -pv $HOMEDIR\usr/libexec/openssh
mkdir -pv $HOMEDIR\usr/local/bin
mkdir -pv $HOMEDIR\dev
mkdir -pv $HOMEDIR\lib
# Make /dev/null or sftp won't work
mknod $HOMEDIR\dev/null c 1 3 -m 666
# Create short version to /usr/bin/groups
# On some system it requires /bin/sh, which is generally unnessesary in a chroot cage
echo "#!/bin/bash" > $HOMEDIR\usr/bin/groups
echo "id -Gn" >> $HOMEDIR\usr/bin/groups
chmod 755 $HOMEDIR\usr/bin/groups
# Add some users to ./etc/paswd
grep /etc/passwd -e "^root" -e "^$CHROOT_USERNAME" > $HOMEDIR\etc/passwd
grep /etc/group -e "^root" -e "^$CHROOT_USERNAME" > $HOMEDIR\etc/group
# Copy the apps and the related libs
for prog in $APPS;
do
cp $prog $HOMEDIR\.$prog
# obtain a list of related libraryes
ldd $prog > /dev/null
if [ "$?" = 0 ] ; then
LIBS=`ldd $prog | awk '{ print $3 }'`
for l in $LIBS;
do
mkdir -pv $HOMEDIR\.`dirname $l`
cp $l $HOMEDIR\.$l
# mkdir -p $HOMEDIR\`dirname $l` > /dev/null 2>&1
# cp $l $HOMEDIR\$l > /dev/null 2>&1
done
fi
done
# From some strange reason these libraries are not in the ldd output, but without them
# some stuff will not work, like usr/bin/groups
cp /lib/libnss_compat.so.2 $HOMEDIR\lib/
cp /lib/libnsl.so.1 $HOMEDIR\lib/
cp /lib/libnss_files.so.2 $HOMEDIR\lib/
cp /lib/ld-linux.so.2 $HOMEDIR\lib/
cp /lib/libc.so.6 $HOMEDIR\lib/
cp /lib/libm.so.6 $HOMEDIR\lib/
cp /lib/libpthread.so.0 $HOMEDIR\lib/
cp /lib/librt.so.1 $HOMEDIR\lib/
cp /lib/libthread_db.so.1 $HOMEDIR\lib/
cp /etc/termcap $HOMEDIR\etc/
cp /usr/libexec/openssh/sftp-server $HOMEDIR\usr/libexec/openssh
exit 0
 
저장하시고
# chmod 700 /usr/sbin/chroot-useradd
 
# chroot-useradd 유저아이디
  이제 유저가 생성이 되고, SSH 접속해서
 
 pwd 하시면 전에는 /home/아이디 였지만 / 로 바뀌신걸 확인 하 실 수 있을 겁니다.
 
su_usersetup 과 연동하시려면,,
 
위의 chroot-useradd 에서
 
passwd $CHROOT_USERNAME 부분을 삭제하시고,
 
/root/bin/su_usersetup 에서
 
useradd -d $2$3 $3 << /dev/null 이부분을
 
chroot-useradd $3 으로 수정하시면 됩니다.


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기

힘쓰 07-08-25 21:43
 
따라하다보니 오류가 헉...
zlib 최신 버전을 설치하시고 이건 yum install zlib 이케 하면 되나요?

마지막 오류부분
------------------------------------------------------------------------------------------------------------
If you are in doubt, upgrade zlib to version 1.2.3 or greater.
See http://www.gzip.org/zlib/ for details.
오류: /var/tmp/rpm-tmp.62117의 잘못된 종료 상황 (%build)


RPM 제작 오류:
    /var/tmp/rpm-tmp.62117의 잘못된 종료 상황 (%build)
------------------------------------------------------------------------------------------------------------
여기서 이젠 어떻게 하죠...
힘쓰 07-08-25 22:55
 
zlib을 설치후 다시 잘 따라했습니다. 휴~우

그리고.. 마지막 부분!!
/root/bin/su_usersetup 에서
 
useradd -d $2$3 $3 << /dev/null 이부분을
 
chroot-useradd $3 으로 수정하시면 됩니다. 에서.....
------------------------------------------------------------------------------------------------------------
이게 맞나요?
su_setupuser 70번째줄

echo " 계정 생성중..."
/usr/sbin/chroot-useradd $3 <----- 이렇게 하는게 맞나요?
mkdir /$2/$3/$web_root
chown -R $3:$3 /$2/$3/*
chmod 701 /$2/$3
echo "$4" | passwd --stdin $3
Nefree 07-08-26 10:13
 
/root/bin/su_usersetup 부분은 편의에 맞게 설정하시면 됩니다.

/usr/sbin/chroot-useradd 이거나 chroot-useradd 나 똑같이 실행이 됩니다.

단, 그렇게 바꾸실 경우에는

chroot-useradd 에서 passwd 부분을 삭제하셔야 합니다.
     
힘쓰 07-08-26 16:25
 
chroot-useradd 에서 passwd 부분을 삭제하셔야 합니다.

이부분은 vi /usr/sbin/chroot-useradd 이 어느?부분에서 지워주는 건가요?

아무튼 현재는 사용자 계정으로 로그인 하면
상위 계정으로 이동이 안되는군요!

잘 된건가요...  덕분에 해결했습니다. 감사합니다.
Nefree 07-08-26 22:19
 
네,, /usr/sbin/chroot-useradd 에서 passwd 부분을 삭제하시면 됩니다.

그 이유는 su_usersetup 부분과 중복 되기 때문인데요,,

삭제하지 않으실경우 su_usersetup 에서 유저생성시,,

비밀번호를 다시 입력해야하는 번거로움이 있습니다.^^
방가넷 08-05-03 17:05
 
Nefree  님 // 감사합니다 ^^*

Zlib에러로 고생하는분
참고로 rpm 빌드 받아가세요 링크잡을께요~
http://bangga.net/down/openssh-4.5p1-1.i386.rpm
http://bangga.net/down/openssh-clients-4.5p1-1.i386.rpm
http://bangga.net/down/openssh-server-4.5p1-1.i386.rpm
아파치 09-07-20 18:16
 
SULinux 2.0 에서는 su_usersetup 과 연동해서 사용하는데...

설치도 잘되었고 사용하는데에는 지장이 없는것 같습니다.

그런데 약간의 문제가 있네요...^^;;

새로운 계정을 만들때 마지막에 20줄정도의 cp 에러가 나오는데요.

에러내용은
cp: cannot stat `(0x00c0d000)`:그런파일이나 디렉토리가 없음
과 비슷한 내용의 에러 메세지가 밑으로 20줄정도가 나오네요.

하지만 계정 디렉토리에는 복사가 다 되어 있는것 같습니다.

암튼 상위 폴더로 이동은 되지 않아 그냥 사용하고 있습니다.

그냥 사용해도 될런지...문제 해결을 위해 고수님의 말씀을 기다립니다....^^;;