分类: LINUX
2011-10-27 15:11:15
-----趁这夜深人静的大好机会,偶有来安装vsftpd试试,其间也遇到了些问题,不过最终还是顺利的解决啦,很不错,就把经历写一下,希望能给其他人带来帮助。
一、前言
Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。Vsftpd的实现有三种方式
1、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问
2、本地用户形式:以/etc/passwd中的用户名为认证方式
3、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。
二、获取最新版的Vsftp程序
目前已经到vsftpd-2.0.6版本
(1)解压并编译软件
# tar xzvf vsftpd-2.0.6.tar.gz //解压缩程序
# cd vsftpd-2.0.6
# 开始安装,使用make命令
[root@localhost vsftpd-2.0.6]# make
注意,这一步可能会遇到如下错误,代码:
sysdeputil.c:1129: error: storage class specified for parameter 's_utent'
sysdeputil.c:1134: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
sysdeputil.c:1173: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
sysdeputil.c:1189: error: old-style parameter declarations in prototyped function definition
sysdeputil.c:162: error: parameter name omitted
sysdeputil.c:162: error: parameter name omitted
sysdeputil.c:162: error: parameter name omitted
sysdeputil.c:1189: error: expected '{' at end of input
make: *** [sysdeputil.o] Error 1
个人认为是sysdeputil.c 文件出错, 姑且网上有相应的补丁文件,于是决定下载attachment.bin打补丁:
# patch sysdeputil.c attachment.bin
# ls -l vsftpd
-rwxr-xr-x 1 root root 86088 Jun 6 12:29 vsftpd //可执行程序已被编译成功
偶就是在这遇到了问题,在网上搜了半天,也没找到解决办法,最后好不容易才在一个论坛上给我发现啦,还算不错,呵呵。
(2)安装VSFTPD的配置、执行和帮助文件。
# 进行安装的第二步,执行命令:make install过程如下。
[root@localhost vsftpd-2.0.6]# 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
install: 无法创建一般文件‘/usr/local/man/man8/vsftpd.8’: 没有那个文件或目录
install: 无法创建一般文件‘/usr/local/man/man5/vsftpd.conf.5’: 没有那个文件或目录
make: *** [install] 错误 1
# 由上观之,产生错误,原因大致为man8与man5两个文件没有建立,建立之。
[root@localhost vsftpd-2.0.6]# mkdir /usr/local/man/man8
[root@localhost vsftpd-2.0.6]# mkdir /usr/local/man/man5
呵呵 这里又有个错误,不过这个很好解决吧。
# 再次执行make install命令,详情如下。
[root@localhost vsftpd-2.0.6]# 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
# install成功,查看/etc下是否已经有文件:vsftpd.conf
# 若是没有,从当前工作目录拷贝之。
[root@localhost vsftpd-2.0.6]# ls /etc/ |grep vsftpd.conf
[root@localhost vsftpd-2.0.6]# cp vsftpd.conf /etc/
# 编辑/etc/vsftpd.conf,在最下面加入以下这一行:listen=YES
[root@localhost vsftpd-2.0.6]# vi /etc/vsftpd.conf
# 查看/var/下是否存在ftp文件夹,若没有创建之
[root@localhost vsftpd-2.0.6]# ls /var/|grep ftp
[root@localhost vsftpd-2.0.6]# mkdir /var/ftp
# 为测试方便,在/var/ftp/下创建文件夹pub
[root@localhost vsftpd-2.0.6]# mkdir /var/ftp/pub
# 试在后台运行vsftpd
# 若是不知道命令vsftpd的路径可执行命令:which vsftpd查看。
[root@localhost vsftpd-2.0.6]# /usr/local/sbin/vsftpd &
[1] 3594
# 测试ftp服务
[root@localhost vsftpd-2.0.6]# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.0.6)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
# 登录时用户名为ftp;密码为空。
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
# 使用ls查看命令可以看到pub的详细信息。
ftp> ls
227 Entering Passive Mode (127,0,0,1,250,71)
150 Here comes the directory listing.
drwxrwxrwx 2 0 0 4096 Sep 26 00:05 pub
226 Directory send OK.
# 执行quit命令退出。
ftp> quit
# 注:若要开机自动启动vsFTPd,请在/etc/rc.d/rc.local中加入:/usr/local/sbin/vsftpd &
好啦,简单的安装就完成啦。