第1部 構築編

お試し

FTP を変えてみる

LAMP プラットフォームからイキナリ横道にそれるが、今回は FTP サーバソフトウェアを変えてみたいと思う。
Red Hat Linux では WU-FTPD という FTP サーバソフトウェアが標準採用されているわけだが、 WU-FTPD は設定が面倒くさいとか、幾多ものセキュリティホールが見付かっているとか色々とあるらしい
この日記を書き出してからちょこちょことアドバイスをくれる経験者の方は WU-FTPD をやめてしまって別の FTP サーバソフトウェアを使っているそうだ。

それが今回導入に挑戦する ProFTPD だ。

ProFTPD
http://proftpd.linux.co.uk/

取り敢えず FTP サーバソフトウェアが二重に入っていると色々と面倒なので、現在稼働している WU-FTPD を止めてしまおう
とりあえず、

chkconfig wu-ftpd off

として、WU-FTPD を止めてしまった。
WU-FTPD は xinetd というスーパサーバと呼ばれるソフトウェアから代理アクセスされる仕様で、ランレベルが関係ない
よってランレベルを指定しないでも容赦なく止まる………らしい
WU-FTPD も スーパサーバ上だけでなく daemon 動作って出来たと思うけど、やってない
んで、続いてアンインストール。
WU-FTPD は rpm パッケージによってインストールされたので、以下のようにタイプする。

rpm -e wu-ftpd

えぇ~と、怒られた(汗)

エラー: これらのパッケージを削除すると依存性を破壊します:
        ftpserverは anonftp-4.0-9 に必要とされています

anonymous FTP が WU-FTPD に依存しているらしい(爆)
んじゃ、anonymous FTP の方からアンインストールしないとダメなのか………

chkconfig --list

で、anonymous FTP を探してみる………?
見付からない………??
むむ?
んじゃ仕方ないので、容赦なく潰してみよう(爆)

rpm -e anonftp

エラーも何も表示されず、シェルプロンプトに戻ってきた。

Linux に限らず、UNIX 系は無言の美徳というべきか、処理がうまくいった時は何も言わずに黙っている。
Windows の様に何かと騒いだりはしない。
小さなプログラム同士が互いに互いの入出力を接続しあって梃子の原理で動くので、下手なメッセージは要らないだけでなく、邪魔なのだ。

で、再び、

rpm -e wu-ftpd

今度は警告が出た。

警告: /etc/xinetd.d/wu-ftpd saved as /etc/xinetd.d/wu-ftpd.rpmsave

xinetd から呼び出される設定が待避されたらしい。
取り敢えず要らないので消しておこう。

rm /etc/xinetd.d/wu-ftpd.rpmsave

さて、ProFTPD を取りに行こう。
http://www.proftpd.net/ にあるというので訪れてみたら、容赦なく http://proftpd.linux.co.uk/リダイレクトされた(汗)
現在のバージョンは 1.2.6 らしいので、gz 版を取ってくる。
次のバージョンの候補版として 1.2.7rc2 が出ているが、安定版を求めて現在の正式バージョンを使っておこう。
さて、このソースをサーバに………

………んあ?

しまった、FTP が使えない(爆)
これはなかなかにマヌケだ。
仕方ないから、SCP でコピーしよう。
SCP、Secure Copy は FTP に変わるファイル転送の仕組みとして、SSH の一部に規定されている………らしい。
仕事で使わざるを得なくなって WinSCP というのを使っているので、これを試してみる。
ちなみに、WinSCP はここにあるので、興味のある方はどうぞ。
ちょっとインターフェイスに独特の癖があるので、要注意。

WinSCP
http://winscp.vse.cz/eng/

さて、サーバに転送した proftpd-1.2.6.tar.gz を慣例に従って /usr/local/src/proftpd にコピーして、展開する。

tar -xzf proftpd-1.2.6.tar.gz

proftpd-1.2.6 というディレクトリが出来るので移動する。
んで、例によって ./configure で設定。

./configure --prefix=/usr/local/proftpd

そのまま、

make
make install

さて、インストールしたはいいが、ど~やって起動する?
色々調べていくと、/usr/local/proftpd/sbin/proftpd で起動するらしい。
取り敢えず起動してみる………と、怒られる

- no such group 'nogroup'
- Fatal : Group: Unknown 'nogroup'.

おぉ~ひ………

色々と調べていくと、Red Hat 系では nogroup というユーザグループはないので、これを nobody にしないといけないらしい。
/usr/local/proftpd/etc/proftpd.conf にその設定があるので、

Group nogroup

というところを、

Group nobody

と書き換えた。
再び起動させると、今度は正常に起動、FTP へのアクセスもうまくいったようだ。
さて、これを起動時に実行させたいのだが………?
起動用のシェルスクリプトが見付からない………(汗)
ちゅ~か終わらせ方が分からない(涙)

どうにもこうにも終わらせ方が分からないので、仕方なく再起動(爆)

さて、色々と探していくとスーパサーバ xinetd に設定する方法が見付かった。
/etc/xinetd.d ディレクトリに ftp というファイルで以下の記述を行う。

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

んで、

/etc/rc.d/init.d/xinetd restart

として xinetd を再起動する。
すると、普段は立ち上がっていないで、必要な時だけ起動する FTP サービスが出来上がったわけだ。
今まで試していた WU-FTPD と同じ動きだな。
とりあえず FTP にログオンしてみると、うまくいったようだ。

でも、ちょっと気になる点がひとつ。
例えばユーザ testuser でログオンすると /home/testuser が見えるわけだが、上に行けてしまう。
ま、telnet とか SSH で入れば同じコトなんだけど、なんか気分が悪いので、移動できるディレクトリを制限してしまう。
これまた色々と探していると、以下の設定で出来るらしい。
/usr/local/proftpd/etc/proftpd.conf に以下の一行を追加する。

DefaultRoot  ~

んで testuser でログオンしてみると、/home/testuser 以下でしか動けなくなったぞ。
よしよし。
んで、さらに anonymous FTP を試してみたい。
proftpd.conf では anonymous FTP は有効になっているので、そのまま anonymous でログオンしようとしたのだが、

530 Login incorrect.
Login failed.

怒られっぱなしで全然前に進まない。
一応 <Anonymous> の記述は <Anonymous /home/ftp> に治したし、ftp ユーザも、

adduser ftp -g ftp -s /sbin/nologon

で作ったんだけど………??
………お?
タイプミス発見(爆)

adduser ftp -g ftp -s /sbin/nologin

と、ユーザを作り直してみる。

ログインできるでやんの(爆)
そぉ~いうネタかいな………

さてさて、更に発展させて、普段の anonymous FTP の管理を考えてみよう。
anonymous FTP は ftp ユーザで /home/ftp 以下を覗くように出来ている。
だけど、実際の管理はメイン環境から行うので、出来れば anonymous FTP にファイルを置いたり消したりするためのユーザを作りたい。
というわけで、ftp ユーザにパスワードを設定した。

passwd ftp

駄菓子菓子………

ftp ユーザで FTP にログインすると、ProFTPD の設定が起動してしまって、書き込むことが出来ない
anonymous ユーザが ftp ユーザへのエイリアスとして働いているので、ftp ユーザで直接ログインしたら anonymous ユーザと同じ動きになっちゃうのねぇ~

考える、考える、とにかく考える………
色々と試してみる、どれも失敗………

最終手段として、管理用のアカウントのホームディレクトリを、anonymous FTP 用のホームディレクトリにぶつけることを考えた。
以下のように管理ユーザを作る。

adduser ftpadmin -d /home/ftp -g ftp -G users

んで、パスワードを設定した後、su で変わろうとしたら………
怒られました
bash 関連のファイルに対してアクセス権がないみたい。
仕方ないので、root のまま、

chmod 770 /home/ftp

としてパーミッションを変えて、更にその下のファイルのパーミッションも 770 に変更。
これで ftp ユーザと ftpadmin ユーザが同じホームディレクトリを共有できたので、anonymous FTP でアクセスすると書き込み禁止で、ftpadmin でアクセスすると読み書きできる、という状態になった………

普通逆じゃん!?

だよねぇ~
管理ユーザのディレクトリの下を anonymous FTP が覗かせてもらうっていうのが普通だよねぇ~(汗)
というわけで、方針変更
ftp ユーザと ftpadmin ユーザ、そのホームディレクトリを全削除して、以下の操作を行う。

groupadd ftp
adduser ftproot -g ftp -G users
passwd ftproot
adduser ftp -g ftp -d /home/ftproot -s /sbin/nologin
cd /home
chmod -R 770 ftproot/

んで最後に、

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

で、<Anonymous /home/ftp> を <Anonymous /home/ftproot> に書き換える。
これで、anonymous と ftp ユーザでは匿名アクセス、ftproot ユーザでは通常のアクセスが出来るようになったぞ。

しかし、Windows をメイン環境にして、Linux で WEB サーバを作って anonymous FTP を運用している人って実際にはどういう方法を取っているんだろう?
もっとスマートなやり方があるんだろうけど、経験の浅い俺じゃ思い付かないよぉ~(涙)

Valid HTML 4.01 Strict Valid CSS!