千家信息网

如何把FTP用户帐号存放进MariaDB数据库中

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,FTP服务历史是比较悠久的,但由于其出现的比较早,所以设计之初也没考虑到安全问题,发展至今,FTP服务仍然采用明文传输协议,但由于其搭建及使用比较便捷,使其保留至今。今天就给大家分享一下如何搭建服务器
千家信息网最后更新 2026年11月02日如何把FTP用户帐号存放进MariaDB数据库中

FTP服务历史是比较悠久的,但由于其出现的比较早,所以设计之初也没考虑到安全问题,发展至今,FTP服务仍然采用明文传输协议,但由于其搭建及使用比较便捷,使其保留至今。今天就给大家分享一下如何搭建服务器,并让之满足实际生产环境中的相应需求。为了演示方便,我们这里把防火墙和SELinux提前关闭掉,如果忘记关闭后续过程会出现一些另人费解的报错信息。


第一步:YUM安装ftp服务器端vs-ftpd

yum install -y vsftpd


第二步:配置vs-ftpd

vim /etc/vsftpd/vsftpd.conf


xferlog_enable=YES

xferlog_file=/var/log/xferlog

pam_service_name=vsftpd.mysql

guest_enable=YES

guest_username=vsftpd


第三步:编译安装pam-mysql(编译环境肯定是要有的)

[root@centos730g ~]#yum install -y mariadb-devel pam-devel openssl-deve

[root@centos730g ~]# ls

anaconda-ks.cfg pam_mysql-0.7RC1.tar.gz

[root@centos730g ~]# tar xf pam_mysql-0.7RC1.tar.gz

[root@centos730g ~]# cd pam_mysql-0.7RC1/

[root@centos730g pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security

[root@centos730g pam_mysql-0.7RC1]# make

/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/security -I/usr/include -g -O2 -g -O2 -I/usr/include/mysql -c pam_mysql.c

mkdir .libs

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/security -I/usr/include -g -O2 -g -O2 -I/usr/include/mysql -c pam_mysql.c -fPIC -DPIC -o .libs/pam_mysql.o

pam_mysql.c: In function 'pam_mysql_converse':

pam_mysql.c:3192:4: warning: passing argument 2 of 'conv->conv' from incompatible pointer type [enabled by default]

conv->appdata_ptr))) { //这里出现了一个报错信息,不影响最终结果,无需理会

^

pam_mysql.c:3192:4: note: expected 'const struct pam_message **' but argument is of type 'struct pam_message **'

/bin/sh ./libtool --mode=link gcc -g -O2 -I/usr/include/mysql -o pam_mysql.la -rpath /usr/lib64/security -module -avoid-version pam_mysql.lo -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl -lcrypt

gcc -shared .libs/pam_mysql.o -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl -lcrypt -Wl,-soname -Wl,pam_mysql.so -o .libs/pam_mysql.so

creating pam_mysql.la

(cd .libs && rm -f pam_mysql.la && ln -s ../pam_mysql.la pam_mysql.la)

[root@centos730g pam_mysql-0.7RC1]#

[root@centos730g pam_mysql-0.7RC1]# make install


第四步:安装、配置mariadb-server并启动之

[root@centos730g ~]# yum install -y mariadb-server

[root@centos730g ~]# systemctl start mariadb

[root@centos730g ~]# mysql_secure_installation //运行安全配置脚本(设置管理员密码、删除匿名帐户、开启管理员远程登录、删除测试数据库)


第五步:进入数据库创建FTP用户帐户数据库

MariaDB [(none)]> create database vsftpd;

MariaDB [(none)]> create table vsftpd.users (id int not null auto_increment primary key,name char(30) not null unique key,password char(48));

MariaDB [(none)]> insert into vsftpd.users (name,password) values ('admin',password('adminpass')),('guest',password('guestpass'));

MariaDB [(none)]> grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftpdpass;

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> exit


第六步:手动编写ftp连接mysql的配置文件

[root@centos730g ~]# vim /etc/pam.d/vsftpd.mysql


auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpdpass host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpdpass host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2


第七步:创建FTP根目录,创建数据库中FTP帐户映射到本地的帐户,并指定其家目录为FTP根目录,设置FTP根目录的相应权限

mkdir -pv /ftproot/{pub,upload} //为了方便后面验证效果,创建两个目录(pub用于下载,upload用于用户上传)

chmod -w /ftproot //ftp根目录不能有写入权限

useradd -r -d /ftproot vsftpd



第八步:启动vsftpd服务,安装ftp客户端工具lftp,并检验登录效果

[root@centos730g ~]# yum install -y lftp

[root@centos730g ~]# lftp -u admin 192.168.1.71

Password:

lftp admin@192.168.1.71:~> ls

ls: Login failed: 530 Login incorrect.

lftp admin@192.168.1.71:~>

确保密码没有输入错误的情况下出现此报错信息,原因就是SELinux没有关闭。于此同时,安全模块的日志文件里面也有相应的错误记录。

[root@centos730g ~]# cat /var/log/secure


Oct 18 20:00:50 centos730g vsftpd[13492]: pam_mysql - MySQL error (Can't connect to MySQL server on '127.0.0.1' (13))

Oct 18 20:02:30 centos730g vsftpd[13514]: pam_mysql - MySQL error (Can't connect to MySQL server on '127.0.0.1' (13))


关闭SELinux再尝试登录,一切正常

[root@centos730g ~]# getenforce

Enforcing

[root@centos730g ~]# setenforce 0

[root@centos730g ~]# getenforce

Permissive

[root@centos730g ~]# !lftp

lftp -u admin 192.168.1.71

Password:

lftp admin@192.168.1.71:~> ls

drwxr-xr-x 2 0 0 4096 Oct 18 12:05 pub

drwxr-xr-x 2 0 0 4096 Oct 18 12:05 upload

lftp admin@192.168.1.71:/>

lftp admin@192.168.1.71:/> cd upload/

lftp admin@192.168.1.71:/upload> put /etc/fstab

put: Access failed: 550 Permission denied. (fstab)

lftp admin@192.168.1.71:/upload>

lftp admin@192.168.1.71:/upload> exit

[root@centos730g ~]# lftp -u guest 192.168.1.71

Password:

lftp guest@192.168.1.71:~> ls

drwxr-xr-x 2 0 0 4096 Oct 18 12:05 pub

drwxr-xr-x 2 0 0 4096 Oct 18 12:05 upload

lftp guest@192.168.1.71:/> cd upload/

lftp guest@192.168.1.71:/upload> put /etc/issue

put: Access failed: 550 Permission denied. (issue)

lftp guest@192.168.1.71:/upload>

至此为到,admin,guest两个虚拟用户都可以顺利通过mysql的验证后登录到ftp服务器,并下载文件了,但如果要想拥有上传权限,必需对单个虚拟帐户单独配置权限


第九步:为管理员帐户admin配置上传及修改权限

编辑vsftpd配置文件,添加一行

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/users_conf

创建用于存放单个用户权限配置文件的目录

mkdir /etc/vsftpd/users_conf


手动编写权限配置文件内容

vim /etc/vsftpd/users_conf/admin

anon_upload_enable=YES //允许上传

anon_other_write_enable=YES //允许删除

anon_mkdir_write_enable=YES //允许创建目录


给本地映射帐户vsftpd用户授予/ftproot/upload目录拥有写入权限

[root@centos730g ~]# setfacl -m u:vsftpd:rwx /ftproot/upload/

[root@centos730g ~]# getfacl /ftproot/upload/

getfacl: Removing leading '/' from absolute path names

# file: ftproot/upload/

# owner: root

# group: root

user::rwx

user:vsftpd:rwx

group::r-x

mask::rwx

other::r-x


[root@centos730g ~]#

注意,虽然此时vsftp拥有写入权限,但只有在单独授权文件里面开放相应权限后,写入权限才会对该用户正式生效。


配置完成后,重启vsftpd服务,让刚才所做的配置正式生效

[root@centos730g ~]# systemctl restart vsftpd


再次使用admin帐户登录,验证上传及修改权限

[root@centos730g ~]# lftp -u admin 192.168.1.71

Password:

lftp admin@192.168.1.71:~> cd upload/

lftp admin@192.168.1.71:/upload> put /etc/fstab

574 bytes transferred

lftp admin@192.168.1.71:/upload> ls

-rw------- 1 996 994 574 Oct 18 12:47 fstab

lftp admin@192.168.1.71:/upload> mkdir admin

mkdir ok, `admin' created

lftp admin@192.168.1.71:/upload> ls

drwx------ 2 996 994 4096 Oct 18 12:47 admin

-rw------- 1 996 994 574 Oct 18 12:47 fstab

lftp admin@192.168.1.71:/upload> rm fstab

rm ok, `fstab' removed

lftp admin@192.168.1.71:/upload> ls

drwx------ 2 996 994 4096 Oct 18 12:47 admin

lftp admin@192.168.1.71:/upload> rm -rf admin

rm ok, `admin' removed

lftp admin@192.168.1.71:/upload> ls

lftp admin@192.168.1.71:/upload>

lftp admin@192.168.1.71:/upload> exit

[root@centos730g ~]# lftp -u guest 192.168.1.71

Password:

lftp guest@192.168.1.71:~> cd upload/

lftp guest@192.168.1.71:/upload> put /etc/issue

put: Access failed: 550 Permission denied. (issue)

lftp guest@192.168.1.71:/upload>

admin是单独做了上传修改授权的配置的,所以upload的写入权限对它是生效的,而guest没有单独授权,写入权限对其是无效的。


至此,对ftp服务的需求,在实际生产环境中基本满足,当然ftp服务的用户帐户一般不会多到使用数据库来存储,所以这就需要根据实际需求来决定采用何种方式来存储ftp的用户帐户了。但这里一定要提醒大家的是,ftp服务对目录的权限要求是非常严格的,稍有不慎,便会出各式各样的报错信息,所以大家在配置过程中,一定要细心对待。

权限 配置 帐户 服务 用户 文件 目录 数据 数据库 登录 信息 根目录 安全 实际 服务器 环境 管理员 需求 管理 验证 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 易互联网科技有限公司 互联网 科技创业 杭州互联网科技公司 狮子座互联网科技有限公司 互联网科技英文翻译 互联网汽车科技小镇 北京大学互联网科技怎么样 玉溪新华互联网科技好不好 济南有互联网科技公司吗 四川互联网展示科技馆设计 厦门江牛科技互联网 宇信科技在杭州互联网排第几 半导体行业属于互联网高科技类吗 银川新华互联网科技学校是国营吗 互联网科技手抄报图片 求路客互联网科技电话 安徽零酒互联网科技有限公司 互联网科技博主张洲 河南商务圈互联网科技有限公司 百单网互联网科技有限公司 互联网是第几次科技革命的成果 麻工互联网科技 左右互联网络科技 湖南洣水互联网科技有限公司扣款 团飞科技与伯堂互联网服务平台 伊宁互联网科技做什么的 湖北辰鑫科技互联网 银川新华互联网科技学校是国营吗 青岛互联网科技园
0