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でログインして行ってください。*
単純にダウンロードしたファイルを解凍し
|
しただけですので、そんなに難しくありません。
まずは、SSHログイン後にchrootを行いたいユーザとグループをOS上に作成します。
|
これでグループ「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が有効になります↓
|
管理者権限でのログインも禁止します↓
|
パスワード無しでのログインを規制します↓
|
簡単に設定しましたが、もっと細かい設定も可能です。
色んなパラメータがありますので、検索してみてくださいまし。
次にchrootを設定します。
おいらの場合は外部会社単位でユーザが何名かいたので、グループにまとめちゃいました。
sshd_configの最下部に↓の設定を施します。
設定例は上記で設定したグループ、ユーザ、ディレクトリを使用しています。
↓はグループの設定を行ったもの。
|
↓はユーザの設定をおこなったもの。
|
オプションの意味は下記の表を参考にしてください。
おいらが設定した際のオプションなのでもっと増えているかもしれませんのでご注意を。
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を開始、終了する場合は↓のコマンドを実行してください。
|
めんどくさいので起動シェルを探し登録した方がいいかもしれません。
また、ソースからRPMパッケージを作る方法もあり、この場合は起動シェルがインストールされますのでお勧めです。
おいらが、その方法を知らずにコンパイルしてしまっただけの事(笑)
|
これで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 価格:5,040円(税込、送料別) |
おいらはめんどくさくてやる気になれませんでしたヽ(´▽`)/
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント