首先解压缩:tar -zxfv vsftpd-2.0.5.tar.gz
编译前请打开:builddefs.h
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
这里#define VSF_BUILD_PAM指定了要vsftpd支持pam,所以不要改成#undef VSF_BUILD_PAM
并将所有undef 改为define
检查完builddefs.h后,make编译,用ldd命令检查生成的vsftpd文件有没有加载/lib/libpam.so.0
# ldd vsftpd
引用:
libwrap.so.0 => /usr/lib/libwrap.so.0 (0x 003f 4000)
libnsl.so.1 => /lib/libnsl.so.1 (0x 003a 4000)
libpam.so.0 => /lib/libpam.so.0 (0x 00c 38000)
libdl.so.2 => /lib/libdl.so.2 (0x 00ac 6000)
libresolv.so.2 => /lib/libresolv.so.2 (0x 00c 14000)
libutil.so.1 => /lib/libutil.so.1 (0x00479000)
libcap.so.1 => /lib/libcap.so.1 (0x00af1000)
libssl.so.4 => /lib/libssl.so.4 (0x0036e000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0x 0022f 000)
libc.so.6 => /lib/tls/libc.so.6 (0x 0099a 000)
libaudit.so.0 => /lib/libaudit.so.0 (0x 00c 29000)
/lib/ld-linux.so.2 (0x00981000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x 0031a 000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00123000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x0011e000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00207000)
libz.so.1 => /usr/lib/libz.so.1 (0x00bce000)
如果没有libpam.so.0 那么需要安装pam-devel包:
然后重新编译vsftpd :
make clean
make
1. 编译成功后将以下文件复制到指定位置:
cp vsftpd /usr/local/sbin/vsftpd #这个是vsftpd执行文件,放在哪里无所谓,复制不复制都可以
cp vsftpd.conf.5 /usr/local/share/man/man5
cp vsftpd.8 /usr/local/share/man/man8
cp vsftpd.conf /etc/vsftpd/ #vsftpd主配置文件
cp RedHat/vsftpd.pam /etc/pam.d/ftp #PAM验证文件,以允许本地用户登录VSFTPD
2. 添加一个系统用户作为FTP虚拟用户,在MYSQL中设置虚拟用户账号和密码
# useradd vsftpdguest
# chown /var/FTP vsftpdguest.vsftpdguest
# chmod 700 /var/FTP
为确保安全 修改 /etc/passwd文件,将其中vsftpdguest对应的条目改为:
vsftpdguest:x:511:511::/var/FTP:/sbin/nologin
使vsftpdguest账号只能作为FTP用户,而不能作为一个系统用户登陆。
下面创建用于登陆验证的mysql数据库:
mysql>create database vsftpdvu;
mysql>use vsftpdvu;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>insert into users (name,passwd) values ('xiaotong',password('qqmywife'));
mysql>insert into users (name,passwd) values ('xiaowang',password('ttmywife'));
mysql> grant select on vsftpdvu.users to vsftpdguest@localhost
mysql> set password for sftpdguest@localhost =password('123456 ')
mysql>quit
3. 配置pam_mysql
编辑/etc/pam.d/ftp文件:
内容修改如下:
auth required /lib/security/pam_mysql.so user=vsftpdguest passwd=123456 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
account required /lib/security/pam_mysql.so user=vsftpdguest passwd=123456 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
以上粗体部分意义依次如下:pam_mysql安全严整模块包的位置,mysql数据库用户名,密码,数据库服务器地址,数据库名,虚拟用户表,虚拟用户名称列,虚拟用户密码列,加密方式:0为明码,1为操作系统RAS加密,2为MYSQL password方法加密
4. 配置vsftpd.conf
anonymous_enable=NO #禁止匿名
local_enable=YES #允许本地登录
write_enable=YES #允许写,如需上传,则必须
local_umask=027 #将上传文件的权限设置为:777-local_umask
anon_upload_enable=YES #允许虚拟用户和匿名用户 上传
anon_other_write_enable=YES #允许虚拟用户和匿名用户修改文件名和删除文件
dirmessage_enable=YES
xferlog_enable=YES #打开日志记录
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log #日志存放位置
xferlog_std_format=YES #标准日志格式
idle_session_timeout=600 #空闲连接超时
data_connection_timeout=120
ftpd_banner=Welcome to ChinaRise FTP service #欢迎信息
guest_enable=yes #允许虚拟用户
guest_username=vsftpdguest #虚拟用户使用的系统账号
virtual_use_local_privs=YES #虚拟用户拥有本地系统权限
chroot_local_user=NO
chroot_list_enable=YES
#以下两行将虚拟用户限制在其目录下,不能访问其他目录,或者直接用
chroot_local_user=YES
listen=yes #监听/被动模式
listen_port=21 #监听端口
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #虚拟用户名单保存在文件/etc/vsftpd/vsftpd.chroot_list 中
user_config_dir=/etc/vsftpd/vsftpd_user_conf #每个虚拟用户名的更加详细的培植保存在/etc/vsftpd/vsftpd_user_conf 中
5. 虚拟用户其他设置
在 /etc/vsftpd/vsftpd.chroot_list 文件中写入允许登陆的虚拟用户名称,每行一个
在/etc/vsftpd/vsftpd_user_conf 文件夹中创建一个以虚拟用户用户名命名的文件,
写入:local_root = /var/FTP/子目录名
然后在/var/FTP下创建一个对应的目录即可
6. 安装完成后出现两个问题:
1: 500 OOPS: vsftpd: both local and anonymous access disabled!
通过在vsftpd.conf中将local_enable=YES解决
2 : [右] 500 OOPS: cannot locate user entry:ftpsecure
[右] 500 OOPS: child died
3. 可以上传空文件夹,可以下载,但是不能上传文件
这是因为公司硬件防火墙设置导致的,将ftp上传的流拦截掉了,所以导致传输错误.