首页 > 代码库 > vsftpd+pam_mysql 虚拟用户配置

vsftpd+pam_mysql 虚拟用户配置

公司项目需求:

我们公司是化妆品电子商务公司

1.搭建一台ftp服务器用于上传包裹快递面单图片,实现基本的上传下载功能

2.vsftpd通过虚拟用户登录,可以外网访问

3.限制虚拟用户登录ip

4.虚拟用户相关配置文件可以界面操作添加、修改等,而且要及时更新


下面主要是1、2两步实现步骤及注意事项

3、4两步在另一篇博客里有详细的说明及代码(vsftpd+pam_mysql+shell)


安装pam_mysql  (请一定要安装,下面安装vsftpd错误3给出了解释)这里没有给出mysql的安装

cd pam_mysql-0.7RC1

./configure --with-mysql=/home/mysql/app/mysql5/

make && make install

安装报错:

1.PAM unable to dlopen(/lib/security/pam_mysql.so): libmysqlclient.so.18: cannot open shared object file: Permission denied

cp mysql_dir/lib/libmysqlclient.so.18 /usr/lib64/   这里一定要注意,创建软连不行,必须复制,该文件权限必须为mysql执行用户权限。否则登录不了,而且不会报什么错


安装vsftpd

注:

centos 32位直接yum安装即可

centos64位需要编译安装,如果yum安装会报错:libgcc_s.so.1 must be installed for pthread_cancel to work


tar zxvf vsftpd.3-2

vim defs.h    

修改下面的行 ,解决上面的问题(libgcc_s.so)

#define VSFTP_AS_LIMIT   100UL * 1024 * 1024

#define VSFTP_AS_LIMIT   400UL * 1024 * 1024   


vim builddefs.h     

修改下面的行,在配置vsftpd时需要使用的模式tcpwrappers,如果没有配置,会报错:

500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in

#unfin VSF_BUILD_TCPWRAPPERS   

#define VSF_BUILD_TCPWRAPPERS


more INSTALL   查看安装事项,这些一般情况下都已经好了,这里只是提一下

make && make install


安装过程中出现的一些错误:

1.tcpwrap.c:16:20: 错误:tcpd.h:没有那个文件或目录

yum install -y tcp_wrappers tcp_wrappers-devel

2./usr/bin/ld: cannot find -lcap 

yum -y install libcap libcap-devel  (LCAP 是一种实现链路动态汇聚的协议  主动模式、被动模式

3.530 Login incorrect vsftpd+pam_mysql配置一切正常但是就是无法登录,开始一直不知到

   哪里出了问题,后来仔细检查了一下vsftpd的依赖关系,才知道pam_mysql依赖关系没有(ldd /usr/local/sbin/vsftpd)

  安装vsftpd之前,安装pam_mysql


配置vsftpd

cp vsftpd.conf /etc/   配置文件一定要放在/etc下

cp RedHat/vsftpd.pam /etc/pam.d/vsftpd


下面是正在使用的线上ftp服务配置模板(参数的意思就不列出了)

vim vsftpd.conf

anonymous_enable=YES
no_anon_password=YES
ftp_username=ftp
anon_root=/var/ftp
anon_upload_enable=NO
anon_world_readable_only=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_max_rate=0
#chown_uploads=YES/NO
#chown_username=username
#anon_umask=077
#deny_email_enable=YES/NO
#banned_email_file=/etc/vsftpd/banner_emails
#[local]
#login name:local user, login passwd:local passwd, ftp dir:local path, exclude user in:/etc/vsftpd.ftpusers
isolate_network=NO
local_enable=YES
local_root=/home/virtual
local_umask=077
file_open_mode=0755
local_max_rate=0
#chroot_list_enable=YES,chroot_local_user=YES:vsftpd.chroot_list is allow
#chroot_list_enable=YES,chroot_local_user=NO:vsftpd.chroot_list is deny
#chroot_list_enable=NO,chroot_local_user=YES:all deny
#chroot_list_enable=NO,chroot_local_user=NO:all allow
chroot_list_enable=NO
#chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=NO
allow_writeable_chroot=YES
#[welcome message]
#message type:file or string
#dirmessage_enable=YES
#message_file=.message
#banner_file=/etc/vsftpd/banner
ftpd_banner=Welcome to test‘s FTP server
#[other]
text_userdb_names=NO
ls_recurse_enable=NO
hide_ids=NO
download_enable=YES
#[globle]
#all config is about this globle config
write_enable=NO
#[transfer mode]
#image or exec file:BINARY,CGI file or HTML file:ASCII
#ascii_upload_enable=NO
#ascii_download_enable=NO
#[access control]
#type:host control(hosts.allow) ,user control  ftpusers level is gt vsftpd.user_list
tcp_wrappers=YES
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=YES
#[timeout]
accept_timeout=60
connect_timeout=60
data_connection_timeout=120
idle_session_timeout=300
#[logfile]
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO
log_ftp_protocol=YES
#[ftp work type and work port]
#work type:PORT FTP and PASV FTP
listen_port=22
#connect_from_port_20=YES
#ftp_data_port=20
#pasv_addr_resolve=
#pasv_address=
#pasv_promiscuous=
pasv_enable=YES
pasv_max_port=53001
pasv_min_port=52999
#[connect]
listen=YES
max_clients=100
max_per_ip=10
use_localtime=YES
#listen_address=IP
#setproctitle_enable=NO
#[pam user]       
guest_enable=YES
pam_service_name=vsftpd
guest_username=virtual
virtual_use_local_privs=NO
user_config_dir=/etc/vsftpd/userconf

注:

1.refusing to run with writable root inside chroot()

allow_writeable_chroot=YES  加上这一句


创建虚拟宿主用户:virtual  dir:/home/virtual/

创建虚拟用户test

用户配置文件:/etc/vsftpd/vuser_conf/test

关于用户配置文件,有很多参数都是可以设置的,这些功能可以在加强

local_root=/home/virtual/test
write_enable=YES
anon_upload_enable=YES
anon_world_readable_only=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
cmds_allowed=PASV,TYPE,LIST,CWD,PWD,SIZE,CDUP,TYPE,MKD,MDTM,NLST,PASS,QUIT,USER,REIN,RETR,STOR,RNTO,APPE,RNFR,DELE,RMD

注:

1.226 Transfer done (but failed to open directory)

test 用户目录权限设置必须为7XX  第一个必须是7 (所有权限)   chmod 700 test


配置pam_mysql

vim /etc/pam.d/vsftpd   

补齐相关参数即可,pam_msyql 安装包也有相关说明文件

auth required /lib/security/pam_mysql.so user= passwd= host= db= table= usercolumn= passwdcolumn= crypt=0
account required /lib/security/pam_mysql.so user= passwd= host= db= table= usercolumn= passwdcolumn= crypt=0


关于外网访问:

外网访问ftp时,有一点非常要注意,通过被动模式访问,外网映射的数据传输端口必须是连续的,否则客户端无法建立链接,我在链接时碰到过下面的错误:

Using host address  instead of the one suggested by the server: 


vsftpd +ssl 加密传输

目前尚未配置,因为当时觉得申请证书特别麻烦

本文出自 “小白” 博客,请务必保留此出处http://wjp13671142513.blog.51cto.com/9141365/1536673