wu-ftpd
wu-ftpdとは

FTPサーバを立てて、FTPクライアントソフトによりファイルを送受信を主な目的とする デーモンの総称である。

Protocol
FTP/FTP-DATA
Port
20/TCP 21/TCP
Program
/usr/local/wu-ftpd/sbin/in.ftpd (tar.gz版)
/usr/sbin/in.ftpd (RPM版)
ダウンロード先
http://www.wu-ftpd.org/ (tar.gz版)
http://rpmfind.net/linux/rpm2html/search.php?query=wu-ftpd&submit=Search+...(RPM版)
Install
tar.gz版は tar zxvf wu-ftpd-2.6.2.tar.gz等として解凍した後、以下の好みのオプションで、
./configure する。後ほど細かく解説する
実行方法

/usr/sbin/in.ftpd -S (RPM版)
/usr/local/wu-ftpd/in.ftpd -S (tar.gz版) かなりオプションが存在するので、
別項で詳しく書く

備考
wu-ftpdは、セキュリティバグが頻繁に出ているので、常に新しいものを維持しておく必要がある。
ちなみに、最新版のwu-ftpdのsrpmをばらして、ソースを自分でコンパイルすると、
version 2.8.0 になっていた。

 

 





今回構築しようとしている機能は次のとおりである。

PostgreSQLとの連携
パケットの暗号化
パケット暗号化のクライアント対応
 
SSL/TLSの導入を考えていた時点では、以下のことを注意した。
※Implicitはサーバ接続時に暗号化を行うようです
※Explicitの場合は、通常のFTPのように接続を行ってから、暗号化手順
をプレーンテキストで送信、その後暗号化セッションを作成しているようです
上記は別サイトで実験中の方からの報告をそのまま参考にさせてもらった





今回構築するにあたって必要なものだけを抜粋している。

./configure
オプション
説明
--prefix=/usr/local/wu-ftpd


 

インストール先を、/usr/local/wuftpd 等に指定する。設定しなければデフォルトで/usr/local/ となると思う。


--enable-noop


 

機能自体は何もない。デーモンがタイムアウトを防ぐために、定期的に、noopコマンドを発行して、タイムアウトを防ぐ機能だ。デバックモードで意味もなくタイムアウトが起こる場合は、つけてみるようにしている。


--disable-numericuid

 

 

version 2.5ぐらいまでは、UIDは、所有者で表示されていたが、2.6.2辺りから、デフォルトがUIDのまま表示されるようになった。以前と同じように所有者名の表示で、出したい場合にはつけると良いだろう。

---enable-chmod
  allow ftp users to set SETUID/SETGID/STICKY bits
ftpユーザがSETUID/SETGID/STICKYビットをセットすることを可能にする。

--enable-pam
  PAM(Pluggable Authentication Modules)モジュールを使用する
通常,サーバに接続する際には認証プログラムが動作して各サービスへ接続される。この認証部分のみを独立させることで各サービス(ftpdなど)ごとに基本的な認証設定をしなくて済むよう配慮されているのだ。各サーバソフトをリコンパイルする必要なく,PAM サポートという形で共通のユーザー認証が実現できる。

--enable-tls
  SSL/TLS を有効にする。
TLS は、IETF によって標準化された SSL ベースのプロトコルだそうだ。SSLはNettscape社が開発したのに対し、TLSはSSL を一般化し,標準化したものと覚えとけば良いだろう。
 
--enable-tls-debug
 
SSL/TLS を有効にした場合、/var/log/message にデバックレベルで詳細がでてくる。ファイル名を指定することにより、特定の場所へ出力することも可能なようだ。

--with-openssl-dir
  OpenSSLがあるディレクトリィを指定する。デフォルト指定では、/usr/local/sslだと思うが、環境によって -with-openssl-dir=/usr/local/openssl などとなるかもしれない
 
手順
説明
  ./configure --上記の好みのオプション

 

 

今回の自分の構築は、このようになった。

./configure --prefix=/usr/local/wu-ftpd --enable-noop --disable-numericuid --enable-chmod
       
ここで普通は、make all install などとするのだが、今回 wu-ftpdとPostgreSQLを連携するように改造したので、上記./configureを行った後、別作業が応じる、普通にサーバを立ち上げたいだけなら、この作業は、皆無なので読み飛ばして頂いて結構。しかし、ssl対応にする場合にはまだ、make作業はしてはならない。
なお、改造は済んでいるものとして、コンパイルの手順を書く。改造方法は、別項で記述する。

通常不要
PostgreSQL連携用
コンパイル手順
説明

cd $src/postgresql
make install-all-headers
  .ます、PostgreSQL用のヘッダファイルなどが必要なので、インストールが済んでいない場合は、インストールを済ませる。
PostgreSQLのソースファイルの場所で、make install-all-headers と打つ。
すると、PostgreSQLで開発する時に必要なヘッダファイルなどがインストールされる。
(rootで作業を行う)

vi wu-ftpd/src/Makefile
 
wu-ftpd/src/ のなかに Makefile があるので、以下の部分を見つけ付け加える。
$(CC) -o $@ ${OBJS} $(LDFLAGS) $(LIBS)

$(CC) -o $@ ${OBJS} $(LDFLAGS) $(LIBS) -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -lnsl -lcrypt

configureを改良すれば、makefileを修正する必要も無いが、今回はそこまでしなかった。
       
対象Daemon
wu-ftpdのftpd.c
  ftpd.c

SSL/TLSの為の手順 2004/1/28 必要と思われるDocument
       
 
SSL/TLSのHOWTO
       
       
 
SafeTpの構築手順
説明
       
  2004/01/23
後日、SafeTPは色々なソフトとの相性がでることが判る。
また、SafeTP自体が柔軟なIP制限をしてないことから改造を試みるが、wu-ftpdに、標準搭載されてる、sslの機能を使ったほうが安定しそうなので、そちらの構築を再開。以下は、一応入れたときの記録



まず以下のサイトから、UNIX用のソースコードを引っ張ってくる。

http://safetp.cs.berkeley.edu/unix.html
       
 

ソースは、C++で書かれているようだった
特に、注意しなければいけないオプションも存在しなかったので、普通にconfigureを書けるだけで、makefileは、作成されるはずだが、こちらの環境では、libgmp.a (the GNU multi-precision math library)という物が存在しなかった。コンパイルの際必要らしいので、こちらもインストールする。


このライブラリに必要なパッケージの冒頭を少し読んでみた。
GMP(GNU Multiple Precision)は、整数、有理数および浮動小数点番号上で動作する絶対制度を持つ計算ライブラリである。
GMPが走るマシーンは、メモリ以外には、制限はない。

GMPは、豊富な機能を持っている。
また、それぞれの機能は規則的なインターフェースを持っている。
GMPのための主要な適用機能は暗号学および研究、インターネット・セキュリティ、代数システム、計算上の代数研究だ。

       
./configure
gmake
gmake check
  make作業を行った後、sc/install.pl スクリプトを利用して、インストールしろと書いてあるが、このスクリプトは、inetd.confを利用しているのが前提で作られているらしいので、使えなかった。


gmake後、コンパイル済みのバイナリーを、自分でコピーした。

cp sftpd sftpc makekeys viewkey addent /usr/local/safetp
chmod 755 /usr/local/safetp
chown -R safetp /usr/local/safetp
chgrp -R safetp /usr/local/safetp
       




SafeTPの構築手順

sftpd の公開鍵と秘密鍵を作成する。

su safefp
cd /usr/local/safetp
./makekeys 1024 0
以下のような画面が出た。

./makekeys 0 1024
Part of SafeTP's countermeasures against interception attacks
is the use of "branded" DSA keys-- that is, keys that include
a string that identifies the server who owns that key. This
string is attached to the public key, and the pair is signed with
the private key. Users will see this string when they first
connect to your server.

The string should include a domain name that users are likely
to use when connecting to your server. It can contain additional
information as well. (A creation date will be automatically
appended.)

For example: "UCB CS FTP server, ftp.cs.berkeley.edu"

Enter an identifying string (80 chars maximum):
kmr.homeip.net <- FQDNを入れた

SafeTP will now generate your new security keys. In order to make your keys
truly secure, you must provide us with some random input on the keyboard.
SafeTP will measure the time intervals between your keypresses and use this
to add entropy to the key generation procedure.
Now gathering entropy from system... If this appears to stall,
try moving the mouse or typing into another console window.
Entropy progress: [..........]
creating DSA keys with 1024 bits...
Time used to create DSA key: 0.0080 sec
Verifying DSA keys
server name: kmr.homeip.net [1/1/2004]
Verified.

 


/var/tmp/safetp/DSA に 公開鍵と秘密鍵が作成されているので、これらを移動してきた。
mv /var/tmp/safetp/DSA/* /usr/local/safetp/DSA

mv /var/tmp/safetp/* /usr/local/safetp/DSA

 
公開鍵をテキスト化する。

./viewkey DSA/public.key > DSA/public.key.txt
 

パーミッションの確認(key作成時デフォルトだと思うが念のため確認)/usr/local/safetp

~safetp 755
~safetp/randomSeed 600
~safetp/DSA 711
~safetp/DSA/private.key 600
~safetp/DSA/public.key 644
~safetp/DSA/public.key.txt 644
サービスのrの設定(以下を追加する。コメントを付けとくとなおいい)
vi /etc/services

ftp 21/tcp safetp # safetp added by SafeTP install 2004/01/01
ftp 21/udp fsp fspd
raw-ftp 351/tcp

ftpサーバを、loopbackアドレスと、自サーバに割り振られているアドレスのみとする。
vi /etc/hosts.allow

インターネットスーパーサーバの設定(xinetd)


service safetp
 
{  
  socket_type = stream
wait = no
user = safetp
server = /usr/local/safetp/sftpd
#-9 をつけると Secure以外のコネクションを拒否 -8 もある
#server_args = -s -9 -y/usr/local/safetp
server_args = -s -y/usr/local/safetp -r1200-1300
# logging
log_type = FILE /var/log/ftplog
log_on_success = PID HOST USERID DURATION
log_on_failure = HOST USERID RECORD
# security
instances = 10
per_source = 3

}
 






 
wu-ftpd+SafeTP+PostgreSQL起動
SafeTPは、インターネットスーパーサーバの再起動で対応済みである。
待ち受けportは、デフォルトで21番ポートになる。

wu-ftpdは、351番portで走らせる。
in.ftpd -S -p 351

もちろんこのままでは、351番ポートで待機している、ftpサーバも反応してしまうため、iptablesなどで、ルールを設定してやる。

 
 
 




 

 

 

 


Enter