SEO対策ならSEO knowledge

TOPLinux>Linuxサーバー

chrootを設定(CentOS)

以下の作業は、すべてrootで行います。

OpenSSHをインストール

chrootがOpenSSHで正式にサポートされているのは、バージョン4.9以降なので、4.9以降のOpenSSHが入っていない場合は、このページの手順に従って、最新版のOpenSSHをインストールします。

chrootの設定

wheelグループに属していないユーザー以外のユーザーにchrootを設定し、ホームディレクトリ以外を参照できないようにします。

適当なエディタで、/etc/ssh/sshd_config の末尾に、以下の設定を追加します。

Match Group *,!wheel
    ChrootDirectory /home/%u/./

chrootユーザー作成

chrootを設定するユーザーを作成するためのスクリプトを作成します。 (ここでは、chroot-useraddという名前で作成します。)

適当なエディタで以下の内容を書き込みます。

#!/bin/bash
#
# Usage: ./chroot-useradd username [shell]
#

# Here specify the apps you want into the enviroment
CMD="bash ls touch mkdir cp mv rm pwd chmod cat vi id rsync ssh scp sftp ping ssh-keygen perl"
APPS=`which $CMD`
APPS="${APPS} /usr/libexec/openssh/sftp-server"

# 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
chown root:root /home/$CHROOT_USERNAME
chmod 755 /home/$CHROOT_USERNAME
usermod -d /home/$CHROOT_USERNAME/./ $CHROOT_USERNAME
passwd $CHROOT_USERNAME
rm -f /home/$CHROOT_USERNAME/.* > /dev/null 2>&1
cd /home/$CHROOT_USERNAME/./

# Create Directories no one will do it for you
mkdir -p etc
mkdir -p bin
mkdir -p usr/bin
mkdir -p usr/local/bin
mkdir -p usr/libexec/openssh
mkdir -p home/$CHROOT_USERNAME
chown $CHROOT_USERNAME:$CHROOT_USERNAME home/$CHROOT_USERNAME
MAKEDEV -d dev -x null zero

# 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" > usr/bin/groups
echo "id -Gn" >> usr/bin/groups
chmod 755 usr/bin/groups

# Add some users to ./etc/paswd
grep /etc/passwd -e "^root" -e "^$CHROOT_USERNAME" > etc/passwd
grep /etc/group -e "^root" -e "^$CHROOT_USERNAME" > etc/group

# Copy the apps and the related libs
for prog in $APPS;
do
    cp $prog ./$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 -p ./`dirname $l` > /dev/null 2>&1
            cp $l ./$l > /dev/null 2>&1
        done
    fi
done

# From some strange reason these 4 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 lib/
cp /lib/libnsl.so.1 lib/
cp /lib/libnss_files.so.2 lib/
cp /lib/ld-linux.so.2 ./lib/
cp /lib/libc.so.6 lib/
cp /lib/libm.so.6 lib/
cp /lib/libpthread.so.0 lib/
cp /lib/librt.so.1 lib/
cp /lib/libthread_db.so.1 lib/

exit 0

実行権限を付加し、実際にchroot設定のユーザーを作成します。 (ここでは、centosuserという名前のユーザーを作成します。)

このスクリプトで作成したユーザーは、SSHでログインした場合、 ホームディレクトリより上に入ることができなくなります。

なお、このユーザーが自由に操作できるディレクトリは /home/(ユーザー名)/home/(ユーザー名) であり、 このユーザーから見た場合は、/home/(ユーザー名) になります。

# chmod u+x chroot-useradd

# chroot-useradd centosuser
Changing password for user centosuser.
New UNIX password: ← ユーザーパスワード応答
Retype new UNIX password: ← ユーザーパスワード応答(確認)
passwd: all authentication tokens updated successfully.
 このエントリをはてなブックマークに登録 このエントリをlivedoorクリップに登録 Yahoo!ブックマークに登録 このエントリを del.icio.us に登録 Google Bookmarks に追加
[ 新規 | 編集 | 削除 | 凍結 ]    [ 新着 | 履歴 | ヘルプ ]

この記事に関連する求人

携帯サイト

携帯サイトはこちら

QRコード

http://it.kndb.jp/m

記事を書く

関連エントリ

関連ブックマーク

ページ上部へ