![]() |
LINUX |
参考 OpenSSH (chroot) の設定
・サイトへのSECUREな接続、chroot環境を構築します
・一般ユーザが自分のHomeDirをでられなくします
・openssh-4.7p1,chroot-openssh-4.7p1.patchを利用します
・公開鍵認証のみ許可します
・専用の秘密鍵・公開鍵を使用します
・間違ってもrootの秘密鍵を渡さないこと
・ソースの取得、削除は略します
・エディタ、ファイラーの操作は省略します
・Enterキーを省略します
・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます
関連サイト| :create_chroot_env | (http://me.docx.org/openssh/) |
参照ファイル:パッケージの追加
:OpenSSH (chroot) のインストール
仮設定| :サーバ | jupiter.528p.com |
| :OS | CentOS 5.1 |
| :selinx | disabled or permissive |
| :作業 | /root 一部 /home/umi |
| :言語 | LANG=en_US.UTF-8 |
| :ユーザー | rootで実行 一部 umiで実行 |
| :クライアント | mars.528p.com |
| :OS | CentOS 5.1 |
| :作業 | /home/umi |
| :言語 | LANG=en_US.UTF-8 |
| :ユーザー | umiで実行 |
・メンテナンスの場合は一般ユーザから行います
chrootの設定
サーバ上で一般ユーザを登録します・仮定 一般ユーザ (umi) とします
・ . (ピリオド) 付きのファイルを削除します
・chmodの -d オプションで/home/umi/./ と指定します
[root@jupiter:~] # useradd umi # passwd umi New UNIX password:← パスワードを入力 Retype new UNIX password:← 再入力 # rm /home/umi/.bash* # usermod -d /home/umi/./ umi
必要なファイルのコピー・ユーザディレクトリ下に必要なファイルをコピーします
・ファイルが変更された場合、再コピーする必要があります
・コピーしたファイルはrootの所有権のまま使います
・スクリプトを使わせてもらいます
・紫色部分 オリジナルに追加変更した部分
:create_chroot_env (root root 700)
#!/bin/bash
# # Usage: ./create_chroot_env username #
# Here specify the apps you want into the enviroment
APPS="/bin/bash /bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm \
/usr/bin/id /usr/bin/rsync /bin/ping \
/bin/cp /bin/chmod /bin/cat /usr/local/libexec/sftp-server"
# Sanity check
if [ "$1" = "" ] ; then
echo " Usage: ./create_chroot_env username"
exit
fi
# Obtain username and HomeDir CHROOT_USERNAME=$1 HOMEDIR=`grep /etc/passwd -e "^$CHROOT_USERNAME" | cut -d':' -f 6` cd $HOMEDIR
# Create Directories no one will do it for you
mkdir etc
mkdir bin
mkdir dev
mkdir -p usr/bin
mkdir -p usr/local/{bin,libexec}
# 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
# 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
done
fi
done
# From some strange reason these 3 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/libnsl.so.1 /lib/libnss_files.so.2 ./lib/
# My original openssh'settings needs cp -L /lib/ld-linux.so.2 ./lib/ cp /etc/{ld.so.cache,ld.so.conf,localtime} ./etc/ cp -a /dev/{null,random,zero} ./dev/
スクリプトの実行・rootディレクトリにコピーして実行します
[root@jupiter:~]
# chmod -c 700 create_chroot_env
# ./create_chroot_env umi
必要なライブラリの検索・全ての必要なライブラリがコピーされないかもしれない
・lddコマンドで必要なライブラリを表示させ、コピーされているか確認する
・linux-gate.so.1はカーネルにスタティックコンパイルされたライブラリ
$ ldd /bin/bash
linux-gate.so.1 => (0x00653000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x07f04000)
libdl.so.2 => /lib/libdl.so.2 (0x009c9000)
libc.so.6 => /lib/libc.so.6 (0x00861000)
/lib/ld-linux.so.2 (0x0083f000)
公開鍵の作製とサーバへのコピー
ローカルホスト上でDSA認証鍵を作ります・ユーザのディレクトリに .sshディレクトリが作られます
・id_dsa (DSA秘密鍵) id_dsa.pub (DSA公開鍵) が収納されます
[umi@mars ~] $ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/umi/.ssh/id_dsa):← Enterキー Created directory '/home/umi/.ssh'. Enter passphrase (empty for no passphrase):← パスフレーズを入力 Enter same passphrase again:← 再入力 Your identification has been saved in /home/umi/.ssh/id_dsa. Your public key has been saved in /home/umi/.ssh/id_dsa.pub. The key fingerprint is: 32:d5:15:a2:7e:9a:ee:0d:3d:80:3f:38:83:5a:f7:a0 umi@mars.528p.com
サーバ上でid_dsa.pub (DSA公開鍵) を登録します・ローカルホストからサーバにid_dsa.pub (DSA公開鍵) を転送しておきます
・専用ディレクトリをつくります
・公開鍵を専用ファイルに書き加えます
・ディレクトリとファイルのパーミッションを変更します
[umi@jupiter:~]
$ mkdir .ssh
$ cat id_dsa.pub >> .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
ログインしてみます・yesと答えるのは初回接続のみです
・ローカル側にデータベースが作られます
・鍵作成のとき入力したパスフレーズを入力します
・上位のディレクトリに異動できるか確認します
[umi@mars ~] $ ssh umi@jupiter.528p.com The authenticity of host 'jupiter.528p.com (192.168.0.21)' can't be established. RSA key fingerprint is bb:b5:74:b8:f4:b2:79:ca:84:7b:96:a4:be:6e:ae:50. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'venus.528p.com,192.168.0.21' (RSA) to the list of known hosts. Enter passphrase for key '/home/umi/.ssh/id_dsa':← パスフレーズを入力 -bash-3.1 $ ls bin dev etc lib usr -bash-3.1 $ cd .. -bash-3.1 $ ls bin dev etc lib usr -bash-3.1 $ exit logout Connection to jupiter.528p.com closed. $
sftpでアクセスしてみます[umi@mars ~] $ sftp umi@jupiter.528p.com Connecting to jupiter.528p.com... Enter passphrase for key '/home/umi/.ssh/id_dsa':← パスフレーズを入力 sftp> ls bin dev etc lib usr sftp> cd .. sftp> ls bin dev etc lib usr sftp> exit $
![]() |
Copyright(c) 528p.com All Rights Reserved. |

