![]() |
LINUX |
OpenSSH (chroot+sshlogin) の設定
・chroot環境でsshログイン、scp、sftp接続を行います
・openssh-5.8p1の"ChrootDirectory"を使います
・専用の秘密鍵・公開鍵を使用します
・間違ってもrootの秘密鍵を渡さないこと
・公開サーバで使う場合は、ローカル環境で十分実証して下さい
・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・Enterキーを省略します
・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます
参照ファイル:パッケージの追加
:最初の設定 (Xen)
:OpenSSHのインストール
:OpenSSH (chroot+sftponly) の設定
仮設定| :サーバ | jupiter.528p.com |
| :OS | CentOS 5.6 |
| :openssh | 5.8p1 |
| :selinx | disabled or permissive |
| :作業 | /root 一部 /home/umi |
| :言語 | LANG=en_US.UTF-8 |
| :ユーザー | rootで実行 一部 umiで実行 |
| :クライアント | mars.528p.com |
| :OS | CentOS 5.6 |
| :作業 | /home/umi |
| :言語 | LANG=en_US.UTF-8 |
| :ユーザー | umiで実行 |
・メンテナンスの場合は一般ユーザから行います
chrootの設定
chroot専用ユーザ・グループの設定・仮定 一般ユーザ (umi) とします
・useraddに -M オプションをつけるとホームディレクトリを作成しません
・sshログインには/bin/bashをログインSHELLに設定する必要があります
・パスワードを設定しないと公開鍵認証でもエラーになります
・groupIDは/etc/groupファイルを参照して未使用の番号を使用します
[root@jupiter:~] # useradd -M -s /bin/bash umi # passwd umi New UNIX password:← パスワードを入力 Retype new UNIX password:← 再入力 # groupadd -g 103 torikago # gpasswd -a umi torikago
ディレクトリの作成・必要なファイルのコピー・スクリプトを作成して管理者権限で実行します
・ディレクトリ名等は、自分の環境に合わせてください
・必要なコマンドはAPPSの行に追加して下さい
・root権限でユーザのホームディレクトリ (chrootディレクトリ) を作ります
・chrootディレクトリの所有者はrootでなければなりません
・同時にユーザの書き込み可能なディレクトリ (例 data) をつくります
・パーミッションに注意、chrootされないwheelグループのアクセスが可能
・chrootディレクトリ内に必要なファイルをコピーします
・ファイルが変更された場合、再コピーする必要があります
・コピーしたファイルはrootの所有権のまま使います
・ライブラリのコピーの部分でmkdirに-pオプションを付けます
・紫色部分 opensshの状態によって変わります
・このchroot環境では日本語編集はできません
:create_chroot_env5 (root root 700)
#!/bin/bash
# # Usage: ./create_chroot_env5 username #
# Here specify the apps you want into the enviroment APPS="/bin/bash /bin/cat /bin/cp /bin/chmod /bin/ls \ /bin/mkdir /bin/mv /bin/touch /bin/pwd /bin/rm /bin/vi \ /usr/bin/id /usr/local/bin/scp /usr/local/bin/sftp \ /usr/local/libexec/sftp-server"
# Sanity check
if [ "$1" = "" ] ; then
echo " Usage: ./create_chroot_env5 username"
exit
fi
# Obtain username and HomeDir CHROOT_USERNAME=$1 HOMEDIR=`grep /etc/passwd -e "^$CHROOT_USERNAME" | cut -d':' -f 6` mkdir $HOMEDIR chown root:root $HOMEDIR cd $HOMEDIR
# Create writeable Directories only for you
mkdir {data,public_html}
chown $1:$1 {data,public_html}
chmod 711 {data,public_html}
# Create Directories no one will do it for you
mkdir {etc,bin,dev}
mkdir -p usr/bin
mkdir -p usr/local/{bin,libexec}
MAKEDEV -d dev -x null random 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
# Add some users to ./etc/passwd 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,libnsl.so.1,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/
・openssh-4.7(chroot)で使用したcreate_chroot_envを修正したものです
スクリプトの実行・rootディレクトリにコピーして実行します
[root@jupiter:~]
# chmod -c 700 create_chroot_env5
# ./create_chroot_env5 umi
必要なライブラリの検索・全ての必要なライブラリがコピーされないかもしれない
・lddコマンドで必要なライブラリを表示させ、コピーされているか確認する
・linux-gate.so.1 (システム・コールを処理する特殊な共有オブジェクト)
・/lib/i686/nosegneg/* (Xenで使うtlsを無効にして作られたライブラリ)
・ld-linux.so.2 (静的にコンパイルされた動的リンカ)
$ ldd /bin/bash
linux-gate.so.1 => (0xb7ff0000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x4ac86000)
libdl.so.2 => /lib/libdl.so.2 (0x4ac7f000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x4ab21000)
/lib/ld-linux.so.2 (0x4ab02000)
ファイル及びディレクトリのユーザ・グループ・パーミッションの設定| home/umi/ | 755 | root:root | |||
| .ssh/ | 700 | umi:umi | |||
| authorized_keys | 600 | umi:umi | |||
| bin/ | 755 | root:root | |||
| dev/ | 755 | root:root | |||
| etc/ | 755 | root:root | |||
| lib/ | 755 | root:root | |||
| i686/nosegneg/ | 755 | root:root | |||
| usr/ | 755 | root:root | |||
| bin/ | 755 | root:root | |||
| lib/ | 755 | root:root | |||
| local/ | 755 | root:root | |||
| bin/ | 755 | root:root | |||
| lib/ | 755 | root:root | |||
| libexec | 755 | root:root | |||
| data/ | 711 | umi:umi | |||
| openssh-5.8p1.tar.gz | 644 | umi:umi | |||
| public_html/ | 711 | umi:umi | |||
| test.html | 644 | umi:umi | |||
configファイルの修正・デフォルトから変更した部分を記述しています
・Matchは最終行に追加します、torikagoグループのみChrootさせます
・sftp接続には、Subsystemとしてsftp-serverを使用できます
・紫色部分 パスワード認証を許可する場合 (rootは公開鍵認証)
:/etc/ssh/sshd_config
Port 22 AddressFamily inet ListenAddress 0.0.0.0 AllowGroups wheel torikago
SyslogFacility AUTHPRIV
LogLevel VERBOSE
PermitRootLogin without-password
RSAAuthentication no
PubkeyAuthentication yes
IgnoreUserKnownHosts yes
PasswordAuthentication no
ChallengeResponseAuthentication no
X11UseLocalhost no
PrintMotd no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,arcfour
Subsystem sftp /usr/local/libexec/sftp-server
Match Group torikago
PasswordAuthentication yes
AllowAgentForwarding no
AllowTcpForwarding no
ChrootDirectory /home/%u
sshdの再起動
[root@jupiter:~]
# service sshd restart
公開鍵の作製とサーバへのコピー
ローカルホスト上で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公開鍵)を転送しておきます
・専用ディレクトリをつくり、公開鍵を専用ファイルに書き加えます
・ディレクトリとファイルのパーミッション・オーナーを変更します
# cd /home/umi
[root@jupiter:/home/umi]
# mkdir .ssh
# cat id_dsa.pub >> .ssh/authorized_keys
# chmod 700 .ssh
# chmod 600 .ssh/authorized_keys
# chown -R umi:umi .ssh
selinuxヘの対応 (selinuxが有効の場合):新規ファイルのselinuxラベルを修正
# cd ~
[root@jupiter:~]
# restorecon -Rv /etc
# restorecon -RFv /home/umi
scpによる接続・送信先に書込可能なディレクトリを指定します (紫色部分)
[umi@mars:~] $ scp test.html umi@jupiter.528p.com:public_html test.html 100% 228 0.2KB/s 00:00
sftpによる接続
[umi@mars:~]
$ sftp umi@jupiter.528p.com
Connecting to jupiter.528p.com...
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> pwd
Remote working directory: /
sftp> cd /home/sola
Couldn't canonicalise: No such file or directory
sftp> cd data
sftp> pwd
Remote working directory: /data
sftp> put openssh-5.8p1.tar.gz
Uploading openssh-5.8p1.tar.gz to /data/openssh-5.8p1.tar.gz
openssh-5.8p1.tar.gz 100% 1087KB 1.1MB/s 00:01
sftp> ls
openssh-5.8p1.tar.gz
sftp> exit
$
・wheelグループのユーザでsftp接続
[sola@mars:~]
$ sftp sola@jupiter.528p.com
Connecting to jupiter.528p.com...
sftp> cd /home/umi/data
sftp> pwd
Remote working directory: /home/umi/data
sftp> ls
remote readdir("/home/umi/data/"): Permission denied
sftp> exit
$
![]() |
Copyright(c) 528p.com All Rights Reserved. |

