Proftpdのインストール&設定

Proftpd のインストールと設定を紹介します。

インストール


$ tar zxvf proftpd-x.x.x.tar.gz
$ cd proftpd -x.x.x
$ ./configure
$ make
# su
# make install
 

proftpd の設定をします。

/usr/local/etc/proftpd.conf

 
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.
 
ServerName "ProFTPD ( -_-)v"
ServerType inetd     #---------------------------A
DefaultServer on
 
# Port 21 is the standard FTP port.
Port 21
 
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
 
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30
 
TimeoutStalled 300
 
# Set the user and group under which the server will run.
User nobody
Group nobody     #---------------------------B
 
# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.

#---------------------------C
DefaultRoot /usr/local/apache2/htdocs group1
DefaultRoot /home/scoutroll group2
DefaultRoot /home/kazan group3

 
# Normally, we want files to be overwriteable.
<Directory />
AllowOverwrite on
</Directory>

#---------------------------D
<Limit LOGIN>
 AllowUser web,kazan,scoutroll
 DenyAll
</Limit>
 
#---------------------------E
<Directory /home/scoutroll/public_html>
 AllowOverwrite on
 <Limit WRITE>
  AllowAll
 </Limit>
</Directory>
 
<Directory /home/scoutroll>
 <Limit WRITE>
  DenyAll
 </Limit>
</Directory>

 
#---------------------------F
UseReverseDNS off
TimesGMT off

 

---------------------------A
proftpd を xinetd経由で起動したいので、standalone から inetd にします。

---------------------------B
デフォルトでは nogroup になっていて、新たにグループをつくらないけないなので、nobodyにします。

---------------------------C

デフォルトルートの設定です。ここで設定するとこのディレクトリ以下の階層しか移動できないようになります。

DefaultRoot ディレクトリ 対象のグループもしくは以外のグループ
と設定します。対象となるのがユーザーではなく、グループということに注意です。

上記の
DefaultRoot /usr/local/apache2/htdocs group1
は group1 のデフォルトルートを  /usr/local/apache2/htdocs にするという設定です。
group1 以外のグループのデフォルトルートを  /usr/local/apache2/htdocs にしたい場合は、
DefaultRoot /usr/local/apache2/htdocs !group1
のように「!」をグループの前につけます。


各ユーザーのホームディレクトリをルートディレクトリにしたい場合は、
DefaultRoot ~
とします。
これで、FTPにログインしたユーザーは自分のホームディレクトリしか見ることが出来なくなります。

ここでは
DefaultRoot /usr/local/apache2/htdocs group1
DefaultRoot /home/scoutroll group2
DefaultRoot /home/kazan group3

と、3つ設定しています。これは、グループごと(グループ=ユーザーと設定して、ユーザーごと)にディレクトリを分けています。各ユーザーに対して、そのユーザーのホームディレクトリのみしか公開しない場合は、上で説明した、DefaultRoot ~ でいいのですが、ホームディレクトリ以外を指定したい場合は複数書きます。

---------------------------D
Limit LOGIN で、ログインできるユーザー、グループ、ホストを制御できます。
ここでは、ユーザー、web , kazan , scoutroll のみ、FTPにアクセスできるよう、設定してます。

グループを制限したい場合は
AllowGroup , DenyGroup
を使い、ホストを制限したい場合は
Allow  from 10.10.10.10
Deny  from 10.10.10.10

とします。
その他に、全てを許可したい場合は
AllowAll
拒否したい場合は
DenyAll
を用います。

---------------------------E
ディレクトリごとの設定をしています。

AllowOverwrite on
はファイルの上書きを許可する、で、
Limit WRITE
は、ファイルの書き込みの制限です。

なので、ここでは、
/home/scoutroll/public_html
には、ファイルを書き込めるが、
/home/scoutroll
には、書込み禁止としています。

---------------------------F
DNS逆引きの設定とGMTタイムゾーンをOFFにしています。

DNSを有効にすると、認証に時間がかかります。
GMTをOFFにしないと表示時間が9時間ほどマイナスになります。

ProftpにもApacheと同じく、VirtualHost ディレクティブがありますが、ProftpはIPベースのバーチャルホストしか対応していないので、Nameベースのバーチャルホストを立てる場合は、ユーザーに対して、デフォルトルートをそれぞれ指定する必要があります。

次に xinetd の設定です。下記のようなファイルを作れば完了です。

/etc/xinetd.d/ftp


service ftp
{
 disable = no
 socket_type = stream
 user = root
 wait = no
 server = /usr/local/sbin/in.proftpd
 log_on_failure += USERID
 flags = REUSE
}
 

ただし、このままではFTPにログインすると /var/log/message にエラーメッセージがでるので、PAMを使った認証を追加します。

/usr/local/etc/proftpd.conf


追加項目

AuthPAMAuthoritative On
AuthPAMConfig ftp
 

proftpd.conf に追加したら、/etc/pam.d/ftp を作成します。

/etc/pam.d/ftp


#%PAM-1.0
auth required /lib/security/pam_stack.so service=system-auth
account optional /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
 

これで、PAMを使った認証をするので、エラーログは吐き出されません。