CentOS 搭建 Pure-FTP

背景

项目开发过程中部分外包,需要限制ftp用户在自己的目录,在21端口下没有问题,但当ftp用户用sftp登录时,还是可以访问上级目录,于是禁止该ftp用户ssh登录,切断22端口的通信。

安装Pure-ftpd

#安装扩展源(默认无pure-ftpd)
yum install -y epel-release
yum install -y pure-ftpd
#建立用户和用户组
groupadd ftpgroups
useradd ftp_user -g ftpgroups -s /sbin/nologin -d /dev/null //禁止登录
#创建虚拟用户(若使用pureftpd.pdb校验)
pure-pw useradd ftp_user -u ftp_user -d /data/www
pure-pw mkdb
#配置文件
vim /etc/pure-ftpd/pure-ftpd.conf
PureDB  /etc/pure-ftpd/pureftpd.pdb #若选择PureDB则取消注释
AnonymousOnly no  #关闭匿名访问权限

配置验证方式

PureDB方式

#创建虚拟用户
pure-pw useradd ftptest -u ftp_user -d /data
pure-pw mkdb

#管理用户
pure-pw useradd 添加用户
pure-pw userdel 删除用户
pure-pw usermod 修改用户
pure-pw show 查看用户详细信息
pure-pw list 查看所有用户设置
pure-pw mkdb 生成数据文件

MySQL方式

#创建数据库
CREATE DATABASE ftpdb;
CREATE TABLE `users` (
  `User` varchar(16) NOT NULL DEFAULT '',
  `status` enum('0','1') NOT NULL DEFAULT '0',
  `Password` varchar(64) NOT NULL DEFAULT '',
  `Uid` varchar(11) NOT NULL DEFAULT '-1',
  `Gid` varchar(11) NOT NULL DEFAULT '-1',
  `Dir` varchar(128) NOT NULL DEFAULT '',
  `ULBandwidth` smallint(5) NOT NULL DEFAULT '0',
  `DLBandwidth` smallint(5) NOT NULL DEFAULT '0',
  `comment` tinytext NOT NULL,
  `ipaccess` varchar(15) NOT NULL DEFAULT '*',
  `QuotaSize` smallint(5) NOT NULL DEFAULT '0',
  `QuotaFiles` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`User`),
  UNIQUE KEY `User` (`User`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#创建用户
create user 'user'@'127.0.0.1' identified by 'passwd';
GRANT ALL PRIVILEGES ON `ftpdb`.* TO 'user'@'127.0.0.1' WITH GRANT OPTION;

#查看 ftp_user的USERID和GROUPID信息
cat /etc/passwd   #找到ftp_user  对应的1004为UID,1001为GID
ftp_user:x:1004:1001::/data:/bin/bash

#SQL管理(增、删、改、查)
INSERT INTO `users` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('ftp_user', '1', MD5('passwd'), '1004', '1001', '/data/www', '0', '0', '', '*', '0', '0');

#修改pureftpd-mysql.conf
MYSQLServer     127.0.0.1 #MySQL地址
MYSQLPort       3306   #MySQL端口号
MYSQLUser       user   #MySQL用户
MYSQLPassword   passwd  #用户密码
MYSQLDatabase   ftpdb    #数据库
MYSQLCrypt      md5      #验证方式

限制访问

#限制ftp用户登录ssh(建议不要限制root)
usermod -s /usr/sbin/nologin ftp_user
#若要恢复
usermod -s /bin/bash ftp_user

常见问题

Q1:解决CentOS下PureFtp出现“数据 Socket 错误 连接已超时”错误

查看 /etc/sysconfig/iptables
Centos 搭建Pure-FTP
#查看pureftpd.conf

PassivePortRange 20000 30000

#添加规则:

iptables -A INPUT -m  state --state NEW -m tcp -p tcp --dport 20000:30000 -j ACCEPT  
#保存防火墙规则,并重启

systemctl restart iptables

Q2:解决CentOS下PureFtp出现“530”错误

1、验证方式有问题未开启(配置不正确)

2、账号密码有问题

更多参考:

1、Linux中搭建pure-ftp及配置详解

2、centos pure-ftpd配置及错误解决

本作品采用《CC 协议》,转载必须注明作者和本文链接
来杯可乐不加糖。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!