每日看点!CentOS怎么升级Proftpd?CentOS升级Proftpd教程
有一些很古老的教程,一般都是走编译安装路线的,本文是教你不需要编译,而且随时都可以跟随 CentOS 升级 Proftpd 到最新版本,以避免可能的漏洞攻击。利用 Proftpd 现成的配置以及设置好的各种模块,可以实现 sftp 和 ssh 的结合,完美的实现虚拟用户加密密码存放于数据库。
1. 安装:
Proftpd 支持多种后端的数据库存储,在 CentOS7 上, 相关的软件包有:
(资料图)
proftpd-devel.x86_64 : ProFTPD – Tools and header files for developers
proftpd-ldap.x86_64 : Module to add LDAP support to the ProFTPD FTP server
proftpd-mysql.x86_64 : Module to add MySQL support to the ProFTPD FTP server
proftpd-postgresql.x86_64 : Module to add PostgreSQL support to the ProFTPD FTP server
proftpd-sqlite.x86_64 : Module to add SQLite support to the ProFTPD FTP server
proftpd-utils.x86_64 : ProFTPD – Additional utilities
proftpd.x86_64 : Flexible, stable and highly-configurable FTP server
我们只需要安装
proftpd-mysql-1.3.5e-4.el7.x86_64
proftpd-1.3.5e-4.el7.x86_64
可以选择安装: proftpd-utils-1.3.5e-4.el7.x86_64
至于想了解包里面的所有文件, 可以用 # rpm -ql proftpd 这样的命令来查看。
2. 设置自动启动:
# systemctl enable proftpd
# systemctl start proftpd
查看状态:
# systemctl status proftpd
3. 配置:
添加 ftp 用户和组:
# groupadd -g 2001 ftpgroup
# useradd -u 2001 -g 2001 ftpuser
查看基本模块: # proftpd -l
查看所有加载的模块: # proftpd -vv
如果结果里没有看到 mod_sql_mysql,就对了, 那是因为我们还没有把模块加载。
查看配置文件的路径: # proftpd -V , 可以看到 “Configuration File”指向 /etc/proftpd.conf
以下是我配置的一些核心的设置,其他没有包含在里面的,可以保留原来系统的配置。
LogFormat awstats “%t %h %u %m %f %s %b”
ExtendedLog /var/log/proftpd/transfer.log read,write awstats
TransferLog /var/log/proftpd/transfer.log
ServerLog /var/log/proftpd/server.log
ServerName “ProFTPD server”
ServerIdent on “FTP Server ready.”
ServerAdmin ftpadmin@freelamp.com
DefaultServer on
DefaultRoot ~ !adm
UseReverseDNS off
User ftpuser
Group ftpgroup
MaxInstances 20
UseSendfile off
LogFormat default “%h %l %u %t \”%r\” %s %b”
LogFormat auth “%v [%P] %h %t \”%r\” %s”
LoadModule mod_sql.c
LoadModule mod_sql_passwd.c
LoadModule mod_sql_mysql.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_sql.c
LoadModule mod_ctrls_admin.c
LoadModule mod_deflate.c
LoadModule mod_sftp.c
LoadModule mod_sftp_sql.c
LoadModule mod_vroot.c
VRootEngine on
# 设置正确的时区,保证日志文件里的时间是当前时区。
SetEnv TZ “Asia/Shanghai”
Umask 022
# Allow users to overwrite files and change permissions
AllowOverwrite yes
AllowAll
ExtendedLog /var/log/proftpd/access.log WRITE,READ default
ExtendedLog /var/log/proftpd/auth.log AUTH auth
# MySQL 相关的配置:
SQLBackend mysql
SQLEngine on
SQLAuthenticate on
SQLLogFile /var/log/proftpd/sql.log
# 这个 AuthTypes 网上的很多教程都是不对的。
SQLAuthTypes OpenSSL
SQLAuthenticate users* groups*
SQLConnectInfo MySQLUser@localhost MySQLDBName MySQLPassword
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLMinUserGID 2001
SQLMinUserUID 2001
# SQLHomedirOnDemand on
# Update count every time user logs in
SQLLog PASS updatecount
# SQLLog PASS counter
SQLNamedQuery updatecount UPDATE “count=count+1, accessed=now() WHERE userid=’%u"” ftpuser
# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE “modified=now() WHERE userid=’%u"” ftpuser
# User quotas
# ===========
#打开磁盘限额引擎
QuotaEngine on
#设置磁盘限额
QuotaDirectoryTally on
#设置测盘容量显示时的单位
QuotaDisplayUnits Mb
#允许显示磁盘限额信息,ftp登陆后可执行 quote site quota 命令察看当前磁盘使用情#况
QuotaShowQuotas on
#设置磁盘限额日志文件
QuotaLog “/var/log/proftpd/quota.log”
SQLNamedQuery get-quota-limit SELECT “name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = ‘%{0}’ AND quota_type = ‘%{1}"”
SQLNamedQuery get-quota-tally SELECT “name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = ‘%{0}’ AND quota_type = ‘%{1}"”
SQLNamedQuery update-quota-tally UPDATE “bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = ‘%{6}’ AND quota_type = ‘%{7}"” ftpquotatallies
SQLNamedQuery insert-quota-tally INSERT “%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}” ftpquotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
# ===========
RootLogin off
RequireValidShell off
# =============== 配置 结束 ===============
4. MySQL 数据库部分,可以直接保存成 sql 文件,用 mysql 数据库名 < sql文件 来导入表结构和示例用户数据。
## 数据库部分
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=InnoDB DEFAULT CHARSET=latin1 COMMENT=’ProFTP group table’;
INSERT INTO `ftpgroup` VALUES (‘ftpgroup’,2001,’ftpuser’);
CREATE TABLE `ftpquotalimits` (
`name` varchar(30) DEFAULT NULL,
`quota_type` enum(‘user’,’group’,’class’,’all’) NOT NULL DEFAULT ‘user’,
`per_session` enum(‘false’,’true’) NOT NULL DEFAULT ‘false’,
`limit_type` enum(‘soft’,’hard’) NOT NULL DEFAULT ‘soft’,
`bytes_in_avail` int(10) unsigned NOT NULL DEFAULT ‘0’,
`bytes_out_avail` int(10) unsigned NOT NULL DEFAULT ‘0’,
`bytes_xfer_avail` int(10) unsigned NOT NULL DEFAULT ‘0’,
`files_in_avail` int(10) unsigned NOT NULL DEFAULT ‘0’,
`files_out_avail` int(10) unsigned NOT NULL DEFAULT ‘0’,
`files_xfer_avail` int(10) unsigned NOT NULL DEFAULT ‘0’
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `ftpquotalimits` VALUES (‘exampleuser’,’user’,’true’,’hard’,15728640,0,0,0,0,0),(‘demo’,’user’,’false’,’soft’,104857600,0,0,0,0,0);
CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL DEFAULT ”,
`quota_type` enum(‘user’,’group’,’class’,’all’) NOT NULL DEFAULT ‘user’,
`bytes_in_used` int(10) unsigned NOT NULL DEFAULT ‘0’,
`bytes_out_used` int(10) unsigned NOT NULL DEFAULT ‘0’,
`bytes_xfer_used` int(10) unsigned NOT NULL DEFAULT ‘0’,
`files_in_used` int(10) unsigned NOT NULL DEFAULT ‘0’,
`files_out_used` int(10) unsigned NOT NULL DEFAULT ‘0’,
`files_xfer_used` int(10) unsigned NOT NULL DEFAULT ‘0’
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `ftpquotatallies` VALUES (‘demo’,’user’,0,0,0,0,0,0);
CREATE TABLE `ftpuser` (
`id` bigint(20) 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=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 COMMENT=’ProFTP user table’;
INSERT INTO `ftpuser` VALUES (1,’simon’,"{md5}md5password’,2001,2001,’/opt/ftphome/simon’,’/sbin/nologin’,0,’2018-02-18 19:48:48′,’0000-00-00 00:00:00′),(2,’simon2′,"{md5}uk7kAgOCIdt21o0YJ6grVg==’,2001,2001,’/opt/ftphome/simon2′,’/sbin/nologin’,4,’2018-02-18 20:35:04′,’0000-00-00 00:00:00′);
# =============== 数据库部分 结束 ===============
5. 添加用户的 shell 脚本,添加用户需要插表,创建用户目录等,参照网上的脚本修改如下:
# cat /usr/local/bin/add_ftpuser.sh
#!/bin/bash
# Modified by Albert Xu
#
usage () {
echo “”
echo ” USAGE: `basename $0` username user_home_dir “
echo ” e.g.: `basename $0` albertxu /opt/ftphome/albertxu “
echo “”
echo ” Result:”
echo ” UserName: albertxu”
echo ” PassWord: N2Jy3Fqol”
echo “”
exit
}
# == MySQL ========
MYSQL_USER=ftpd
MYSQL_PASS=MySQLP@ssw0rd
MYSQL_DB=ftpd
MYSQL_HOST=localhost
# ================
FTP_USER=ftpuser
FTP_UID=`id -u ${FTP_USER}`
FTP_GID=`id -g ${FTP_USER}`
FTP_GRP=`id -gn ${FTP_USER}`
# ===============
userid=$1
[ -z “${userid}” ] && usage
datetime=`date +”%Y-%m-%d %H:%M:%S”`
passwd=`mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1`
FTP_HOME=/opt/ftphome/${userid}
[ ! -d ${FTP_HOME} ] && mkdir -p ${FTP_HOME} && chown ${FTP_USER}.${FTP_GRP} ${FTP_HOME}
dst_passwd="{md5}’`/bin/echo -n “$passwd” | openssl dgst -binary -md5 | openssl enc -base64`
shell=’/sbin/nologin’
/bin/mysql -u ${MYSQL_USER} -p${MYSQL_PASS} -h ${MYSQL_HOST} ${MYSQL_DB} \
-e “INSERT INTO ftpuser (userid,passwd,uid,gid,homedir,shell,accessed) VALUES (‘$userid’,’$dst_passwd’,${FTP_UID},${FTP_GID},’${FTP_HOME}’,’/sbin/nologin’,’$datetime’);”
echo “UserName: $userid”
echo “PassWord: $passwd”
echo “userHome: ${FTP_HOME}”
echo “”
exit
# =============== 添加用户脚本 结束 ===============
6. 测试
重启 proftpd 服务后,用脚本添加用户后,可以尝试用 ftp 主机名 以及 ftp 主机名 22,端口来测试两种方式的认证。
我们不需要在操作系统添加用户,而是直接把用户和组的配置通过数据库实现,后端的数据库用户和组可以灵活的通过和其他应用整合,实现完美的安全 ftp 解决方案。 在 ftphome 的权限配置上,我们需要把所有 /opt/ftphome 下创建的用户目录和组的读写都设置为 ftpuser:ftpgroup 的 755 权限。在防火墙设置上,我们仍旧需要把 20/21 TCP 端口都打开。
很多人根据本教程可能会遇到数据库连接问题,本人认为这些都是基本功,看过这个教程就应该明白数据库的用户怎么设置了。
标签:
相关推荐:
- []每日看点!CentOS怎么升级Proftpd?CentOS升级Proftpd教程
- []安卓设备的USB周边和安卓USB配件如何调试?具体操作方法
- []ClamAV病毒扫描工具怎么安装?ClamAV3.扫描工具安装使用教程
- []每日动态!解析ElasticSearch ElasticSearch字段类型解析
- []世界短讯!【pycharm】1.8.0+cuda111的运行环境
- []性能稳了!曝三星Galaxy S24系列存储将从256GB起步,内存从8GB提升至12GB|当前动态
- []HyperX全新推出Cloud2O Hydration耳机 帮助玩家“随时补充水分”
- []WWDC 2023定档:iPhone X惨被抛弃!_天天热文
最新新闻:
- 世界短讯!【pycharm】1.8.0+cuda111的运行环境
- 安卓设备的USB周边和安卓USB配件如何调试?具体操作方法
- 每日动态!解析ElasticSearch ElasticSearch字段类型解析
- 每日看点!CentOS怎么升级Proftpd?CentOS升级Proftpd教程
- ClamAV病毒扫描工具怎么安装?ClamAV3.扫描工具安装使用教程
- 索尼新蓝牙耳机曝光!售价120欧 满电续航20小时 环球观点
- 《原神》公布3.6版本「盛典与慧业」4月12日上线 看点
- PS开始在家电领域与Xbox竞争 PS愚人节视频公开 环球头条
- 全球新消息丨愚人节整活:卡普空推出猫猫专用《街霸6》对战设备
- 全球快看:凶不露齿!美国新研究显示霸王龙也有嘴唇
- HyperX全新推出Cloud2O Hydration耳机 帮助玩家“随时补充水分”
- 性能稳了!曝三星Galaxy S24系列存储将从256GB起步,内存从8GB提升至12GB|当前动态
- 极氪 009 迎来首次 OTA 升级,ZEEKR OS 3.6 更新来袭
- 每日快看:《师父》登Steam四天销量破5万份 好评率高达94%
- 【环球热闻】卡普空猫猫专用设备发布!速同猫猫在《街霸6》中PK
- Epic老板蒂姆·斯威尼:我讨厌游戏中的广告|世界热议
- 环球快看:《辐射4》高清材质包 提升画质的同时保留原版速度
- 《半条命:艾利克斯》无VR MOD最新版本发布-当前速讯
- 地板下面有水怎么处理:新要闻
- 最新:Xbox高管认为Game Pass业务不会颠覆行业模式
- 欲购从速!PlayStation次世代智能家电公布 当前头条
- 吉田修平:很想看到独立开发者对于生成AI技术的应用|天天热闻
- 苹果MR头显无码组件曝光
- 原厂颗粒内存新低价99元!
- iPhone15 Pro颠覆了17年的设计
- WWDC 2023定档:iPhone X惨被抛弃!_天天热文
- 全球微头条丨漫威《秘密入侵》新剧照:龙妈搭档妈惹法克侠
- 贵州茅台日赚1.72亿元:超额完成任务 业绩增速创三年来新高:环球最资讯
- 每日快报!旭辉控股:收到匿名信称对总额18亿元交易提出质疑,延期发布2022年业绩
- 没人来!主办方谈E3取消:厂商退出的挑战难以克服-时讯
- 天天资讯:芬尼科技IPO信披与工商信息“打架” 创始股东设立时股东究竟2人还是41人?
- Switch 2不远了 开发者已收到新主机开发工具-世界今头条
- 【环球速看料】V社正开发一个未公布游戏 有从未见过的玩法
- 世嘉公布免费悬疑视觉小说《刺猬索尼克谋杀案》
- 精选!腾讯QQ Linux 3.1.1版发布:支持国产CPU和操作系统
- 当前热议!桶装水更卫生 电动抽水器11.9元
- Windows 11 2024版发布了 可免费下载 聚看点
- 每日热讯!理想L系累计交付超10万台:跻身豪华车前五名
- 罗永浩在淘宝直播间卖民用卫星:最低200万即可拥有
- 江西铜业股份(00358.HK):3月31日南向资金减持48.7万股
- 只秀美颜不onlyfans 身高158cm的赛车女郎东海林里咲
- 尿中白细胞高_尿白细胞3个加号
- 北京启动二手房“带押过户”,有利于提高交易效率、提振市场_环球速看料
- 今日观点!《崩坏:星穹铁道》预约人数破2000万 4月26日上线
- 《尘封大陆》完整通关至少需要25个小时 滚动
- 快消息!射手的软肋!盘点NBA罚球最差的十大后卫:命中率仅过7成!
- 【独家】曝马斯克计划最早于4月来中国 前不久妈妈刚玩了一圈
- 微速讯:《艾尔登法环》PS5开启光追后 平均15-20FPS
- 史无前例!PC版《最后生还者:第一部》竟能用满CPU16个线程
- 米哈游《崩坏:星穹铁道》全平台预约破2千万 4月26日正式公测_天天热点
- 今日快讯:全球超6.5亿成年人肥胖 减肥药或被列入“基本药物清单”
- 焦点滚动:本·阿弗莱克透露《闪电侠》将有另一位英雄客串出演
- 当前关注:新西兰家庭版XGP售价公开 每月人民币171元
- 氛围感好评佳作《双子(Gemini)》将于4月6日为Switch玩家带来视听享受 天天日报
- 基建游戏《重塑火星》正式在Steam推出 一起出发去火星搞建设!
- 谁在开发“一键脱衣”App 行为龌龊已触犯法律应严惩
- 环球速读:今天最新消息 湖北恩施:向日葵朵朵开 绚丽花海入画来
- 浩鲸科技BICN5度核心能力,使能多要素融合的算网构建:环球时快讯
- 【全球新要闻】巧用3-2-1策略:中小型企业如何制定高效的数据备份流程
- 赚麻了 凭《边缘行者》2022年CDPR营收创公司成立以来历史第二
- 《生化危机4 重制版》PS4版M站用户评分仅4.3分:优化不太行
- 今日热闻!坚持高端绝不退步!李斌谈特斯拉降价:道不同不相为谋
- 轻盈春日 活力闪耀 尼康携手傅菁开启轻春心动之旅
- 【天天新要闻】极客至宝!iGame Lab显卡正式发布
- 倒计时3天!2023惠普游戏家族新品发布会即将超燃来袭|焦点精选
- 英雄联盟 2023 LPL 春季常规赛最佳阵容公布,MVP 和最佳新秀出炉|今日热搜
- 全球3C领域首个中国原创铝合金板材 联想“丝绸铝”注册成国标|环球热推荐
- 清明将至 唯品会一组消费数据曝光
- 即时焦点:优酷会员期间下载视频到期不能看 客服:需新开会员
- 成龙非常自豪:不是我要去好莱坞 而是好莱坞要我
- “解压神器”越攒越多?上转转买卖二手轻松“疗愈”|天天日报
- 英特尔以强大产品力,迎接生成式AI的广阔机遇|热门
- 亚马逊云科技17年引领Serverless持续进化 Serverless进入发展新范式|世界热议
- 90后小伙京东开店 多番尝试找准智能手表赛道 世界聚看点
- 当前消息!3R级红色激光 一键超链接 雷柏XR100无线激光演示器翻页笔上市