vsFTPdを1.1.3-8から2.0.7にバージョンアップしてみた
未だに古いRedHat Linux 9のサーバーを使ってたりするんですが、vsftpdなんですね、でバージョンが1.1.3-8とかなり古いんですよ、で、問題がちょっとあったんですね。ディレクトリごとの転送とか細かいファイルが沢山あるディレクトリを転送とかするとよく止まるんですね。まーFTPではありがちですが、で、パッシブモードの設定とかちゃんとやってないのでやってみたんですが
[CentOS]FTPサーバーをパッシブモードで使う時の設定 – KUMA TYPE
https://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
- 自分のサーバーsshでにログイン
- とりあえずrootになっておく
$ su –
Password: <rootのパスワード> - 適当なディレクトリに移動
$ cd /usr/local/src
- 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
- ダウンロードできたら解凍しますよと
$ tar -zxvf vsftpd-2.0.7.tar.gz
- するとvsftpd-2.0.7というフォルダができるのでそこに移動
$ cd vsftpd-2.0.7
- とりあえずmakeできるのか試してみる。
なにぶんOSが古いのでコンパイルできるかわからないなのでとりあえずコンパイルできるかどうかmakeしてみる。
$ make
エラー無しでmake出来ました。古いOSでもmakeできるソフトウェアってすばらしい。
- それじゃ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どっか適当にコピーするなどして置いてください。
- 古いvsftpdをアンインストールしちゃうよ
古いvsftpdが既にインストールされている場合はアンインストールしちゃいます。rpmでインストールされている場合です。ソースからインストールしている場合はそのままでOKかな?というかソースから自分でインストールできる人はこの記事見ないと思うし。適当にどうぞ
$ rpm -e vsftpd
apt-get使ってる人は
$ apt-get remove vsftpd
でも大丈夫、どっちでも良いです。できる方で、ちなみにvsftpdがインストールされてるか調べるには
$ rpm -qa|grep vsftpd
とかしてください。
これで、古いvsftpdがアンインストールされます。 - vsftpdが使ユーザを作っておきます。
nobody
ftp
ftpsecureのユーザを作ります。既にあればそのままでなければ作ってください。作り方は下のサイトが参考になります。ftpsecureはサーバーにアカウントのないログインユーザーのアカウントになるようですので別に使う予定がなければ作らなくても大丈夫です。僕も作ってません。nobodyとftpは大抵の場合最初からあると思います。
Stray Penguin – Linux Memo (vsftpd)
http://www.asahi-net.or.jp/~aa4t-nngk/ftpd.html - vsftpdが使うディレクトリを作っておきます。
/usr/share/empty
/var/ftpないと実際にエラーで接続できないので忘れる事はないと思います。
パーミッションは775です。オーナーはrootで - 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の設定ファイルでしょうか。
- 新規インストールならこのあと
$ cp vsftpd.conf /etc/vsftpd/vsftpd.conf
として設定ファイルをコピーします。
現在迄使っていたvsftpd.confと付属のvsftpd.confをdiffしてみたらほぼいっしょだったのでそのまま流用する事にします。
- とりあえず起動してみる?
$ /usr/local/sbin/vsftpd &
でバックグラウンド起動して実際に接続してみるのもいいでしょう。
とりあえずうちでは、下から入っていたものはserviceコマンドで起動や再起動できていました。
$ service vsftpd start とか
$ service vsftpd stop とかです。あとrestartとかreloadとかね出来なくなってました。
今まではスタンドアローンモードで使っていましたが、/etc/xinetd.d/vsftpdがコピーされているという事はxinetdで使えという事でしょうか?というわけでスタンドアローンではなくxinetd経由で使う事にしました。(別にスタンドアローンで使っても問題ないですよ。好みです)
- スタンドアローンをやめて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
- 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の再起動を忘れずに
- 接続はできる様になったけどログインできないよという場合
/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 - これで無事ログインできる様になりました。
エラーも発生しなくなり、ディレクトリを複数含むディレクトリなど沢山のファイルを含むディレクトリを転送しても正常に転送できる様になり快適になりました。
- その他設定しておくと便利な設定
/etc/vsftpd/vsftpd.conf
に追加すると便利な設定。●サブディレクトリやその中身がコピーされない時の対処
ls_recurse_enable=YES
●ファイルが全てバイナリモードで転送されてしまう時の対処
ascii_upload_enable=YES
ascii_download_enable=YES●ファイルのタイムスタンプがずれる時の対処
use_localtime=YES
●.(ドット)ではじまるファイルが見えない時の対処
force_dot_files=YES
- その他使いそうなもの
●パッシブモードを利用するかどうかpasv_enable=YES
●パッシブモードで利用するポートの最小値
pasv_min_port=10100
●パッシブモードで利用するポートの最大値
pasv_max_port=10150
●/etc/vsftpd.user_listに記述されているユーザはアクセスを拒否されるようになる。
userlist_enable=YES
$ service xinetd restart
タグ : Linux