FTP服务

FTP安装流程

vsftpd

# 安装vsftpd
dnf -y install vsftpd
systemctl enable --now vsftpd
命令端口默认为21
主动模式端口为20
被动模式端口随机分配
vim /etc/vsftpd/vsftpd.com
#支持匿名用户
anonymous_enable=YES
#匿名用户略过口令检查
no_anon_password=YES
#匿名用户上传(注意:同时要设置文件系统写权限,但是不能给FTP根目录写权限,否则报错)
anon_upload_enable=YES
#匿名建目录
anon_mkdir_write_enable=YES

setfacl -m u:ftp:rwx /var/ftp/pub

vsftpd虚拟用户

# libdb-utils是Berkeley Database(Berkeley DB)的一套实用程序集合的软件包名称,这些实用程序用于管理和操作Berkeley DB数据库。Berkeley DB是一个为嵌入式系统设计的高性能数据库,支持多种数据模型。libdb-utils通常包含db_load等命令,这是创建和修改Berkeley DB数据库文件的工具。
yum install libdb-utils
#创建虚拟用户列表文件
cd /etc/vsftpd/
vim users.txt
#在该文件中,输入用户名和密码,每个用户的用户名和密码占一行,格式如下:这个文本文件稍后会被转换成数据库文件。
xiaoming
123456
xiaohong
123456
chmod 600 users.txt
#生成虚拟用户的数据库文件
db_load -T -t hash -f users.txt users.db
#确保数据库文件的权限是正确的
chmod 600 users.db
#创建虚拟用户映射的本地用户(创建一个没有登录权限的系统用户(vuser),所有虚拟FTP用户的行为都会被映射到这个系统用户。这意味着虚拟用户没有自己的系统用户账户,但它们的所有FTP活动都是作为vuser用户来进行的。)
useradd -d /data/ftproot -s /sbin/nologin -r vuser
#创建FTP的根目录和上传目录
mkdir -pv /data/ftproot/upload
#设置适当的访问控制列表权限:
setfacl -m u:vuser:rwx /data/ftproot/upload/
#创建PAM配置文件:在PAM配置文件中,添加如下内容以使用db文件来认证用户;pam_userdb.so模块用于让PAM通过前面创建的数据库文件来认证用户。
vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/users
account required pam_userdb.so db=/etc/vsftpd/users
#修改vsftpd的主配置文件
#编辑vsftpd配置文件以开启虚拟用户功能:
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/conf.d/
systemctl restart vsftpd
#创建虚拟用户的个人配置文件
#对于每个虚拟用户,创建对应的配置文件。这样,每个虚拟用户都可以有不同的配置。
mkdir conf.d
#创建xiaoming的配置文件
vim conf.d/xiaoming
#必须关闭vsftpd.conf里面这三项,要不然所有的用户都可以写了
#设置允许上传、创建目录等权限:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#指定该用户的FTP根目录:
local_root=/data/ftproot1
#创建xiaohong的个人配置文件
vim conf.d/xiaohong
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#指定该用户的FTP根目录:
local_root=/data/ftproot2
mkdir /data/ftproot1
mkdir /data/ftproot2
touch /data/ftproot1/1.txt
touch /data/ftproot2/2.txt
#如果想对这两个虚拟用户各自的目录设置不同的权限
setfacl -m u:vuser:rwx /data/ftproot1
setfacl -m u:vuser:rwx /data/ftproot2
#想要写,必须文件系统允许,同时服务层面也需要允许,就是anon_upload、mkdir、other这三项。

实现基于MySQL验证的vsftpd虚拟用户

image-20240402174357180

由于高版本的CentOS、Rocky Linux不支持pam_mysql.so模块,所以编译安装在CentOS 7上面;并且数据库使用password()函数对明文密码加密,但是MySQL 8.0以上的版本弃用了该函数,故数据库使用mariadb

利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能

项目网站:(注意:因为此项目年代久远不再更新,当前只支持CentOS 6,7,不支持CentOS 8、Rocky 8)
http://pam-mysql.sourceforge.net/
https://sourceforge.net/projects/pam-mysql/
http://sf.net/projects/pam-mysql

1.在数据库服务器上安装mysql数据库

#注意:MySQL8.0由于取消了PASSWORD()函数不支持,因此选择Mariadb
[root@Rocky9 ~]# yum info mariadb
Last metadata expiration check: 1:26:24 ago on Tue 02 Apr 2024 04:25:17 PM CST.
Available Packages
Name         : mariadb
Epoch        : 3
Version      : 10.5.22
Release      : 1.el9_2
Architecture : x86_64
Size         : 1.6 M
Source       : mariadb-10.5.22-1.el9_2.src.rpm
Repository   : appstream
Summary      : A very fast and robust SQL database server
URL          : http://mariadb.org
License      : GPLv2 and LGPLv2
Description  : MariaDB is a community developed fork from MySQL - a multi-user, multi-threaded
             : SQL database server. It is a client/server implementation consisting of
             : a server daemon (mariadbd) and many different client programs and libraries.
             : The base package contains the standard MariaDB/MySQL client programs and
             : utilities.

[root@Rocky9 ~]# yum -y install mariadb-server
[root@Rocky9 ~]# systemctl enable --now mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.

2.在数据库服务上配置数据库支持vsftpd服务

#建立存储虚拟用户数据库和表
[root@centos8 ~]#mysql
mysql> CREATE DATABASE vsftpd;
mysql> USE vsftpd;
mysql> CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL);
#添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
mysql> INSERT INTO users(name,password) values('alice',password('123456'));
mysql> INSERT INTO users(name,password) values('bob',password('123456'));
mysql> select * from users;
#创建连接的数据库用户
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'10.0.0.%' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES; 

3.在FTP服务器上安装vsftpd 和 pam_mysql包

[root@centos7 ~]#yum -y install vsftpd

注意:在FTP服务器上安装 pam_mysql 注释:对于 centos 6:pam_mysql由EPEL的源中提供

[root@centos6 ~]#yum install pam_mysql

注意:对于 centos7 和 8:无对应rpm包,需手动编译安装 注意: 当前版本的源码不支持 CentOS 8,使用中会提示下面错误

[root@centos8 ~]#tail -f /var/log/secure
Jan 2 10:20:31 centos8 vsftpd[15519]: PAM unable to
dlopen(/usr/lib64/security/pam_mysql.so): /usr/lib64/security/pam_mysql.so:
undefined symbol: make_scrambled_password

4.pam-mysql 源码进行编译

1.安装相关包
[root@centos7 ~]#yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
2.下载pam-mysql源码进行编译
[root@centos7 ~]#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
#https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.gz
3.进行包的解压
[root@centos7 ~]#tar xvf pam_mysql-0.7RC1.tar.gz
4.进入pam_mysql-0.7RC1/目录
[root@centos7 ~]#cd pam_mysql-0.7RC1/
5.创建配置文件
[root@centos7 pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security
#如果上面命令不指定 --with-pam-mods-dir=/lib64/security 会报以下错误
#checking if the second argument of pam_conv.conv() takes const pointer... no
configure: error: Your system doesn't appear to be configured to use PAM.
Perhaps you need to specify the correct location where the PAM modules reside.
6.编译安装
[root@centos7 pam_mysql-0.7RC1]#make install
7.查看有没有生成文件和模块
[root@centos7 pam_mysql-0.7RC1]#ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root 882 Dec 17 14:34 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so

5.在FTP服务器上建立pam认证所需文件 (这里一定要注意数据库IP)

[root@centos7 ~]#vi /etc/pam.d/vsftpd.mysql
#添加如下两行
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.137 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.137 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

6.上面两条配置的详解

crypt 加密方式: 0表示不加密, 1表示crypt(3)加密, 2表示使用mysql password()函数加密 , 3表示md5加密 , 4表示sha1加密

配置字段说明 :
(1) auth 表示认证
(2) account 验证账号密码正常使用
(3) required 表示认证要通过
(4) pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
(5) user=vsftpd为登录mysql的用户
(6) passwd=123456登录mysql的的密码
(7) host=10.0.0.137mysql服务器的主机名或ip地址
(8) db=vsftpd 指定连接msyql的数据库名称
(9) table=users 指定连接数据库中的表名
(10) usercolumn=name 当做用户名的字段
(11) passwdcolumn=password 当做用户名字段的密码
(12) crypt=2 密码的加密方式为mysql password()函数加密

7.建立相应用户和修改vsftpd配置文件

#建立虚拟用户映射的系统用户及对应的目录
[root@centos7 ~]#useradd -s /sbin/nologin -d /data/ftproot -r vuser
#centos7 需除去ftp根目录的写权限
[root@centos7 ~]#mkdir -pv /data/ftproot/upload
[root@centos7 ~]#setfacl -m u:vuser:rwx /data/ftproot/upload
#确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
#添加下面两项
guest_enable=YES
guest_username=vuser
#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql
启动vsftpd服务
[root@centos7 ~]#systemctl enable --now vsftpd 

8.在FTP服务器上配置虚拟用户具有不同的访问权限

1.配置vsftpd为虚拟用户使用配置文件目录
[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
#添加如下选项
user_config_dir=/etc/vsftpd/conf.d/
2.创建所需要目录,并为虚拟用户提供配置文件
[root@centos7 ~]#mkdir /etc/vsftpd/conf.d/
#配置虚拟用户的访问权限
3.注意:需确保对应的映射用户对于文件系统有写权限
[root@centos7 ~]#vim /etc/vsftpd/conf.d/alice
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
4.登录目录改变至指定的目录
local_root=/data/ftproot1
[root@centos7 ~]#vim /etc/vsftpd/conf.d/bob
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
local_root=/data/ftproot2
5.创建对应的系统目录和授权目录(注意权限问题,)
[root@centos7 ~]# mkdir -pv /data/ftproot1/upload
[root@centos7 ~]# mkdir -pv /data/ftproot2/upload 
[root@centos7 ~]# chown vuser:vuser /data/ftproot1/upload/
6.进行测试 
[root@centos8 ~]# ftp 10.0.0.125

#如果想加新用户,只需要再数据库insert一条即可

Ubuntu 22.04安装vsftpd

# 安装ftp,ubuntu默认路径在/srv/ftp
apt install vsftpd
#编写配置文件,我这里使用系统用户登录,禁止ftp这个匿名用户登录
vi /etc/vsftpd.conf
anonymous_enable=NO
#no_anon_password=YES
local_enable=YES
local_root=/srv/ftp
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#anon_other_write_enable=YES 开启这项匿名用户可以删除文件

#新建目录,根目录不能有写的权限
mkdir /srv/ftp/upload/
setfacl -m u:xing:rwx /srv/ftp/upload/

vsftpd.conf
anonymous_enable=NO
#no_anon_password=YES
local_enable=YES
local_root=/srv/ftp
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#anon_other_write_enable=YES 开启这项匿名用户可以删除文件

#新建目录,根目录不能有写的权限
mkdir /srv/ftp/upload/
setfacl -m u:xing:rwx /srv/ftp/upload/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XingYuyu_Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值