在阿里云专有网络ECS上搭建ftp服务器,并使用mysql虚拟用户

本文档详细介绍了如何在阿里云专有网络ECS上,基于Ubuntu 16.04操作系统,使用ProFTPD和MySQL数据库搭建FTP服务器。教程涵盖了从安装软件、配置ProFTPD、创建用户和数据库,到解决阿里云VPC环境中的hosts错误和被动模式问题的全过程。
摘要由CSDN通过智能技术生成

操作系统:ubuntu 16.04 64位

ftp服务端软件:proftpd

参照这篇文档:http://www.sysadminworld.com/2011/install-proftpd-with-mysql-backend-on-debian-ubuntu/

如果不是在阿里云的VPC环境ECS上的话,应该不会遇到第8和第9两个问题,可以忽略

①安装ProFTPD 和 MySQL support

apt-get install proftpd-basic proftpd-mod-mysql
    这一步骤可能会遇到本地库不够新的问题,使用
apt-get update

    更新仓库,然后再安装即可,安装时我选择的版本是standalone(应该是这个单词)

②配置文件/etc/proftpd/proftpd.conf 

    具体配置含义参考这篇文档:http://wowubuntu.com/proftpd-conf.html

    需要配置的有

    DefaultRoot                     /alidata/ftp_temp_data

    Include /etc/proftpd/sql.conf

    RequireValidShell off

    配置完这三个基本可以使用了,但是还会遇到一些坑,后面我再说明

    在后面修改bug过程中,根据这个配置文件,我还配置了被动模式的相关配置、续传配置等

③配置用户组和用户

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

这个没什么说的,2001是随便写的

④数据库,我用的是阿里云的rds,需要增加白名单,创建新用户,然后创建数据库和数据表

CREATE TABLE ftpgroup (
 groupname varchar(16) NOT NULL default '',
 gid smallint(6) NOT NULL default '2001',
 members varchar(16) NOT NULL default '',
 KEY groupname (groupname)
 ) ENGINE=MyISAM COMMENT='ProFTP group table';
CREATE TABLE ftpuser (
 id int(10) unsigned NOT NULL auto_increment,
 userid varchar(32) NOT NULL default '',
 passwd varchar(32) NOT NULL default '',
 uid smallint(6) NOT NULL default '2001',
 gid smallint(6) NOT NULL default '2001',
 homedir varchar(255) NOT NULL default '',
 shell varchar(16) NOT NULL default '/sbin/nologin',
 count int(11) NOT NULL default '0',
 accessed datetime NOT NULL default '0000-00-00 00:00:00',
 modified datetime NOT NULL default '0000-00-00 00:00:00',
 PRIMARY KEY (id),
 UNIQUE KEY userid (userid)
 ) ENGINE=MyISAM COMMENT='ProFTP user table';    

    然后在数据库中插入一条数据就可以了

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES ('', 'username', ENCRYPT('password'), 2001, 2001, '/alidata/ftp_temp_data', '/sbin/nologin', 0, '', '');

⑤在 /etc/proftpd/modules.conf 配置中导入sql

    直接在默认配置中找到被注释的这两行删除#号就可以了

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

⑥配置 /etc/proftpd/sql.conf

nano /etc/proftpd/sql.conf

    实际上我是用vim命令写的,习惯

<IfModule mod_sql.c>
#
# Choose a SQL backend among MySQL or PostgreSQL.
# Both modules are loaded in default configuration, so you have to specify the backend 
# or comment out the unused module in /etc/proftpd/modules.conf.
# Use 'mysql' or 'postgres' as possible values.
#使用mysql
SQLBackend      mysql
#
SQLEngine on
SQLAuthenticate on
SQLNegativeCache off
#
# Use both a crypted or plaintext password 使用明文密钥
SQLAuthTypes Crypt Plaintext
#
# Use a backend-crypted or a crypted password
#SQLAuthTypes Backend Crypt 
#
# Connection 数据库名称@数据库路径 数据库用户 数据库用户密码
SQLConnectInfo ftp@mydatabase.mysql.rds.aliyuncs.com ftp ftptest
#
# Describes both users/groups tables
#
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
# Update count every time user logs in 用户登录时sql记录加1
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
#sql log文件的位置
SqlLogFile /alidata/log/proftpd/sql.log


#
</IfModule>
 

    这里其实我有一个疑惑,但是我没有仔细查,就是端口问题,因为我测试的时候使用的是默认端口所以可以,如果是别的端口我也不确定应该写在哪

⑦重新启动

/etc/init.d/proftpd restart

这样应该就可以用了,如果报错再根据提示打开错误信息查看修改

⑧hosts错误

我这边因为是阿里云ECS所以会有一个host的错误

可以参考这个文档:https://stackoverflow.com/questions/36434364/ubuntu-proftpd5291-warning-unable-to-determine-ip-address-of


root@iZwz9btpvm57477i08ckvqZ:/etc/proftpd# /etc/init.d/proftpd restart
[....] Restarting proftpd (via systemctl): proftpd.serviceJob for proftpd.service failed because the control process exited with error code. See "systemctl status proftpd.service" and "journalctl -xe" for details.
 failed!
root@iZwz9btpvm57477i08ckvqZ:/etc/proftpd# systemctl status proftpd.service 
● proftpd.service - LSB: Starts ProFTPD daemon
   Loaded: loaded (/etc/init.d/proftpd; bad; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2018-05-09 18:32:27 CST; 36s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 25426 ExecStart=/etc/init.d/proftpd start (code=exited, status=1/FAILURE)

May 09 18:32:27 iZwz9btpvm57477i08ckvqZ systemd[1]: Starting LSB: Starts ProFTPD daemon...
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ proftpd[25426]:  * Starting ftp server proftpd
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ proftpd[25426]: 2018-05-09 18:32:27,227 iZwz9btpvm57477i08ckvqZ proftpd[25436]: warning: unable to determine IP address of 'iZwz9btpvm57477i08ckvqZ'
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ proftpd[25426]: 2018-05-09 18:32:27,227 iZwz9btpvm57477i08ckvqZ proftpd[25436]: error: no valid servers configured
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ proftpd[25426]: 2018-05-09 18:32:27,227 iZwz9btpvm57477i08ckvqZ proftpd[25436]: fatal: error processing configuration file '/etc/proftpd/proftpd.conf'
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ proftpd[25426]:    ...fail!
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ systemd[1]: proftpd.service: Control process exited, code=exited status=1
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ systemd[1]: Failed to start LSB: Starts ProFTPD daemon.
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ systemd[1]: proftpd.service: Unit entered failed state.
May 09 18:32:27 iZwz9btpvm57477i08ckvqZ systemd[1]: proftpd.service: Failed with result 'exit-code'.
root@iZwz9btpvm57477i08ckvqZ:/etc/proftpd# cd ../
root@iZwz9btpvm57477i08ckvqZ:/etc# vim hostname 
root@iZwz9btpvm57477i08ckvqZ:/etc# vim hosts

    这个地方修改hosts内容,将这个主机名映射到127.0.0.1就可以了,然后重启不报错了

⑨被动模式问题

    成功启动后,使用ftp命令或ftp工具连接,我用的是xftp,连接时会弹出“无法显示文件列表”

    一开始以为是文件权限的问题,然后修改权限

chmod 777 /alidata/ftp_temp_data/

    还是不行

    然后再找,发现调为主动模式可以显示,而被动模式不可以。

    被动模式不行的原因网上搜索有大部分都说的是防火墙的问题,然后查看iptables和阿里云的安全组设置,发现端口已经开放了。

    这时候发现原来在经典网络可以,但是在VPC的不行,就想可能是VPC的问题,然后在云栖社区找(发现只有提问题的,没人回答)···

    然后继续谷歌,发现是由于阿里云VPC的ECS无法将自己的外网IP返回。

    文档:http://www.513624.com/archives/1974.html

    然后找到proftpd的绑定被动ip的方法,文档:https://www.oschina.net/question/11_6492

MasqueradeAddress 

    再根据之前的proftpd.conf 说明修改,将公网ip写到配置上,就可以

⑩总结:

    使用proftpd配置ftp服务器并不是很难,根据那个英文文档基本上可以使用

    主要是阿里云VPC的ECS的问题,不仅是在配置ftp服务器有问题,在之前应用中发邮件的也是,直接禁用了SMTP的端口,然后改465端口



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值