2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

Proftpdのすすめ!

Linuxのほとんどのディストリビューションが標準のFTPとしてWu-ftpdを採用している。しかし、Wu-ftpdは結構頻繁にセキュリティホールが見つかっており、セキュリティ面での脆さが指摘されている。したがって、今回セキュリティ面に強いと定評である Proftpd をインストールしたのでインストール方法を紹介する。


1.ソースのありか

小生がインストールした時点では、1.2.2rc3が最新だったのでこれを使用した。そろそろ、1.2.2の正式版が出るはずだ。


2.インストール(展開・コンパイル)

ダウンロードしたソースを展開する。

$ tar -zxvf proftpd-1.2.2rc3.tar.gz

次に、展開したディレクトリに移動し、configureを実行する。ここでインストール先を変更したい場合は、”–prefix”を指定する。デフォルトでは、/usr/local以下にインストールされる。

$ cd proftpd-1.2.2rc3

$ ./configure

エラーなしで、終了したらmakeし、rootになってインストールする。

$ make

$ su
password **********

# make install

エラーが出なければ、これでインストール完了!


3.設定と起動

メインプログラムファイルproftpdと、別名ファイルのin.proftpdが/usr/local以下のsbinにインストールされている。
また、etcディレクトリにproftpd.confファイルがインストールされている。このファイルを、カスタマイズする。その他のファイルを含め、ディレクトリ構造とファイルを以下に示す。

/usr/local/proftpd                        メインプログラム/usr/local/sbin/inproftpd           proftpdへのシンボルリンク/usr/local/etc/proftpd.conf 設定ファイル/usr/local/bin                              補助プログラム類/usr/local/man                             マニュアル類

■ とりあえず起動してみる

起動は、rootになって実行する。

$ su –
password **********

# /usr/local/sbin/proftpd

これでProftpdが起動する。しかし、RedHat系のディストリビューションの場合、以下のようなエラーが出る。

– no such group ‘nogroup’
– Fatal : Group: Unknown ‘nogroup’.

設定ファイルが設定しているnogroupが無いというエラーである。Proftpdは、proftpd.confファイルにデフォルトで’nogroup’が設定されている。したがって、これを変更する必要がある。

# vi /usr/local/etc/proftpd.conf

# Set the user and group that the server normally runs at.

User                     nobody
Group                    nogroup            ← これを nobody に訂正する

これで、起動してもエラーは出ないはずである。

proftpd.conf編集後サンプルはこちら ↓

# This is a basic ProFTPD configuration file
#
# 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                       "Welcome ProFTPD yh Server"
#ServerType                       inetd
ServerType                        standalone
DefaultServer                     on
DefaultRoot                         ~ !root
# 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

# Use localtime
TimesGMT FALSE

# 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

# Set the user and group that the server normally runs at.
User       nobody
Group     nobody

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

# A basic anonymous configuration, no upload directories.
#<Anonymous ~ftp>

#User ftp
#Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
#UserAlias anonymous ftp

# Limit the maximum number of anonymous logins
#MaxClients 10

# do not require shells listed in /etc/shells (user ftp do not have shell...)
RequireValidShell no

# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
#DisplayLogin welcome.msg
#DisplayFirstChdir .message

# Limit WRITE everywhere in the anonymous chroot
#<Limit WRITE>
#DenyAll
#</Limit>

#</Anonymous>

4.inetdデーモンからの起動

小生は、inetdデーモンからProftpdを起動している。参考に、この方法も説明する。
まず、inetd.confファイルに以下を追加する。

# vi /etc/inetd.conf

ftp     stream    tcp    nowait     root    /usr/sbin/tcpd     /usr/local/sbin/in.proftpd

tcpdを使うのでもちろん、wapperの設定も出来る。さらに、従来の、in.ftpdがinetd.confファイル中にある場合は、コメントすること。次に、proftpd.confファイルを編集する。

# vi /usr/local/etc/proftpd.conf

ServerName         “ProFTPD Custam”   ← これは好きに変更してかまわない
ServerType         inetd                        ← このように inetd に訂正する

これで設定は、完了!inetdにシグナルを与える。

# killall -HUP inetd

これで、Proftpdが起動される。

さあ、FTPクライアントで接続してみよう!

注:セキュリティ的に必要のないサービスは止めて置いた方がよいでしょう。proftpd.confファイルの<Anonymous ~ftp>から</Anonymous>迄の行を全て「#」でコメントする。削除してもかまわないが、後の設定の参考になるかと思うので残しておく。


5.ディレクトリアクセス制限

FTPでアクセスする場合、ユーザ別でのアクセス制限をかけたくなるであろう!
もちろん、Proftpもその手の制限は簡単に出来る。例として、以下のような条件でアクセス制限をかけてみる。

例1) home以下のusersグループのメンバーにはホーム以下の各メンバーディレクトリ以外のアクセスは禁止。また、rootグループのメンバーについては全てのディレクトリのアクセスを許可する。

DefaultRoot                           ~users, !root

例2) rootグループ以外は上位ディレクトリアクセス禁止。

DefaultRoot                            ~ !root      ← 注:チルダとビックリマークの間のスペースが微妙に大切なので注意のこと(コネクト出来なくなります)!

これらのような記述をproftpd.confのDefaultServerの下あたりに記述すれば良い。


6.運用中のワーニング

FreeBSDにproftpをインストールして、運用していたところ以下のワーニングが出た。ただし、Linuxでは基本的にワーニングとならない。

Nov 27 23:17:20 note proftpd[222]: no modules loaded for `ftpd’ service

/var/log/messagesの中身に現れたワーニングである。これは、あくまでもワーニングなので気にしない人は何も対策する必要はないのだが、 俺にとっては、かなりうざったい! 何れにしても、同FTPサーバへloginする時にはき出されるものでFTPを頻繁に使う方には対策を取った方が良いだろう。このメッセージが出る原因は、どうも/etc/pam.confに有るようだ。proftpdはPAMが使える状態で有ればこれを使って認証を許可する。したがって、この中のpam.confのFTPセクションの記述の整合性が合わなくなるために起こる問題のようだ。対策は、比較的簡単で/etc/pam.confへ以下のような記述を追加編集する。既にあるFTPセクションの記述は、コメントにする。

# Same requirement for ftpd as login
ftpd auth requisite pam_unix.so try_first_pass
ftpd account requisite pam_unix.so try_first_pass
ftpd session required pam_permit.so

追加編集が終わったら、FTPサーバにloginして試して欲しい。

# tail -f /var/log/messages

でログをリアルタイム出力にしてftpコマンドを発行して、メッセージの出力状況を確認しながらテストすると解りやすい。

以上

コメント