« 今明かされる密室パソコンバラバラ解体事件の真相! | トップページ | SONYのReaderとSHARPのGALAPAGOS »

2010年12月 6日 (月)

OpenSSHのchroot機能を使ってみました。

こんばんわ。

たぬさんです。

今日は温かい一日でしたね。

なんか、この前までの寒さはどこに行っちゃったのでしょうか(==;

さて、今日はSSHのchroot設定を書いてみようかな。

会社で

「外部の制作会社にWEBサーバのディレクトリを開放したい。」

という要求があったので、

「セキュリティ的にもCMSを使ったほうがいいんじゃ?」

って話をしたところ・・・・・・・・・・

うち予算ないヨ( ̄▽ ̄)

「マジで∑(゚∇゚|||)」

昔からFTPでchroot機能があるから、その辺りの機能を使いたいって事らしい。

外部に開放するんだからそれなりのを考えたほうがいいんじゃ?とは思ったけど、無い袖は振れないわけで。

ということで、通信は暗号化されているSSHでchrootの設定をしてみた。

ちなみに「chroot機能」とは、ログインするユーザによってトップディレクトリを変更し、余計なディレクトリへの侵入を防ぐ機能の事。

SSHは・・・・・・・・予算が無いのでオープンソースのOpenSSHを利用します。

例え予算があっても、使い勝手の良いOpenSSHを利用しますけどね(^ー^;

OpenSSHのchroot機能はOpenSSH4.2.9以降使えるようになります。

ここで注意;゚∇゚)/

最近のLinuxディストリビューションはSSH通信にOpenSSHが利用されています。

ただし、信頼性のあるバージョンを採択しているため、OpenSSHの最新版が常にインストールされているわけではありません。

chroot機能を利用する場合はSSHのバージョン情報を必ず確認してください。

SSHのバージョンを確認するには下記のコマンドを実行してください。

# ssh -V

バージョンが古い場合はyumコマンドでバージョンアップするか、もしくは最新版をダウンロード&コンパイルして利用するか、どちらかを選択する必要があります。

yumのリポジトリサーバ(パッケージを管理するサーバ)に存在するOpenSSHも古い可能性があるので、最新版をダウンロードしてインストールしたほうが早いかもしれません。

日本語のOpenSSHサイトはこちらです。

おいらの場合は、yumコマンドがFirewallに阻まれていたので最新版をコンパイルしました。

*ここから下のコマンドは全てrootでログインして行ってください。*

単純にダウンロードしたファイルを解凍し

# ./configure 
# make
# make install

しただけですので、そんなに難しくありません。

まずは、SSHログイン後にchrootを行いたいユーザとグループをOS上に作成します。

# groupadd test-group
# useradd -g test-group test-user
# mkdir /chroot-test
# chown test-user:test-group /chroot-test

これでグループ「test-group」とユーザ「test-user」が作成され、chroot機能を利用した際のルートディレクトリになる「chroot-test」を作成しました。

また、[chroot-test]ディレクトリに対して「test-group」「test-user」の権限を付与しました。

OpenSSHは./configureにオプションをつけないでコンパイルすると設定ファイルが/usr/local/etc/sshd_configに作られます。

この/usr/local/etc/sshd_configを編集します。

まず、SSHでファイルを転送する場合は↓の場所の設定を変更してください。

これでSFTPが有効になります↓

#Subsystem    sftp    /usr/local/libexec/sftp-server ←コメントアウト
Subsystem    sftp    internal-sftp

管理者権限でのログインも禁止します↓

#PermitRootLogin yes ←コメントアウト
PermitRootLogin no

パスワード無しでのログインを規制します↓

#PermitEmptyPasswords no ← コメントアウトを外す
PermitEmptyPasswords no

簡単に設定しましたが、もっと細かい設定も可能です。

色んなパラメータがありますので、検索してみてくださいまし。

次にchrootを設定します。

おいらの場合は外部会社単位でユーザが何名かいたので、グループにまとめちゃいました。

sshd_configの最下部に↓の設定を施します。

設定例は上記で設定したグループ、ユーザ、ディレクトリを使用しています。

↓はグループの設定を行ったもの。

Match Group test-group
AllowTcpForwarding no
Banner /chroot-test/sshbanner.txt
GatewayPorts no
KbdInteractiveAuthentication no
PasswordAuthentication yes
PermitRootLogin no
RhostsRSAAuthentication no
RSAAuthentication yes
X11Forwarding no
X11UseLocalHost no
ChrootDirectory        /chroot-test

↓はユーザの設定をおこなったもの。

Match User test-user   ←この「User」部分を変更しただけ。
AllowTcpForwarding no
Banner /chroot-test/sshbanner.txt
GatewayPorts no
KbdInteractiveAuthentication no
PasswordAuthentication yes
PermitRootLogin no
RhostsRSAAuthentication no
RSAAuthentication yes
X11Forwarding no
X11UseLocalHost no
ChrootDirectory        /chroot-test

オプションの意味は下記の表を参考にしてください。

おいらが設定した際のオプションなのでもっと増えているかもしれませんのでご注意を。

AllowTcpForwarding ポートフォワーディングを行うかどうか yes/no
Banner SSHユーザーへのメッセージ表示 [ファイル名]
ForceCommand ログイン時に強制的に実行するプログラム(コマンド)
GatewayPorts ポート中継を許可するかどうか
KbdInteractiveAuthentication キーボードインタラクション認証を使用するかどうか
PasswordAuthentication パスワード認証を行うかどうか
PermitOpen 許可する転送ポートを指定
PermitRootLogin rootでの転送を許可するかどうか。
RhostsRSAAuthentication RSA ホスト間認証が成功しているとき、rhosts や /etc/hosts.equivを使った認証をおこなってよいかどうか
RSAAuthentication RSA 認証を許可するかどうか
X11DisplayOffset X11 転送をするときに最初に使われるディスプレイ番号を指定
X11Forwarding X11 転送を許可するかどうか
X11UseLocalHost X11でlocalhostのみを許可

これでSSHDをリスタートすれば、設定が反映されるはずです。

コンパイル後にsshdを開始、終了する場合は↓のコマンドを実行してください。

開始↓
#/usr/local/sbin/sshd -f /usr/local/etc/sshd_config
停止↓
# ps -aux | grep -i sshd ← SSHDのプロセス番号の調査
# kill -9 15342 ← SSHDのプロセス番号

めんどくさいので起動シェルを探し登録した方がいいかもしれません。

また、ソースからRPMパッケージを作る方法もあり、この場合は起動シェルがインストールされますのでお勧めです。

おいらが、その方法を知らずにコンパイルしてしまっただけの事(笑)

# cp openssh-5.6p1.tar.gz /usr/src/redhat/SOURCES
# cd /usr/src/redhat/SOURCES
# tar zxf openssh-5.6p1.tar.gz
# rpmbuild -bb openssh-5.6p1/contrib/redhat/openssh.spec

これでRPMが作れますので簡単にインストール&起動シェルも作れます。

おいらは・・・・・・・・・そっとしておいてあげてください;゚∇゚)/

これで、WinSCP等のSFTPクライアントで利用する際の設定は完了です。

ターミナルでSSH接続する場合は、もっと設定が必要になります。

ログインするためのシェル(.bash_profileや.bashrc等)が必要になります。

また、あらかじめchrootの配下に必要なコマンドを用意する必要もあります。

さて、chrootの設定は完了したわけですが・・・・・・

1点だけ注意が必要です!!

chrootに設定したディレクトリ、例えば「/chroot-test」ディレクトリは

root権限でパーミッションが755

でなければなりません。

これは必須です!!

なので、一般ユーザである「test-user」は「/chroot-test」配下にディレクトリを作成できません!!

あらかじめ、chrootに設定したディレクトリ「/chroot-test」配下に「test-user」が操作出来るディレクトリを一つ作っておく必要があります。

今回の例で言えば、「/chroot-test」が「test-user」にとっての「/」ディレクトリと同じ意味を持ちますので、このような自体が発生するのです。

この事から、サーバのコマンドを利用してのファイル操作は、「/chroot-test」ディレクトリ配下に存在するコマンドしか受け付けません。

前述のように

「あらかじめchrootの配下に必要なコマンドを用意する必要」

があるわけです。

この注意だけは必ず頭に入れて、ディレクトリ仕様を考えてくださいね♪

ということで、簡単にSSHDのchroot機能を設定してみましたが

もっと追求したい方は

他のサイトを検索してみてくださいね♪

もしくは↓の本をよんでみるとか。

実用SSH

実用SSH

価格:5,040円(税込、送料別)

おいらはめんどくさくてやる気になれませんでしたヽ(´▽`)/

|
|

« 今明かされる密室パソコンバラバラ解体事件の真相! | トップページ | SONYのReaderとSHARPのGALAPAGOS »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/166130/47491859

この記事へのトラックバック一覧です: OpenSSHのchroot機能を使ってみました。:

« 今明かされる密室パソコンバラバラ解体事件の真相! | トップページ | SONYのReaderとSHARPのGALAPAGOS »