Upload
yh
View
1.910
Download
6
Embed Size (px)
DESCRIPTION
vsftpd & OpenSSHのchroot環境構築
Citation preview
chroot environment construction of
vsftpd & OpenSSH
vsftpd + OpenSSHの chroot環境構築
Version 0.2
Copyright © 2009 LA TIGRE.
iii
保証免責 本書は記載事項またはそれに関わる事項について、明示的あるいは暗黙的な保証はいたしておりません。
したがいまして、これらを原因として発生した損失や損害についての責任を負いません。
著作権 本書および本書に記載されておりますソフトウェア等は、著作権により保護されております。
また非商用以外に本書を、複製、再頒布することをかたく禁止いたします。
v
表記について
本書では以下の書体を使用しています。
イタリック文字
本文中でのコマンド、ファイル名、変数など可変なパラメータ値を表します。
等幅文字
ファイルの内容やコマンドの入出力例に使います。入力の場合にはボールドで表します。
$ cd /usr/src/sys/i386/conf
$ ls
GENERIC Makefile OLDCARD SMP
GENERIC.hints NOTES PAE gethints.awk
$
省略文字
ファイルの内容やコマンドの入出力例を省略する場合に'...'を使います。
$ vi /etc/rc.conf
...
sshd_enable="YES"
named_enable="YES"
...
$
プロンプト
一般または、管理権限を持った実行環境をそれぞれ、'$'(ドル)、'#'(シャープ)のプロンプトで
表します。
$ su
Password: root's passwd
#
vii
目次
1. 概要 .............................................................................................................................. 1
1.1. はじめに ................................................................................................................ 1
1.2. 各種構成 ............................................................................................................... 1
1.3. ユーザのホームディレクトリ ..................................................................................... 1
2. vsftpd導入・設定 .......................................................................................................... 2
2.1. vsftpdのインストール ............................................................................................. 2
2.2. FTP、SSHの通信許可 .......................................................................................... 2
2.3. vsftpdの設定 ........................................................................................................ 3
3. OpenSSH導入・設定 ................................................................................................... 6
3.1. OpenSSHのインストール ...................................................................................... 6
3.2. OpenSSHの設定 ................................................................................................. 7
3.3. chroot環境のホームディレクトリについて ................................................................ 8
3.4. テンプレートの作成 ................................................................................................ 9
4. PAMによるアクセス制御 .............................................................................................. 12
4.1. PAMについて ..................................................................................................... 12
4.2. PAM設定ファイルの配置 ..................................................................................... 12
4.3. PAM設定ファイルの配置 ..................................................................................... 13
4.4. PAMの補足説明 ................................................................................................. 14
Chroot environment construction of vsftpd & OpenSSH
Copyright© 2008 LA TIGRE. 1
1. 概要
1.1. はじめに
本書は FTP、OpenSSHのサービスを chroot環境下で共存させる方法について纏めたもので
す。サービス基盤として下記のサービスを提供します。
ファイル交換サービス
実装として FTP、および OpenSSH(scp, sftp, ssh)のデーモンを構築します。
アクセス制御
PAM(Pluggable Authentication Module)を利用して柔軟にリモートアクセスの制御を行
います。また、chroot 環境を導入することによりファイルシステムへのアクセス制限も行い
ます。
アカウント管理
上述したサービス2点のchroot環境を構築するため、変則的なアカウント作成を実施する
必要があります。本書はアカウント管理の方法についても言及しています。
1.2. 各種構成
構成内容については HA cluster construction memo(DRBD & Heartbeat)の 1章をご参照く
ださい。サーバ基盤として HA構成(2台)で構築しています。
各サーバには下表のソフトウェアが導入されます。
ソフトウェア名 バージョン 用途
OpenSSH 5.2p1 セキュアなファイル転送、コピーを行う。
vsftpd 2.0.5 FTPデーモン
1.3. ユーザのホームディレクトリ
アクセス方式により各ユーザのホームディレクトリは下表になります。/das ディレクトリは DRBD
パーティションです。
アクセス方式 ホームディレクトリ
FTP /das/chrooted/home_username/username
OpenSSH /das/chrooted/home_username
例えば、 foo ユーザのアカウントを作成する際、FTP 方式でのホームディレクトリは
/das/chrooted/home_foo/foo と な り 、 OpenSSH 方 式 で の ホ ー ム デ ィ レ ク ト リ は
/das/chrooted/home_foo となります。
vsftpd & OpenSSH の chroot環境構築
Copyright© 2008 LA TIGRE. 2
2. vsftpd導入・設定
2.1. vsftpdのインストール
既にRHEL5では標準インストールされています。下記のようにサービスとして自動起動するよう
に設定します。vsftpdは chroot環境を完全にサポートしており、すぐに利用可能です。
# chkconfig --add vsftpd
2.2. FTP、SSHの通信許可
本書ではPAMによるユーザ名と接続元 IPの組合せによるアクセス制御をサーバで実施します。
下記の通信許可を設定しておいてください。
基本的に上流、サーバのファイアウォールでは FTP、SSH のポートを不特定に開放しておきま
す。
① 上流ファイアウォールの許可
SRCIP SPORT DSTIP DPORT PROTO ACT
ANY ANY 10.0.13.10 ftp
ftp-data
10021-10120
ssh
http
https
smtp
TCP DNAT(送信先 NAT+ポート転送)
※10021~10120は FTPパッシブモード対応
src address ftp-data 10.0.13.10 ANY TCP DNAT(送信先 NAT+ポート転送)
※FTPアクティブモード対応
② サーバ上 iptablesの許可 # cat /etc/sysconfig/iptables
...
-A RH-Firewall-1-INPUT -p tcp -s src address/32 --sport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10021:10120 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
...
#
③ サーバ上 TCP Wrappersの許可
# cat /etc/hosts.allow
...
vsftpd: ALL
sshd: ALL
...
#
Chroot environment construction of vsftpd & OpenSSH
Copyright© 2008 LA TIGRE. 3
2.3. vsftpdの設定
① vsftpd.confの具体的な設定内容は下記のとおりです。
設定に関する詳細な情報はVSFTPD.CONF(5)のマニュアルページを参照してください。
# cd /etc/vsftpd
# sed -e '/^$/d' -e '/^#/d' vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=000
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
vsftpd_log_file=/var/log/vsftpd.log
dual_log_enable=YES
xferlog_std_format=NO
ftpd_banner=Welcome to FTP service.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=YES
pasv_enable=YES
pasv_min_port=10021
pasv_max_port=10120
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/vsftpd.user_list
tcp_wrappers=YES
force_dot_files=NO
use_localtime=YES
log_ftp_protocol=YES
text_userdb_names=YES
ssl_enable=YES
ssl_tlsv1=YES
force_local_logins_ssl=NO
force_local_data_ssl=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
#
パラメータ 説明
anonymous_enable 匿名 FTP ログインの許可制御を行う。
YESの場合、ftp、または anonymous をログインアカウントとして使用可能。
local_enable ローカルユーザログインの許可制御を行う。
YESの場合、/etc/passwdにある一般ユーザをログインアカウントとして使用可能。
write_enable ファイルシステムの変更を伴う FTP コマンド実行の許可制御を行う。
対象コマンドは STOP、DELE、RNFR、RNTO、MKD、RMD、APPE、SITE である。
local_umask ローカルユーザが生成する umask値。
8進数で指定する場合、先頭に 0(ゼロ)を忘れないこと。0がないと 10進数として扱われる。
dirmessage_enable ディレクトリ毎にメッセージファイル(デフォルトは.message)を置いておくと、ディレクトリ一覧を表
示する際に、メッセージファイルの内容も併せて出力する。
メッセージファイル名は、message_fileパラメータで変更可能。
xferlog_enable YES の場合、アップロード/ダウンロードの詳細情報が xferlog_file パラメータで設定されたファ
イル名にロギングされる。
xferlog_file XFERLOG(5)のファイル名。
xferlog_std_format YESの場合 wu-ftpd ログ書式で、NOの場合 XFERLOG(5)ログ書式でロギングされる。
vsftpd_log_file vsftpd独自のログ書式でロギングされるファイル名。
dual_log_enable YESの場合、XFERLOG(5)ログと vsftpd ログを同時にロギングする。
connect_from_port_20 YES の場合、アクティブモードでのサーバ側送信ポートを 20(ftp-data)に束縛するよう制御す
る。
vsftpd & OpenSSH の chroot環境構築
Copyright© 2008 LA TIGRE. 4
パラメータ 説明
ftpd_banner FTP接続時に vsftpdが表示するウェルカムメッセージを指定する。
chroot_local_user YESの場合、ローカルユーザはホームディレクトリへ CHROOT(2)される。
chroot_list_enable YES の場合、ローカルユーザのホームディレクトリへ CHROOT(2)されるユーザ一覧を参照す
る。
chroot_list_file ローカルユーザ一覧のファイル名。
このファイルの内容は chroot_local_user、chroot_list_enable パラメータの真偽で評価が異な
ることに注意。
chroot_local_user=NO
chroot_list_enable=NO
chroot_local_user=NO
chroot_list_enable=YES
chroot_local_user=YES
chroot_list_enable=NO
chroot_local_user=YES
chroot_list_enable=YES
ログイン後、ホームディレクト
リへ移動するがユーザ権限
に基づき上位ディレクトリへ
移動可能。
chroot_list_fileに記載のあ
るユーザは CHROOT(2)さ
れる。
ログイン後、/ディレクトリへ
移動し、ユーザ権限に基
づき上位ディレクトリへ移
動可能。
chroot_list_file に記載のある
ユーザは CHROOT(2)されな
い。
ls_recurse_enable YESの場合、ls –Rの使用を許可する。
listen YESの場合、vsftpdはスタンドアローンで動作する。
pasv_enable YESの場合、パッシブモードを許可する。
pasv_min_port パッシブモード時に ftp-data用に予約するハイポート番号の最小値。
ファイアウォールでの ftp-dataハイポート範囲を指定するのに役立つ。
pasv_max_port パッシブモード時に ftp-data用に予約するハイポート番号の最大値。
ファイアウォールでの ftp-dataハイポート範囲を指定するのに役立つ。
pasv_address PASV コマンドの応答で返す IPアドレス。
本書ではこのパラメータは指定しない。上流ファイアウォールで送信元 10.0.13.2/32、
10.0.13.3/32の場合に、特定のグローバル IPアドレスに NAPT(IP masquerade)される。
pam_service_name PAMサービス名を指定する。
userlist_enable YESの場合、ログイン可能なユーザ一覧を参照する。
userlist_deny userlist_fileの項を参照。
userlist_file ローカルユーザ一覧のファイル名。
このファイルの内容は userlist_enable、userlist_deny パラメータの真偽で評価が異なることに
注意。
userlist_enable=NO
userlist_deny=
userlist_enable=YES
userlist_deny=NO
userlist_enable=YES
userlist_deny=YES
userlist_file を使用した制御は行われ
ず、ローカルユーザはログイン可能。
userlist_file を使用した制御が行わ
れ、userlist_fileに記載のあるローカル
ユーザはログイン可能。
userlist_file を使用した制御が行われ、
userlist_file に記載のあるローカルユー
ザはログイン不可。
tcp_wrappers YESの場合、TCP Wrappersによるアクセス制御が可能となる。
force_dot_files NO の場合、ls –a を明示的に使用しない限り、.(ドット)で始まるファイル/ディレクトリ名を表示し
ない。
use_localtime YESの場合、ディレクトリ一覧表示にローカル(JST)のタイムゾーンを使用する。
log_ftp_protocol YESの場合、FTP コマンド全ての要求/応答を記録する。
text_userdb_names YESの場合、ディレクトリ一覧表示の際、ユーザ/グループを名前で表示する。
ssl_enable YESの場合、FTP over SSLを有効にする。
ssl_tlsv1 ssl_enbale=YESの場合、TLS v1プロトコルをによる接続を許可する。
force_local_logins_ssl ssl_enbale=YESの場合、ローカルユーザに対して SSL接続によるログインを強制する。
force_local_data_ssl ssl_enbale=YESの場合、ローカルユーザに対してSSL接続によるデータ送受信を強制する。
rsa_cert_file SSL接続時に使用する RSA証明書ファイルを指定する。
② vsftpd.user_listには FTP接続を許可するローカルユーザ名を記述します。
# cat /etc/vsftpd/vsftpd.user_list
admin
www_admin
...
Chroot environment construction of vsftpd & OpenSSH
Copyright© 2008 LA TIGRE. 5
③ chroot_listには CHROOT(2)させないローカルユーザ名を記述します。
# cat /etc/vsftpd/vsftpd.user_list
admin
www_admin
...
④ vsftpd.pemは以下のようにして作成します。
国名等は適当(下記は改行のみ)に入力しますが、RSA 秘密鍵と自己署名したサーバ証
明書を 1つのファイルに作成します。 # cd /etc/vsftpd
# openssl req -newkey rsa:1024 -x509 -nodes -keyout vsftpd.pem -out vsftpd.pem
Generating a 1024 bit RSA private key
.....++++++
........++++++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:
State or Province Name (full name) [Berkshire]:
Locality Name (eg, city) [Newbury]:
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
#
vsftpd & OpenSSH の chroot環境構築
Copyright© 2008 LA TIGRE. 6
3. OpenSSH導入・設定
3.1. OpenSSHのインストール
既に RHEL5ではバージョン 4.3.p2が標準インストールされていますが、CHROOTをサポート
していません。バージョン4.9よりCHROOTが標準サポートされるようになりましたので、最新版
のソースをダウンロードし、再インストールします。
① (もし無ければ)rpm-buildユーティリティをインストールします。
OpenSSH のソースコードには spec ファイルが含まれています。ソースから rpm パッケー
ジを生成するため、このユーティリティを先にインストールしてください。
# yum install rpm-build
② 2009年 4月時点で最新のソースコードをダウンロードします。 # cd /usr/local/src
# wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-5.2p1.tar.gz
③ SPEC ファイルを抽出し、所定のディレクトリへコピーします。 # cd /usr/local/src
# tar zxvf openssh-5.2p1.tar.gz openssh-5.2p1/contrib/redhat/openssh.spec
openssh-5.2p1/contrib/redhat/openssh.spec
# cp openssh-5.2p1/contrib/redhat/openssh.spec /usr/src/redhat/SPECS
④ ソースコードを所定のディレクトリへコピーします。
# cd /usr/local/src
# cp openssh-5.2p1.tar.gz /usr/src/redhat/SOURCES
⑤ RPMパッケージをビルドします。 # cd /usr/src/redhat/SPECS
# rpmbuild –ba openssh.spec
#
# cd /usr/src/redhat/RPMS/x86_64
# ls -l
total 984
-rw-r--r-- 1 root root 275875 Mar 12 15:19 openssh-5.2p1-1.x86_64.rpm
-rw-r--r-- 1 root root 437814 Mar 12 15:19 openssh-clients-5.2p1-1.x86_64.rpm
-rw-r--r-- 1 root root 275969 Mar 12 15:19 openssh-server-5.2p1-1.x86_64.rpm
#
⑥ OpenSSHパッケージをアップデートします。
# cd /usr/src/redhat/RPMS/x86_64
# rpm –Uvh openssh-5.2p1-1.x86_64.rpm
# rpm –Uvh openssh-clients-5.2p1-1.x86_64.rpm
# rpm –Uvh openssh-server-5.2p1-1.x86_64.rpm
⑦ sshdを再起動します。
# /etc/rc.d/init.d/sshd condrestart
Chroot environment construction of vsftpd & OpenSSH
Copyright© 2008 LA TIGRE. 7
3.2. OpenSSHの設定
sshd_configの具体的な設定内容は下記のとおりです。
設定に関する詳細な情報は SSHD_CONFIG(5)のマニュアルページを参照してください。
# cd /etc/ssh
# sed -e '/^$/d' -e '/^#/d' sshd_config
Protocol 2
ListenAddress 0.0.0.0
SyslogFacility AUTHPRIV
PermitRootLogin no
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
AcceptEnv LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
X11Forwarding no
Subsystem sftp /usr/libexec/openssh/sftp-server -f authpriv -l info
Match User www
ChrootDirectory /das/chrooted
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp
Match Group crusers
ChrootDirectory /das/chrooted/home_%u
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp
#
パラメータ 説明
Protocol sshdがサポートする SSHプロトコルのバージョンを指定する。
ListenAddress listen(2)が束縛するローカルアドレスを指定する。
SyslogFacility sshdが syslog経由でロギングする際のファイシリティを指定する。
/etc/syslog.conf を参照すること。
PermitRootLogin root ログインの許可制御を行う。
PasswordAuthentication パスワード認証の許可制御を行う。
ChallengeResponseAuthentication チャレンジ・レスポンス認証の許可制御を行う。
GSSAPIAuthentication GSSAPI認証の許可制御を行う。
GSSAPICleanupCredentials ユーザがログアウトする際、GSSAPI証明書キャッシュの削除制御を行う。
UsePAM PAM認証の許可制御を行う。
AcceptEnv クライアントから受付ける環境変数をセッションの ENVIRON(7)にコピーする。
X11Forwarding X11転送の許可制御を行う。
Subsystem 外部サブシステム(sftp-serverなど)を設定する。
Match User ユーザ名による条件設定を指定する。
カンマで区切られた複数エントリのリストを使用できる。
Match Group グループ名による条件設定を指定する。
カンマで区切られた複数エントリのリストを使用できる。
ChrootDirectory 認証後に CHROOT(2)を行うパス名を設定する。
このパス名、およびそこに至る全てのディレクトリは rootが所有していなければ
ならず、かつ他のユーザやグループに対して書込み禁止でなければならな
い。パス名には%u(認証されたユーザ名)といったトークンが使用できる。
vsftpd & OpenSSH の chroot環境構築
Copyright© 2008 LA TIGRE. 8
3.3. chroot環境のホームディレクトリについて
前述の「1.7. ユーザのホームディレクトリ」でも記述したとおり、chroot 環境では vsftpd と
OpenSSH用でホームディレクトリの位置が異なっています。
これは、OpenSSH chroot 機能仕様により、ホームディレクトリ、およびそこに至る全てのディレ
クトリは root が所有しなければならず、かつ他のユーザやグループに対して書込み禁止でなく
てはならないからです(これに違反すると chroot環境は提供されません)。
例えば、 foo ユーザのアカウントを作成する際、FTP 方式でのホームディレクトリは
/das/chrooted/home_foo/foo と な り 、 OpenSSH 方 式 で の ホ ー ム デ ィ レ ク ト リ は
/das/chrooted/home_foo となります。
また、OpenSSH chroot環境の場合、sshを利用する場合は/etc、/usr、/lib等といったミニルー
トを作成し、かついくつかの設定ファイル、ライブラリ、実行可能ファイル等を配置する必要があ
ります。
das
home_foo
/
chrooted
foo
実際のファイルシステム
OpenSSH chroot下のホームディレクトリ(/)
vsftpd chroot下のホームディレクトリ(/)
移動可能なディレクトリ範囲
移動可能なディレクトリ範囲
Chroot environment construction of vsftpd & OpenSSH
Copyright© 2008 LA TIGRE. 9
3.4. テンプレートの作成
本節では vsftpd、OpenSSH の chroot環境下でのユーザアカウントの作成方法を示すために
crtmplを作成します。また crtmplアカウント作成時に準備する chroot環境は次回アカウント作
成時のテンプレートとして再利用可能になります。
① chroot用のグループを作成します。
# groupadd –g 2001 crusers
② テンプレート用のアカウントを作成します。ディレクトリは後で作成します。
# useradd –g 2001 –u 2100 –d /das/chrooted/home_crtmpl/crtmpl crtmpl
③ パスワードを設定します。
# passwd crtmpl
④ vsftpd、OpenSSH chroot用のホームディレクトリを作成します。
# cd /das/chrooted
# mkdir home_crtmpl
# mkdir home_crtmpl/crtmpl
# chmod 755 home_crtmpl
# chmod 777 home_crtmpl/crtmpl
# chown crtmpl:crusers home_crtmpl/crtmpl
⑤ OpenSSH chroot用のシステムディレクトリを作成します。
# cd /das/chrooted/home_crtmpl
# mkdir bin dev etc lib64 usr
⑥ binディレクトリに必要なファイルをコピーします。
※本書では必要最低限のファイルをコピーしています。
# cd /das/chrooted/home_crtmpl/bin
# cp –dp /bin/bash .
# cp –dp /bin/egrep .
# cp –dp /bin/env .
# cp –dp /bin/grep .
# cp –dp /bin/ls .
# cp –dp /bin/more .
# cp –dp /bin/sh .
vsftpd & OpenSSH の chroot環境構築
Copyright© 2008 LA TIGRE. 10
⑦ devディレクトリに必要なファイルをコピーします。
※本書では必要最低限のファイルをコピーしています。
# cd /das/chrooted/home_crtmpl/dev
# MAKEDEV –x null
⑧ etcディレクトリに必要なファイルをコピーします。
passwd、groupファイルは crtmplユーザ、crusers グループのみで十分です。
※本書では必要最低限のファイルをコピーしています。
# cd /das/chrooted/home_crtmpl/etc
# grep crtmpl /etc/passwd > passwd
# grep crusers /etc/group > group
# mkdir security
# cp –dp /etc/security/console.perms /etc/security/pam_env.conf .
⑨ lib64ディレクトリに必要なファイルをコピーします。
※本書では必要最低限のファイルをコピーしています。
# cd /das/chrooted/home_crtmpl/lib64
# cp –dp /lib64/ld-2.5.so .
# cp –dp /lib64/ld-linux-x86-64.so.2 .
# cp –dp /lib64/libacl.so.1 .
# cp –dp /lib64/libacl.so.1.1.0 .
# cp –dp /lib64/libattr.so.1 .
# cp –dp /lib64/libattr.so.1.1.0 .
# cp –dp /lib64/libc-2.5.so .
# cp –dp /lib64/libc.so.6 .
# cp –dp /lib64/libcom_err.so.2 .
# cp –dp /lib64/libcom_err.so.2.1 .
# cp –dp /lib64/libcrypt-2.5.so .
# cp –dp /lib64/libcrypt.so.1 .
# cp –dp /lib64/libcrypto.so.0.9.8e .
# cp –dp /lib64/libcrypto.so.6 .
# cp –dp /lib64/libdl-2.5.so .
# cp –dp /lib64/libdl.so.2 .
# cp –dp /lib64/libkeyutils-1.2.so .
# cp –dp /lib64/libkeyutils.so.1 .
# cp –dp /lib64/libnsl-2.5.so .
# cp –dp /lib64/libnsl.so.1 .
# cp –dp /lib64/libnss_compat-2.5.so .
# cp –dp /lib64/libnss_compat.so.2 .
# cp –dp /lib64/libnss_files-2.5.so .
# cp –dp /lib64/libnss_files.so.2 .
# cp –dp /lib64/libpcre.so.0 .
# cp –dp /lib64/libpcre.so.0.0.1 .
# cp –dp /lib64/libpthread-2.5.so .
# cp –dp /lib64/libpthread.so.0 .
# cp –dp /lib64/libresolv-2.5.so .
# cp –dp /lib64/libresolv.so.2 .
# cp –dp /lib64/librt-2.5.so .
# cp –dp /lib64/librt.so.1 .
# cp –dp /lib64/libselinux.so.1 .
# cp –dp /lib64/libsepol.so.1 .
# cp –dp /lib64/libtermcap.so.2 .
# cp –dp /lib64/libtermcap.so.2.0.8 .
# cp –dp /lib64/libutil-2.5.so .
# cp –dp /lib64/libutil.so.1 .
⑩ binディレクトリに必要なファイルをコピーします。
※本書では必要最低限のファイルをコピーしています。
# cd /das/chrooted/home_crtmpl/bin
# mkdir bin lib64 libexec
Chroot environment construction of vsftpd & OpenSSH
Copyright© 2008 LA TIGRE. 11
# cp –dp /usr/bin/groups bin
# cp –dp /usr/bin/id bin
# cp –dp /usr/bin/scp bin
#
# cp –dp /usr/lib64/libgssapi_krb5.so.2 lib64
# cp –dp /usr/lib64/libgssapi_krb5.so.2.2 lib64
# cp –dp /usr/lib64/libk5crypto.so.3 lib64
# cp –dp /usr/lib64/libk5crypto.so.3.1 lib64
# cp –dp /usr/lib64/libkrb5.so.3 lib64
# cp –dp /usr/lib64/libkrb5.so.3.3 lib64
# cp –dp /usr/lib64/libkrb5support.so.0 lib64
# cp –dp /usr/lib64/libkrb5support.so.0.1 lib64
# cp –dp /usr/lib64/libz.so.1 lib64
# cp –dp /usr/lib64/libz.so.1.2.3 lib64
#
# mkdir libexec/openssh
# cp –dp /usr/libexec/openssh/sftp-server .
vsftpd & OpenSSH の chroot環境構築
Copyright© 2008 LA TIGRE. 12
4. PAMによるアクセス制御
4.1. PAMについて
PAM とは各種の認証処理を実行するモジュール群の集合体です。
モジュールは共有ライブラリとして提供されており、ライブラリ内に標準 API も提供されていま
す。
従来、アプリケーション毎に固有の認証処理を行う点を PAM に独立させることにより、アプリ
ケーションを修正せず、かつ異なるプラットフォーム間でも互換性に優れ、きめ細かな認証方式
を実装することができます。
PAMはどのディストリビューションでも標準で備えており、RHEL5でも標準実装されています。
4.2. PAM設定ファイルの配置
vsftpd、OpenSSH を導入すると自動的に PAM設定ファイルが配置されます。
# cd /etc/pam.d
# ls vsftpd sshd
vsftpd sshd
#
① vsftpdを修正します。下記のように変更してください。 # vi /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_warn.so
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account required pam_access.so accessfile=/usr/local/etc/security/access.conf
session include system-auth
session required pam_loginuid.so
...
PAM API
PAMモジュール
X
PAMモジュール
Y
PAMモジュール
Z
PAMモジュールユーザ定義
アプリケーションpasswd
アプリケーションsu
アプリケーションlogin
アプリケーションユーザ定義
ユーザ情報DB
ユーザ定義認証システム/etc/passwd
PAM設定ファイル
Chroot environment construction of vsftpd & OpenSSH
Copyright© 2008 LA TIGRE. 13
② sshdを修正します。下記のように変更してください。 # vi /etc/pam.d/sshd
#%PAM-1.0
auth required pam_warn.so
auth include system-auth
account required pam_nologin.so
account required pam_access.so accessfile=/usr/local/etc/security/access.conf
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so
...
4.3. PAM設定ファイルの配置
アクセス制御ファイルを配置します。PAM モジュール pam_access.so が参照するアクセス制
御ファイル名は前述のとおり、/usr/local/etc/security/access.conf となります。
# cat /usr/local/etc/security/access.conf
...
+ : admin www_admin : 127.0.0.1
+ : admin www_admin : 10.1.13.0/24 10.0.13.24/24 172.16.13.0/24
+ : admin www_admin : その他の接続元IPアドレスを列挙
...
- : ALL : ALL
access.conf の書式はカンマ区切りで permission:users/groups:origins となります。各
トークンの意味は下表のとおりです。詳細は ACCESS.CONF(5)のマニュアルページを参
照してください。
トークン 説明
permission +(プラス)の場合は許可、-(ハイフン)の場合は拒否を表す。
users/groups 許可、または拒否するユーザ名、グループ名を表す。
複数エントリがある場合は、空白で区切る。
また、EXCEPT演算子を前置詞として使用することが出来る。
例 1 + : abc : …
abcユーザに対して許可する…
例 2 + : EXCEPT abc : …
abcユーザ以外に対して許可する…
origins 許可、または拒否する接続元を表す。
TTY 名、ホスト名、ドメイン名(ピリオドで始まる名前)、ホストアドレス、ネットワーク番号
(ピリオドで終わるアドレス)、ネットワークアドレスとネットマスクの組、NIS によるネット
ワークグループ名(@netgrpなど)を指定可能。
複数エントリがある場合は、空白で区切る。
また、ALL、LOCAL演算子を使用することが出来、それぞれALL(全て)、LOCAL(ピリ
オドを含まない名前)に解釈される。
例 1 + : abc : ALL
全ての接続元から abcユーザに対するアクセスを許可する。
例 2 + : abc : 192.168.0.1
192.168.0.1の接続元から abcユーザに対するアクセスを許可する。
例 3 + : abc : 192.168.0.0/24
192.168.0.0~192.168.0.255の接続元から abcユーザに対するアクセスを許可する。
これは 192.168.0. と指定することも出来る。
vsftpd & OpenSSH の chroot環境構築
Copyright© 2008 LA TIGRE. 14
4.4. PAMの補足説明
本節では PAM 設定ファイル vsftpd を例に挙げ、設定ファイルの書式、処理フロー等について
説明しています。再度/etc/pam.d/vsftpd ファイルを参照してください。 # cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_warn.so
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account required pam_access.so accessfile=/usr/local/etc/security/access.conf
session include system-auth
session required pam_loginuid.so
#
設定ファイルは、「タイプ コントロールフラグ モジュール名 オプション」の書式を行単位で指
定します。PAM の設定内容について評価する順序は設定ファイルへのエントリ順と等しくなっ
ています。
① タイプ
PAM 用に用意されているモジュールにはタイプと呼ばれるメソッドが提供されており、その
機能については下表のとおりです。
タイプ 機能
auth ユーザ認証の方法(シャドウパスワード、MD5、LDAP、公開鍵認証等)。
account ユーザのサービスアクセスについて有効性を確認する方法(有効期限など)。
上述の auth とは独立した機構となる。
password ユーザの認証について変更する方法(passwd コマンド等)。
session ユーザ認証の前後で実行するタスク(ログイン/ログアウトのロギング、利用サービスの
制限など)。
② コントロールフラグ
最終的な認証の成否について何をなすべきかを PAM に伝えます。その制御については
下表のとおりです。
コントロールフラグ 制御内容
required 成功ステータスを返すことを要求する。
ただし、失敗ステータスが返された場合でも他の requiredタイプのモジュールに遷移す
る。これはユーザに対してどこで認証に失敗したか、という情報を与えないためであり、
他の required タイプのモジュールで試行するという意味ではないことに注意。
他の requiredタイプのモジュールは全て成功ステータスを返さなければ、認証失敗と評
価する。
requisite 成功ステータスを返すことを要求する。
ただし、失敗ステータスが返された場合は他の指定タイプのモジュールに遷移すること
なく即座に認証失敗と評価する。
sufficient 成功ステータスが返された場合、以後の評価を行わず終了する。
そして以前の required/requisiteモジュール全てが成功した場合に限り認証成功と評価
する。失敗ステータスが返された場合、後続の評価を続けて required/requisite モ
ジュール全てが成功した場合に限り認証成功と評価する。
option 指定モジュールを実行するのみで認証の成否に影響しない。
include 他の PAM設定ファイルを参照する。
Chroot environment construction of vsftpd & OpenSSH
Copyright© 2008 LA TIGRE. 15
③ モジュール名
PAM モジュールのフルパス名。本書では/lib64/security 以下の共有ライブラリが参照され
ます。vsftpdで参照されているモジュールは下表のとおりです。
詳細は、The Linux-PAM System Administrators’ Guide を参照してください。
モジュール名 機能
pam_keyinit.so 認証データを安全にカーネルにキャッシュするための初期化を行う。
pam_warn.so PAMモジュールのロギングを行う。
pam_listfile.so 外部ファイルの内容に基づき、サービスへのアクセス許可/拒否を行う。
pam_shell.so 有効なログインシェルとして/etc/shellsファイルを参照する。
pam_access.so 外部ファイルの内容に基づき、アクセス制御を行う。
pam_loginuid.so ユーザ IDをロギングする。
④ モジュールへの引数
指定モジュールによってはいくつかの引数を渡すことができます。
詳細は、The Linux-PAM System Administrators’ Guide を参照してください。
vsftpd & OpenSSH の chroot環境構築
Copyright© 2008 LA TIGRE. 16
chroot environment construction of vsftpd & OpenSSH
改版履歴 Version 0.1 2009/04/22 新規作成。
Version 0.2 2009/06/16 誤字修正。
製作 LA TIGRE
本書は 2009年 6月現在の情報を元に作成されております。本書に記載されております内容は、許可なく変更されること
があります。