如何把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(编译环境肯定是要有的)

[[email protected] ~]#yum install -y mariadb-devel pam-devel openssl-deve

[[email protected] ~]# ls

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

[[email protected] ~]# tar xf pam_mysql-0.7RC1.tar.gz

[[email protected] ~]# cd pam_mysql-0.7RC1/

[[email protected] pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security

[[email protected] 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)

[[email protected] pam_mysql-0.7RC1]#

[[email protected] pam_mysql-0.7RC1]# make install

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

[[email protected] ~]# yum install -y mariadb-server

[[email protected] ~]# systemctl start mariadb

[[email protected] ~]# 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的配置文件

[[email protected] ~]# 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,并检验登录效果

[[email protected] ~]# yum install -y lftp

[[email protected] ~]# lftp -u admin 192.168.1.71

Password:

lftp [email protected]:~> ls

ls: Login failed: 530 Login incorrect.

lftp [email protected]:~>

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

[[email protected] ~]# 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再尝试登录,一切正常

[[email protected] ~]# getenforce

Enforcing

[[email protected] ~]# setenforce 0

[[email protected] ~]# getenforce

Permissive

[[email protected] ~]# !lftp

lftp -u admin 192.168.1.71

Password:

lftp [email protected]:~> 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 [email protected]:/>

lftp [email protected]:/> cd upload/

lftp [email protected]:/upload> put /etc/fstab

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

lftp [email protected]:/upload>

lftp [email protected]:/upload> exit

[[email protected] ~]# lftp -u guest 192.168.1.71

Password:

lftp [email protected]:~> 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 [email protected]:/> cd upload/

lftp [email protected]:/upload> put /etc/issue

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

lftp [email protected]:/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目录拥有写入权限

[[email protected] ~]# setfacl -m u:vsftpd:rwx /ftproot/upload/

[[email protected] ~]# 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

[[email protected] ~]#

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

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

[[email protected] ~]# systemctl restart vsftpd

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

[[email protected] ~]# lftp -u admin 192.168.1.71

Password:

lftp [email protected]:~> cd upload/

lftp [email protected]:/upload> put /etc/fstab

574 bytes transferred

lftp [email protected]:/upload> ls

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

lftp [email protected]:/upload> mkdir admin

mkdir ok, `admin‘ created

lftp [email protected]:/upload> ls

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

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

lftp [email protected]:/upload> rm fstab

rm ok, `fstab‘ removed

lftp [email protected]:/upload> ls

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

lftp [email protected]:/upload> rm -rf admin

rm ok, `admin‘ removed

lftp [email protected]:/upload> ls

lftp [email protected]:/upload>

lftp [email protected]:/upload> exit

[[email protected] ~]# lftp -u guest 192.168.1.71

Password:

lftp [email protected]:~> cd upload/

lftp [email protected]:/upload> put /etc/issue

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

lftp [email protected]:/upload>

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

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

时间: 2024-10-07 19:12:32

如何把FTP用户帐号存放进MariaDB数据库中的相关文章

第六章 用户帐号和组管理

第六章 用户帐号和组管理 第一节 用户分类 超级用户 root:x:0:0:root:/root:/bin/bash root x 0 0 root /root /bin/bash 用户名为root x表示有密码 用户ID 组ID 与用户相关的注释 用户主目录 登录系统后执行的第一个程序 普通用户 thomas:x:1000:1000:thomas:/home/thomas:/bin/bash thomas x 1000 1000 thomas /home/thomas /bin/bash 用户

【AD】取消普通域用户帐号加域权限&授权特定普通域用户加域权限

通常来说,没有做什么特别的设定的话,都是手动加域,且使用的是管理员帐号,这种情况下是有风险的,容易被人记忆密码.所以,如果可以设置一个普通用户帐号,专门用来执行加域操作,就会降低此类风险.其实默认情况下,域每一个普通帐号都可以将10台电脑加入域内,这是一个很大的隐患.估计很多人都没有试过吧. 加域分两种,一种是将新电脑加入域内,一种是将已经加入过域的电脑,因为故障无法登录域或手动退域,原计算机帐号仍在的情况下加入域建立连接.第二种情况又分上次加域使用的帐号和当前加域使用的帐号是否相同且权限是否一

Ansible-Tower快速入门-4.以超级用户帐号登录【翻译】

以超级用户帐号登录 首先,登录tower需要使用tower服务器所在的URL,格式如下:https://<tower server name>/ 注意:tower安装了一个自签名证书用于HTTPS通信,你可能需要你的浏览器接受这个证书,如果你想要替换证书,可以查看“安装和设置”章节. 登录使用你安装tower过程中所设置的用户名和密码,默认情况下,用户名为”admin”,密码为”password”,你可以通过点击在用户标签上的admin帐户进行修改. 注意:关于普通用户,超级用户和组织管理员的

Linux usermod(修改用户帐号)

应用举例:1.将 newuser2 添加到组 staff 中# usermod -G staff newuser22.修改 newuser 的用户名为 newuser1 # usermod -l newuser1 newuser3.锁定账号 newuser1 # usermod -L newuser14.解除对 newuser1 的锁定# usermod -U newuser1功能说明:修改用户帐号. 语 法:usermod [-LU][-c <备注>][-d <登入目录>][-e

多个公众号(服务号和订阅号)之间需要用户帐号互通

由于同一公司下多个公众号之间需要用户帐号互通,微信开放平台提供了UnionID机制,来解决此问题 通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通过UnionID机制来在多公众号之间进行用户帐号互通. 1. 将多个公众号绑定到同一个微信开放平台(open.weixin.qq.com)帐号下,即同一个Union下 2. 通过获取用户基本信息接口中的UnionID来区分用户的唯一性,不过需要注意的是:公众号只有在被绑定到微信开放平台帐

linux批量新建用户帐号脚本

在啃鸟哥的linux私房菜这本书,看到后面发现前面学的渐渐忘记了. 为了熟悉一些命令, 练习一下shell脚本 在14章看到的批量新建帐号范例,就学着,写一下练练手.  下面的代码有注释 照着鸟哥写的,稍加改动 符合学校的编制. 一.批量创建帐号并将信息保存至文件 没有像书上提供可选择密码生成方式,密码是和帐号一样,并设置了登录以后强制用户更改密码,觉得这种方案更安全 1 #!/bin/bash 2 # 3 #this program use to add account for your li

Linux下停用和启用用户帐号

有时候某个用户不乖,但是还不想删除他的帐号只是想给他点儿颜色看看,或者出于某种权限管理不想让他/她使用这个帐号,那么冻结帐号就是最好的方法了,linux中的帐号密码保存在/etc/shadow文件里面,禁用帐号的办法就是修改/etc/shadow. 还有一个更简便快捷的方法:通过passwd -l | -u 来lock 或 unlock一个帐号. 停用帐号: [[email protected] vsftpd]# passwd -l jerry Locking password for user

Oracle11g 默认用户帐号和密码 解锁用户 plsql登录

近日在尝试在本地电脑安装Oracle,把遇到的问题以及解决过程中使用的资料分享给一下. 数据库为Oracle 11g -------------------------------------------------------------------------------------------------------------------------------------------------- 用户名 密码 sys/change_on_install           SYSDB

linux系统无法添加用户帐号的原因分析

生产环境配置: 操作系统: CentOS 6.6 1.产生的问题: 在使用useradd命令添加帐号(的)时候出现"seradd:cannotopen /etc/passwd" [[email protected] ~]#useradd -d /home/wwwroot/ftupuser -g ftp-s/sbin/nologin ftpuser useradd: cannotopen /etc/passwd 2.产生的原因: a)添加"i"隐藏属性后,就无法更动这