chroot environment construction of vsftpd & openssh

24
chroot environment construction of vsftpd & OpenSSH vsftpd + OpenSSH chroot 環境構築 Version 0.2 Copyright © 2009 LA TIGRE.

Upload: yh

Post on 11-Jun-2015

1.906 views

Category:

Documents


6 download

DESCRIPTION

vsftpd & OpenSSHのchroot環境構築

TRANSCRIPT

Page 1: chroot environment construction of vsftpd & OpenSSH

chroot environment construction of

vsftpd & OpenSSH

vsftpd + OpenSSHの chroot環境構築

Version 0.2

Copyright © 2009 LA TIGRE.

Page 2: chroot environment construction of vsftpd & OpenSSH
Page 3: chroot environment construction of vsftpd & OpenSSH

iii

保証免責 本書は記載事項またはそれに関わる事項について、明示的あるいは暗黙的な保証はいたしておりません。

したがいまして、これらを原因として発生した損失や損害についての責任を負いません。

著作権 本書および本書に記載されておりますソフトウェア等は、著作権により保護されております。

また非商用以外に本書を、複製、再頒布することをかたく禁止いたします。

Page 4: chroot environment construction of vsftpd & OpenSSH
Page 5: chroot environment construction of vsftpd & OpenSSH

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

#

Page 6: chroot environment construction of vsftpd & OpenSSH
Page 7: chroot environment construction of vsftpd & OpenSSH

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

Page 8: chroot environment construction of vsftpd & OpenSSH
Page 9: chroot environment construction of vsftpd & OpenSSH

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 となります。

Page 10: chroot environment construction of vsftpd & OpenSSH

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

...

#

Page 11: chroot environment construction of vsftpd & OpenSSH

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)に束縛するよう制御す

る。

Page 12: chroot environment construction of vsftpd & OpenSSH

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

...

Page 13: chroot environment construction of vsftpd & OpenSSH

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 []:

#

Page 14: chroot environment construction of vsftpd & OpenSSH

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

Page 15: chroot environment construction of vsftpd & OpenSSH

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(認証されたユーザ名)といったトークンが使用できる。

Page 16: chroot environment construction of vsftpd & OpenSSH

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下のホームディレクトリ(/)

移動可能なディレクトリ範囲

移動可能なディレクトリ範囲

Page 17: chroot environment construction of vsftpd & OpenSSH

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 .

Page 18: chroot environment construction of vsftpd & OpenSSH

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

Page 19: chroot environment construction of vsftpd & OpenSSH

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 .

Page 20: chroot environment construction of vsftpd & OpenSSH

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設定ファイル

Page 21: chroot environment construction of vsftpd & OpenSSH

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. と指定することも出来る。

Page 22: chroot environment construction of vsftpd & OpenSSH

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設定ファイルを参照する。

Page 23: chroot environment construction of vsftpd & OpenSSH

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 を参照してください。

Page 24: chroot environment construction of vsftpd & OpenSSH

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月現在の情報を元に作成されております。本書に記載されております内容は、許可なく変更されること

があります。