晩酌しながらサーバ管理。 こんな「てきとー管理者」にサーバ預けて、大丈夫?
Search
Powered by
Movable Type 4.23-ja
■■■■■免 責■■■■■
このサイトを参考にしたために発生した一切の損害に「てきとー管理者」は一切関知しませんし、補償もしません。 また、本サイトの記述が正しいことも保証しません。
自己責任にてお願いします。
-------------------------
京都の鍵トラブルなら鍵レスキュー 鍵師が、家・金庫・バイク・車等の解錠を始め鍵に関する全般、また防犯設備士からみた防犯診断の上の工事等、安心しておまかせ下さい。24時間対応致します。
最近SSHを許可していないサーバが多いような気がする。
特に共有サーバの場合、他のディレクトリ(他のユーザー領域)が見えてしまう為である。
共有サーバの場合、数十から数百のユーザーが同居するため、情報漏えいになりうるDataがあるからだ。
しかし、シェルが使えないのは結構痛い。
FTPでFile転送して、FTPクライアントでパーミッション設定変更。 非常に面倒。
Telnet同様、暗号化されていないので通信の中身が丸裸!
最悪の状態かも!
って事で、思い腰を上げてSSHのchrootを試すことにした。
ググって見るとココが非常に解りやすかった。
参考にさせてもらった。
今回のインストール環境は次の通り。
■OS:CentOS5
■インストール環境:ネットワーク越しでchrootの環境を構築
先ず、既存のSSHをアンインストールを行う必要があるが、いきなりアンインストールするわけには行かない。
一時的にTelnetをインストールして、chroot対応のSSHを組み込んだ後、Telnetをアンインストールを行う。
既存のシステムでは、yumが使えるので、Telnetがインストールされていない場合はインストールを行う。
先ずは、Telnetの有無確認
# rpm -qa|egrep telnet
該当するパッケージが無いため、インストールを行う
# yum install telnet-server
インストールされたら、Telnet接続が出来るよう環境を整える
※設定内容は割愛
その次に、Telnetにて接続する為のUSERを作成する。 ← 既にUSERを作成している場合は必要ない。
# groupadd user1
# mkdir /home/user1
# useradd user1 -g user1 -d /home/user1
# passwd user1
password を2回打ち込む
# chown -Rf user1:user1 /home/user1
この状態で、Telnet接続できるかを確認。
接続確認が出来たら、現在接続しているSSHセッションを切る。
んで、改めてTelnetにて接続。
# su - root
rootのパスワードを打ち込んで・・・・
ココまできたら、ようやくSSHをアンインストール
先ずは、SSHを停止
# /etc/rc.d/init.d/sshd stop
============================
Stopping sshd: [ OK ]
============================
Opensshを削除
# rpm -e openssh-server
warning: /etc/ssh/sshd_config saved as /etc/ssh/sshd_config.rpmsave
# rpm -e openssh-clients
warning: /etc/ssh/ssh_config saved as /etc/ssh/ssh_config.rpmsave
その他、SSH関連のRPMがインストールされていれば、アンインストールを行っておく。
さて、いよいよchroot対応のSSHの作成を行うが、rpmでは提供されていないようなので、tar玉を用意する。
Get先はここ等辺りから・・・ http://chrootssh.sourceforge.net/download/
今回、利用したバージョンは「openssh-4.5p1」
CentOS5のバージョンより新しい。
では、早速作業してみよう。
# cd /tmp ← 作業しやすいところで構わない。
# wget http://chrootssh.sourceforge.net/download/openssh-4.5p1- chroot.tar.bz2
# tar jxvf openssh-4.5p1- chroot.tar.bz2
パッケージの再作成
# cd openssh-4.5p1-chroot
# vi openssh-4.5p1-chroot/contrib/redhat/openssh.spec
一部修正を行う
-----------------------------------------------------------------------------
%define no_x11_askpass 0
↓
%define no_x11_askpass 1 ← x11_askpassの無効化
%define no_gnome_askpass 0
↓
%define no_gnome_askpass 1 ← gnome_askpassの無効化
-----------------------------------------------------------------------------
不要ディレクトリ削除
# 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/
RPMパッケージ作成
rpmbuild -tb --clean openssh-4.5p1.tar.gz
※環境によってはパッケージ足らない場合があるかも?
また、サーバのスペックによりパッケージ作成に掛かる時間は区々・・・。
作成したRPMをインストール
# cd /usr/src/redhat/RPMS/i386
# ls -l
openssh-4.5p1-1.i386.rpm
openssh-server-4.5p1-1.i386.rpm
openssh-clients-4.5p1-1.i386.rpm
一気にインストール
# rpm -Uvh openssh-4.5p1-1.i386.rpm openssh-server-4.5p1-1.i386.rpm openssh-clients-4.5p1-1.i386.rpm
無事インストールできたら、ディレクトリ削除
# rm -Rf openssh-4.5p1
ついでにtar玉も削除
# rm -f openssh-4.5p1.tar.gz
元tar玉も一応削除
# rm -f openssh-4.5p1-chroot.tar.bz2
yumによるupdateからsshを除外しておく。
# vi /etc/yum.conf
exclude=openssh* ← こんな感じで追加
ココまできたら、あともう少し!
ココ状態で起動すると、えらーが出るらしい。
「Starting sshd:WARNING: initlog is deprecated and will be removed in a future release」
起動スクリプトを一部変更することで回避できるらしい。
# vi /etc/rc.d/init.d/sshd
-----------------------------------------------------------------------------
start()
{
# Create keys if necessary
do_rsa1_keygen
do_rsa_keygen
do_dsa_keygen
echo -n $"Starting $prog:"
#initlog -c "$SSHD $OPTIONS" && success || failure ← #を追加してコメントアウト
$SSHD $OPTIONS && success || failure ← ここに追加する。
RETVAL=$?
[ "$RETVAL" = 0 ] && touch /var/lock/subsys/sshd
echo
}
-----------------------------------------------------------------------------
SSHを起動する前にキーの生成を行う
# ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N "" ← Hostkey(RSA1)再作成です
・
・
Overwrite (y/n)? y ← y
・
・
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" ← Hostkey(RSA2)再作成です
です
・
・
Overwrite (y/n)? y ← ここも y
・
・
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N "" ← Hostkey(DSA)再作成です
・
・
Overwrite (y/n)? y ← これも y
・
・
ようやくSSH起動
/etc/rc.d/init.d/sshd start
サーバの再起動を行っても自動起動するようにお呪い・・・
# chkconfig sshd on
さて肝心のconfig設定。
# vi /etc/ssh/sshd_config
-----------------------------------------------------------------------------
#Protocol 2,1
↓
Protocol 2 ← SSH2でのみ接続を許可
#SyslogFacility AUTH
↓
SyslogFacility AUTHPRIV ← ログの格納場所? /var/log/secureでいいとも!!
#PermitRootLogin yes
↓
PermitRootLogin no ← もちろんrootでのログインは禁止でしょ!
#PermitEmptyPasswords no
↓
PermitEmptyPasswords no ← 当たり前のようにパスワードなしはログインを禁止
-----------------------------------------------------------------------------
設定が終わったら、SSHの再起動
# /etc/rc.d/init.d/sshd restart
この状態でSSHにてログインできるかを確認する。
問題なくログインできたら、あともう少し。
簡単にchrootユーザーが作れるようにスクリプトを作成する。
作成する場所はどこでも構わないが、rootディレクトリ辺りに作成しておけば問題ないかな?
# mkdir -p ~/bin
# vi ~/bin/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
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 -p etc
mkdir -p bin
mkdir -p usr/bin
mkdir -p usr/local/bin
mkdir -p usr/libexec/openssh
mkdir -p public_html ← ホームページ領域の作成を追加
chown $CHROOT_USERNAME /home/$CHROOT_USERNAME/public_html ← オーナー設定
chgrp $CHROOT_USERNAME /home/$CHROOT_USERNAME/public_html ← グループ設定
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
-----------------------------------------------------------------------------
出来たスクリプトに実行件を与える
# chmod 755 ~/bin/chroot-useradd
これで、完璧にいけるはず。
念のためUSERを作成してログイン確認
また、chrootがきちんと設定されているかを確認。
ログイン後次のコマンドで確認できるはず。
$ pwd
/
↑
「/」となっていれば、成功です。
また、rootになれないことも確認
$ su - root
-bash: su: command not found
OKですね。
では、不要になったTelnetを削除して、ポートも閉める。
これで、安心してUSERにシェルを渡すことが出来る・・・・・・ と思う~~