パンダのメモ帳

技術系のネタをゆるゆると

CentOS 5.4でFTPサーバーの構築

CentOS 5.4にProFTPDを導入し、FTPサーバーとして動作させる。

1. 要件と仮定

今回の要件は下記の通り。

  • ユーザーが自分のホームディレクトリへFTPでアクセスできる様にする。
  • ユーザー認証にはLDAPを使用する(LDAP環境の構築についてはこちら)。
  • LDAPを使用する場合、ホームディレクトリが存在しない場合がある。その場合、自動でホームディレクトリを作成する。
  • xinetdを導入し、xinetd経由で起動する様に設定する。

CentOS標準の vsFTPD でも構わないのだが、ProFTPD は vsFTPD に比べてLDAPとの連携が充実しており、LDAP環境ならばこちらをおすすめする。

2. インストール

yumからインストールを行う。標準リポジトリでは提供されていないが、rpmforgeを利用できるようにしておくことでyumからインストールが可能。

[root@localhost ~]# yum -y install proftpd proftpd-ldap

また、xinetd経由で動作させるため、xinetdが必要となる。未導入の場合は以下のコマンドでインストール・起動しておく。

[root@localhost ~]# yum -y install xinetd
[root@localhost ~]# service xinetd start
[root@localhost ~]# chkconfig xinetd on

3. 設定

ProFTPDの設定ファイルは /etc/proftpd.conf にある。今回は下記の通り設定した。

# 接続したクライアントに表示するサーバー名とメッセージ
ServerName			"FTP Server"
ServerIdent			on "FTP Server ready."
# サーバー管理者のメールアドレス
ServerAdmin			root@localhost
# サーバーの動作モード -> xinetd経由で起動させる
ServerType			inetd
# PASVコマンドで使用するポート範囲
PassivePorts			60000 60030
# バーチャルホスト運用は行わないのでデフォルトに設定
DefaultServer			on
# 認証成功時にクライアントに表示するメッセージ
AccessGrantMsg			"User %u logged in."

# 新しいファイルを作成する場合のUMASK値
Umask				022
# chroot先ディレクトリと除外条件 -> ホームディレクトリ(wheel以外)
DefaultRoot			~ !wheel
# ログイン時の初期ディレクトリ -> ホームディレクトリ
DefaultChdir			~
# 初ログイン時にホームディレクトリを自動で作成する
CreateHome			on 0755 skel /etc/skel
# LISTコマンドのオプション
ListOptions			"-a"

# 認証手順 - LDAP認証のみを行う
AuthOrder			mod_ldap.c

# リモートユーザー名の確認を行わない
IdentLookups			off
# リモートホストのDNS逆引きを行わない
UseReverseDNS			off

# LDAPモジュールを読み込む
LoadModule			mod_ldap.c
# LDAP設定
LDAPServer			ldap.example.jp
LDAPUseTLS			on
LDAPAuthBinds			on
LDAPDoAuth			on "dc=example,dc=jp"
LDAPDoUIDLookups		on "ou=People,dc=example,dc=jp"
LDAPDoGIDLookups		on "ou=Group,dc=example,dc=jp"

# アップロード/ダウンロード時のレジュームを有効にする
AllowRetrieveRestart		on
AllowStoreRestart		on

# 認証前のユーザー/グループ
User				nobody
Group				nobody

# sendfile()を使用しない
UseSendfile			no

# ログ設定
LogFormat			default "%h %l %u %t \"%r\" %s %b"
LogFormat			auth "%v [%P] %h %t \"%r\" %s"
ExtendedLog			/var/log/proftpd/access.log WRITE,READ default
ExtendedLog			/var/log/proftpd/auth.log

# デフォルトのアクセス制御
<Global>
  AllowOverwrite		yes
  <Limit ALL SITE_CHMOD>
    AllowAll
  </Limit>
</Global>

4. xinetdの設定

ProFTPDをインストールすると /etc/xinetd.d/xproftpd というファイルが生成されているのでこれを編集する。

[root@localhost ~]# vim /etc/xinetd.d/xproftpd
service ftp
{
	socket_type		= stream
	wait			= no
	user			= root
	server			= /usr/sbin/in.proftpd
	log_on_success		+= HOST USERID PID
	log_on_failure		+= HOST USERID
	nice			= 10
	disable			= no
	instances		= 10
}

xinetdの設定ファイルの書き方については割愛する。意味が分からない場合は各自で調べて欲しい。

5. 起動

xinetdを再起動し、FTP接続ができることを確認する。

[root@localhost ~]# service xinetd restart