本文讲述了在Ubuntu 12.04环境下以源码编译方式安装vsftp 2.3.2的整个过程。更多关于vsftp的文章请参阅《Ubuntu 12.04 中 vsftp 的应用》。
下载vsftp
vsftp的官方网站是http://vsftpd.beasts.org/,现在国内好像访问不了。可以另外通过代理的方式,或者搜索国内的下载地址,例如站长下载。
下载vsftp到/usr/local/src目录:
cd /usr/local/src sudo wget http://zj.down.chinaz.com/201101/vsftpd-2.3.2.tar.gzsudo tar zxvf vsftpd-2.3.2.tar.gz
将下载的文件解压缩,解压缩后的目录为/usr/local/src/vsftpd-2.3.2。
sudo tar zxvf vsftpd-2.3.2.tar.gz cd vsftpd-2.3.2
配置builddefs.h
vsftp使用builddefs.h处理编译时的配置信息,该文件默认的内容如下:
#ifndef VSF_BUILDDEFS_H #define VSF_BUILDDEFS_H #undef VSF_BUILD_TCPWRAPPERS #define VSF_BUILD_PAM #undef VSF_BUILD_SSL #endif /* VSF_BUILDDEFS_H */
默认的builddefs.h只开启了pam,tcp_wrappers和ssh是关闭的。我们可以根据自己的需要进行调整这些配置。
编译vsftp
vsftp使用vsf_findlibs.sh脚本来查找相关的库文件。但是,由于我的Ubuntu是64位版本,库文件的位置与vsf_findlibs.sh脚本定义的位置不同,需要修改vsf_findlibs.sh脚本。
查看自己电脑的硬件架构:
$ uname -m x86-64
如果输出x86_64,说明是64位平台。
vsftp使用了libpam.so库,我们可以使用locate命令快速地定位到Ubuntu当前的库文件存放位置:
$ locate libpam /lib/x86_64-linux-gnu/libpam.so.0 /lib/x86_64-linux-gnu/libpam.so.0.83.0 /lib/x86_64-linux-gnu/libpam_misc.so.0 /lib/x86_64-linux-gnu/libpam_misc.so.0.82.0 /lib/x86_64-linux-gnu/libpamc.so.0 /lib/x86_64-linux-gnu/libpamc.so.0.82.1 ... ...
由此可知,Ubuntu将库文件位置移到了/lib/x86_64-linux-gnu目录。
先备份vsf_findlibs.sh,然后用vi编辑器将其打开,简单的用下面的命令将原来的/lib目录替换为新的/lib/x86_64-linux-gnu目录:
:%s?/lib/?/lib/x86_64-linux-gnu/?
现在我们可以执行make命令编译vsftp了:
make
编译完成后检查是否成功:
$ ls -l vsftpd -rwxrwxr-x 1 amonest amonest 124088 6月 21 09:31 vsftpd
vsftp的先决条件
vsftp默认配置需要"nobody"帐户,用下面的命令确认该帐户是否存在:
$ useradd nobody useradd: user 'nobody' already exists
vsftp默认配置需要空目录"/usr/share/empty",用下面的命令确认该目录是否存在:
sudo mkdir /usr/share/empty
对于匿名FTP,vsftp需要一个"ftp"的帐户和一个有效的home目录。
sudo mkdir /var/ftp sudo useradd -d /var/ftp ftp
注意:创建的/var/ftp目录默认所有者为root,不要将所有者修改为ftp,否则后面在客户端用ftp帐户连接时会提示“refusing to run with writable anonymous root”错误。
创建"ftp"的帐户后,应该再使用passwd命令修改它的密码:
sudo passwd ftp
安装vsftp
执行命令make install安装vsftp:
sudo make install
安装过程中处理的内容定义在Makefile文件:
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
如果安装时提示man目录找不到,可以手工创建这些目录:
sudo mkdir /usr/local/man/man5 sudo mkdir /usr/local/man/man8
安装过程没有复制默认配置文件,建议这样处理:
sudo cp vsftpd.conf /etc
测试vsftp
vsftp可以运行在独立模式(standalone) ,也可以运行在inetd模式(inetd或xinetd)。以inetd模式运行vsftp,可以有更多的控制权,例如流量和连接数等。我们这里简单的以独立模式运行vsftp测试安装是否成功。
编辑/etc/vsftpd.conf,确保listen选项是开启的:
listen=YES
这实际上就是告诉vsftp,当前以独立模式运行。
启动vsftp:
sudo /usr/local/sbin/vsftpd &
连接vsftp,测试是否正常运行:
$ ftp localhost Connected to localhost. 220 (vsFTPd 2.3.2) Name (localhost:amonest): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 1361 Jun 21 03:03 README -rw-r--r-- 1 0 0 112 Jun 21 03:03 README.security -rw-r--r-- 1 0 0 2115 Jun 21 03:03 README.ssl -rw-r--r-- 1 0 0 125 Jun 21 03:03 REWARD 226 Directory send OK. ftp>
最后上一张FlashFXP连接vsftp的图:
来源:https://www.cnblogs.com/eastson/archive/2012/06/21/2556461.html