公司项目需求:
我们公司是化妆品电子商务公司
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