背景
项目开发过程中部分外包,需要限制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
#查看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、账号密码有问题
更多参考:
本作品采用《CC 协议》,转载必须注明作者和本文链接
来杯可乐不加糖。