vsFTPdを1.1.3-8から2.0.7にバージョンアップしてみた

未だに古いRedHat Linux 9のサーバーを使ってたりするんですが、vsftpdなんですね、でバージョンが1.1.3-8とかなり古いんですよ、で、問題がちょっとあったんですね。ディレクトリごとの転送とか細かいファイルが沢山あるディレクトリを転送とかするとよく止まるんですね。まーFTPではありがちですが、で、パッシブモードの設定とかちゃんとやってないのでやってみたんですが

[CentOS]FTPサーバーをパッシブモードで使う時の設定 – KUMA TYPE
http://blog.kumacchi.com/2008/10/centosftp.html

全然ダメというか症状が悪化しちゃったわけです。

500 OOPS: vsf_sysutil_bind

っていうエラーが頻繁に起きるわけです。これは困ったなーというわけで、検索してみると

viki – vsftpd Wiki – FAQ[en]
http://viki.brainsware.org/?en/FAQ#toc_36

どうも、新しいバージョンを試せという事みたいなので、現状のvsftpdの設定で回避できる問題ではなさそうです。

できればバージョンアップしたいのですが、最新バージョンがRedHat9でコンパイルできるかどうかもわからないわけですね。

しかも現在のバージョンは多分apt-getかプリインストールのものだと思われるわけでアンインストールして本当に変なことにならないか怖いんですよねLinuxって、でもこのままだとちょー困るのでしょうがないのでやってみました。

そういうわけでvsFTPdの現在の最新版2.0.7をRedHat 9 に入れてみたのでメモっておきたいと思います。

参考にさせていただいたのが下記のページ

vsftpd – Linux Wiki
http://oku.edu.mie-u.ac.jp/~okumura/linux/?vsftpd

 

  1. 自分のサーバーsshでにログイン
  2. とりあえずrootになっておく

    $ su –
    Password: <rootのパスワード>

  3. 適当なディレクトリに移動

    $ cd /usr/local/src

  4. vsftpdのサイトから最新版のソースをダウンロード
    vsftpd – Secure, fast FTP server for UNIX-like systems
    http://vsftpd.beasts.org/

    $ wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.7.tar.gz

  5. ダウンロードできたら解凍しますよと

    $ tar -zxvf vsftpd-2.0.7.tar.gz

  6. するとvsftpd-2.0.7というフォルダができるのでそこに移動

    $ cd vsftpd-2.0.7

  7. とりあえずmakeできるのか試してみる。
    なにぶんOSが古いのでコンパイルできるかわからないなのでとりあえずコンパイルできるかどうかmakeしてみる。

    $ make

    エラー無しでmake出来ました。古いOSでもmakeできるソフトウェアってすばらしい。

  8. それじゃmakeもできたのでたぶん大丈夫だろうとふんで前準備しちゃいます。

    既に、古いvsftpdが入ってる場合、設定ファイルなどを保存しておいた方が良いです。よくわかりませんが古いvsftpdをアンインストールした時に設定ファイルなどが一緒に消えちゃう場合があります。保存しておいて使えるものはそのまま使いたいですからね。

    ●念のため保存しておくと幸せになれるかもしれないファイル達

    /etc/vsftpd.ftpusers
    /etc/vsftpd.user_list
    /etc/xinetd.d/vsftpd(xinetdで使っていた場合)
    /etc/rc.d/init.d/vsftpd 
    /etc/pam.d/vsfptd(pam認証を使っていた場合)
    /etc/vsftpd/vsftpd.conf

    どっか適当にコピーするなどして置いてください。

  9. 古いvsftpdをアンインストールしちゃうよ
    古いvsftpdが既にインストールされている場合はアンインストールしちゃいます。rpmでインストールされている場合です。ソースからインストールしている場合はそのままでOKかな?というかソースから自分でインストールできる人はこの記事見ないと思うし。適当にどうぞ

    $ rpm -e vsftpd

    apt-get使ってる人は

    $ apt-get remove vsftpd

    でも大丈夫、どっちでも良いです。できる方で、ちなみにvsftpdがインストールされてるか調べるには

    $ rpm -qa|grep vsftpd

    とかしてください。
    これで、古いvsftpdがアンインストールされます。

  10. vsftpdが使ユーザを作っておきます。

    nobody
    ftp
    ftpsecure

    のユーザを作ります。既にあればそのままでなければ作ってください。作り方は下のサイトが参考になります。ftpsecureはサーバーにアカウントのないログインユーザーのアカウントになるようですので別に使う予定がなければ作らなくても大丈夫です。僕も作ってません。nobodyとftpは大抵の場合最初からあると思います。

    Stray Penguin – Linux Memo (vsftpd)
    http://www.asahi-net.or.jp/~aa4t-nngk/ftpd.html

  11. vsftpdが使うディレクトリを作っておきます。

    /usr/share/empty
    /var/ftp

    ないと実際にエラーで接続できないので忘れる事はないと思います。
    パーミッションは775です。オーナーはrootで

  12. vsftpdをインストール
    make install コマンドでインストールします。

    # make install
    if [ -x /usr/local/sbin ]; then \
            install -m 755 vsftpd /usr/local/sbin/vsftpd; \
    else \
            install -m 755 vsftpd /usr/sbin/vsftpd; fi
    if [ -x /usr/local/man ]; then \
            install -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \
            install -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \
    elif [ -x /usr/share/man ]; then \
            install -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \
            install -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \
    else \
            install -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \
            install -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi
    if [ -x /etc/xinetd.d ]; then \
            install -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
    #

    インストールされると上の様な実行結果になります。なんか色々コピーしてますね。上で重要そうなので実際の実行ファイルのインストールパスとxinetdの設定ファイルでしょうか。

  13. 新規インストールならこのあと

    $ cp vsftpd.conf /etc/vsftpd/vsftpd.conf

    として設定ファイルをコピーします。

    現在迄使っていたvsftpd.confと付属のvsftpd.confをdiffしてみたらほぼいっしょだったのでそのまま流用する事にします。

  14. とりあえず起動してみる?

    $ /usr/local/sbin/vsftpd &

    でバックグラウンド起動して実際に接続してみるのもいいでしょう。

    とりあえずうちでは、下から入っていたものはserviceコマンドで起動や再起動できていました。

    $ service vsftpd start とか
    $ service vsftpd stop とかです。あとrestartとかreloadとかね

    出来なくなってました。

    今まではスタンドアローンモードで使っていましたが、/etc/xinetd.d/vsftpdがコピーされているという事はxinetdで使えという事でしょうか?というわけでスタンドアローンではなくxinetd経由で使う事にしました。(別にスタンドアローンで使っても問題ないですよ。好みです)

  15. スタンドアローンをやめてxinetd経由にするのでvsftpd.confの設定を変更。

    必要ない行を#でコメントアウト

    #listen=YES
    #tcp_wrappers=YES

    上記二行を上記のようにコメントアウト

    tcp_wrappersはxinetd経由で利用する場合は必要ありません。残っていると

    500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in

    というエラーがでて接続できません。xinetdがtcp wappersの設定も兼ねるのかな?確か?間違ってたら識者の方ご指摘お願いします。

    xinetd経由で利用する場合は下のコマンドで一度xinetdを再起動してください。/etc/xinetd.d/の中のファイルをいじった場合も同様です。

    $ service xinetd restart

  16. xinetdの設定

    ここまでやって接続を試してみたダメなら、まずxinetdの設定を行なってみてください。

    場所は
    /etc/xinetd.d/vsftpd

    下を参考にして下さい。

    # default: on
    # description:
    #   The vsftpd FTP server serves FTP connections. It uses
    #   normal, unencrypted usernames and passwords for authentication.
    # vsftpd is designed to be secure.
    service ftp
    {
            socket_type             = stream
            wait                    = no
            user                    = root
            server                  = /usr/local/sbin/vsftpd
            server_args             = /etc/vsftpd/vsftpd.conf
            log_on_success          += DURATION USERID
            log_on_failure          += USERID
            nice                    = 10
            disable                 = no

    xinetdの再起動を忘れずに

  17. $ service xinetd restart

  18. 接続はできる様になったけどログインできないよという場合

    /etc/vsftpd.ftpusers
    /etc/vsftpd.user_list

    があるか存在しているかチェックして下さい。

    /etc/vsftpd/vsftpd.confに下の行がある場合(pam認証を利用している場合)は

    pam_service_name=vsftpd

    /etc/pam.d/vsfptd

    も存在しているかチェックして下さい。

    なければ、保存しているものがある場合はそれをコピー

    ない場合は、新たに作ります。

    vsftpdのソースの中にもサンプルがあるのでそれを参考にしてコピーするか

    # find ./ -name ‘vsftpd*’ -print
    ./vsftpd.conf
    ./vsftpd.8
    ./EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf
    ./EXAMPLE/VIRTUAL_USERS/vsftpd.conf
    ./EXAMPLE/VIRTUAL_USERS/vsftpd.pam
    ./EXAMPLE/INTERNET_SITE/vsftpd.conf
    ./EXAMPLE/INTERNET_SITE/vsftpd.xinetd
    ./RedHat/vsftpd.pam
    ./RedHat/vsftpd.log
    ./xinetd.d/vsftpd
    ./vsftpd.conf.5
    ./vsftpd

    下記のサイトを参考にさせて頂いてください。

    ◇ローカルユーザー接続の設定(WBEL3,CentOS3,WBEL4,CentOS4)◇初心者のためのLinuxサーバー構築講座☆お便利.com☆
    http://www.obenri.com/_ftpserver/local_user.html

    僕は以下のようにしています。

    /etc/vsftpd.ftpusers

    # Users that are not allowed to login via ftp
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody

    /etc/vsftpd.user_list

    # vsftpd userlist
    # If userlist_deny=NO, only allow users in this file
    # If userlist_deny=YES (default), never allow users in this file, and
    # do not even prompt for a password.
    # Note that the default vsftpd pam config also checks /etc/vsftpd.ftpusers
    # for users that are denied.
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody 

    /etc/pam.d/vsftpdはサンプルをそのままコピペで問題ないはずですが、うちでは下記の様にして動いています。一応動いていますがちょっと古い設定なので最新のソース付属のサンプルの方がいいと思います。

    #%PAM-1.0
    auth       required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
    auth       required pam_stack.so service=system-auth
    auth       required pam_shells.so
    account    required pam_stack.so service=system-auth
    session    required pam_stack.so service=system-auth

  19. これで無事ログインできる様になりました。

    エラーも発生しなくなり、ディレクトリを複数含むディレクトリなど沢山のファイルを含むディレクトリを転送しても正常に転送できる様になり快適になりました。

  20. その他設定しておくと便利な設定
    /etc/vsftpd/vsftpd.conf
    に追加すると便利な設定。

    ●サブディレクトリやその中身がコピーされない時の対処

    ls_recurse_enable=YES

    ●ファイルが全てバイナリモードで転送されてしまう時の対処

    ascii_upload_enable=YES
    ascii_download_enable=YES

    ●ファイルのタイムスタンプがずれる時の対処

    use_localtime=YES

    ●.(ドット)ではじまるファイルが見えない時の対処

    force_dot_files=YES

  21. その他使いそうなもの
    ●パッシブモードを利用するかどうか

    pasv_enable=YES

    ●パッシブモードで利用するポートの最小値

    pasv_min_port=10100

    ●パッシブモードで利用するポートの最大値

    pasv_max_port=10150

    ●/etc/vsftpd.user_listに記述されているユーザはアクセスを拒否されるようになる。

    userlist_enable=YES

タグ :