实验环境:CentOS 5.5 32位系统
实验目的:学会利用vsftpd架设FTP服务器
[root@redhat ~]# tar zxvf vsftpd-2.0.6.tar.gz (按说明文件来装)
[root@redhat vsftpd-2.0.6]# cd /var/
[root@redhat var]# ls
cache  db     games  local  log         mail  opt       run    tmp
cvs    empty  lib    lock   lost+found  nis   preserve  spool  yp

从这一步开始
[root@redhat var]# mkdir ftp
[root@redhat var]# useradd -d /var/ftp -M ftp
useradd: user ftp exists
[root@redhat var]# chmod og-w /var/ftp
到这一步结束,是匿名用户才用的到

# vi builddefs.h
(编辑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 */
将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL)

5.#make //直接在vsftpd-2.0.6里用make编译

在make时出错如下:
make: *** [sysdeputil.o] Error 1
解决方法:
这几个包可能不是REDHAT的,这个问题的原因是sysdeputil.c 文件出错,真正解决方法是给其打补丁:
# patch sysdeputil.c p_w_upload.bin
# make
p_w_upload.bin 的位置在:
http://linuxfromscratch.org/pipe ... 9f56/p_w_upload.bin
注明: 当前目录为vsftp**/

p_w_upload.bin一定要放在sysdeputil.c同一个目录,而sysdeputil.c刚好是在vsftp-2.0.6目录,所以

这个p_w_upload.bin是要放在vsftp-2.0.6目录下的才行,执行完成功显示如下:
[root@redhat vsftpd-2.0.6]# patch sysdeputil.c p_w_upload.bin
patching file sysdeputil.c
patch unexpectedly ends in middle of line
Hunk #1 succeeded at 155 with fuzz 1.

[root@redhat vsftpd-2.0.6]# make
gcc -c sysdeputil.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o

ftpdataio.o secbuf.o ls.o postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o

banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o

standalone.o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o

sysutil.o sysdeputil.o -Wl,-s `./vsf_findlibs.sh`

[root@redhat 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

[root@redhat etc]# cd /root/vsftpd-2.0.6
[root@redhat vsftpd-2.0.6]# cp vsftp
vsftpd         vsftpd.8       vsftpd.conf    vsftpd.conf.5  vsftpver.h
[root@redhat vsftpd-2.0.6]# cp vsftpd.conf /etc
[root@redhat vsftpd-2.0.6]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd
[root@redhat vsftpd-2.0.6]# userdel ftp
[root@redhat vsftpd-2.0.6]# useradd -d /var/ftp -s /sbin/nologin -M ftp
[root@redhat vsftpd-2.0.6]# useradd -s /sbin/nologin -d /data/wwwroot/ abc.com
[root@redhat vsftpd-2.0.6]# passwd abc.com
Changing password for user abc.com.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully


[root@redhat vsftpd-2.0.6]# /usr/local/sbin/vsftpd &
[1] 17888
[root@redhat vsftpd-2.0.6]# 500 OOPS: vsftpd: not configured for standalone, must be started

from inetd

[1]+  Exit 1                  /usr/local/sbin/vsftpd
启动出错

网上搜索如下:
vsftpd: not configured for standalone, must be started from inetd
因为xinetd已经启动了vsftpd,而你的vsftpd设置成了stardalone模式
如果要用inetd启动,那用如下方面启动:
首先copy你的安装文件里的vsftpd.xinetd到/etc/xinetd.d/下
cp vsftpd.xinetd /etc/xinetd.d/vsftpd
/etc/rc.d/init.d/xinetd restart
用inetd模式启动

如果你想用standalone启动,必须做如下更改
编辑/etc/xinetd.d/vsftpd文件,把disable=no改成YES
编辑/etc/vsftpd.conf文件在顶部加listen=YES
停止xinetd服务,
#service xinetd stop ,
再启动vsftpd:
/usr/local/sbin/vsftpd &

所以我就把/etc/vsftpd.conf里面添加listen=YES

[root@redhat data]# /usr/local/sbin/vsftpd &
standalone启动方式
[root@redhat data]# ps -aux|grep vsftpd
[root@redhat data]#kill -9 ID号

vsftpd.conf里面
pam_service_name=ftp
local_enable=YES
listen=YES
pasv_enable=YES
pasv_max_port=9090
pasv_min_port=9000
ftpd_banner=220 wellpie FTP Server
write_enable=YES
local_umask=022chroot_list_enable=YES
chroot_local_user=NO
chroot_list_file=/etc/vsftpd.chroot_list (这个文件里面有一个用户abc.com,用来限制跳到其他

目录)

如果本地用户只能下载,不能上传或删除的话,请检查这个FTP用户是否拥有这个上传目录的组,如FTP

用户是abc.com,FTP要上传到资料到/data/wwwroot/abc.com,那abc.com这个用户是否有

对/data/wwwroot/abc.com这个目录写入、修改的权限,如果没有,就把abc.com用户添加到那目录

所属的组,如果那目录是属于apache用户和apache组,那把abc.com添加到apache组里面就可以。否是

属于apache的组