vsftpd 示例:pam_mysql 认证 ftp 虚拟用户账号,且拥有不同的权限
2019-08-15 16:06
1381 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44983653/article/details/99623542
2、安装 pam 模块 3、vsftpd 安装 4、创建数据库、授权用户、创建账号和密码 4.2 mysql 服务端配置文件修改 4.2 mysql 数据库配置 4.3 创建虚拟用户所映射的用户 4.4 按 4.1 进行 pam 文件设置 4.5 vsftpd 主配置文件修改 4.6 vsftpd 根目录的写权限需去掉 5、验证过程 5.4 进行验证
pam_mysql 认证 ftp 虚拟用户账号,且拥有不同的权限
- 5.1 创建 FTP 根下的目录,保证 vuser 有读写权限
- 5.2 进行 FTP 登陆,进行文件创建
- 5.3 对虚拟用户的操作权限进行设置
- 修改 vsftpd 主配置文件
- 创建定义每个虚拟用户的权限文件
- 权限语句说明
- 创建每个虚拟用户的权限文件
1、安装 mariadb-server
查看是否安装 mariadb-server
[root@neo ~]# yum info mariadb-server Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.bit.edu.cn * extras: mirror.bit.edu.cn * updates: mirror.bit.edu.cn Installed Packages Name : mariadb-server Arch : x86_64 Epoch : 1 Version : 5.5.60 Release : 1.el7_5 Size : 58 M Repo : installed From repo : base Summary : The MariaDB server and related files URL : http://mariadb.org License : GPLv2 with exceptions and LGPLv2 and BSD Description : MariaDB is a multi-user, multi-threaded SQL database server. It is a : client/server implementation consisting of a server daemon (mysqld) : and many different client programs and libraries. This package contains : the MariaDB server and some accompanying files and directories. : MariaDB is a community developed branch of MySQL.
查看 mariadb-server 的程序名称
[root@neo ~]# rpm -ql mariadb-server | grep "/usr/lib/systemd/" /usr/lib/systemd/system/mariadb.service
2、安装 pam 模块
在 CentOS 上安装 pam 模块时,需要编译进行安装。
2.1 安装 mariadb 和 pam 的开发环境
[root@neo ~]# yum install mariadb-devel pam-devel -y
2.2 准备开发环境,安装包组
[root@neo ~]# yum groupinstall "Development Tools" "Server Platform Development" -y
2.3 下载 pam_mysql ,进行解压
[root@neo home]# ls pam_mysql-0.7RC1.tar.gz [root@neo home]# ls pam_mysql-0.7RC1 pam_mysql-0.7RC1.tar.gz [root@neo home]# cd pam_mysql-0.7RC1 [root@neo pam_mysql-0.7RC1]# ls acinclude.m4 config.guess configure CREDITS ltmain.sh missing pam_mysql.c pkg.m4 aclocal.m4 config.h.in configure.in INSTALL Makefile.am mkinstalldirs pam_mysql.spec README ChangeLog config.sub COPYING install-sh Makefile.in NEWS pam_mysql.spec.in stamp-h.in
2.4 预编译检查
[root@neo pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
2.5 进行编译
[root@neo pam_mysql-0.7RC1]# make && make install
2.6 pam 模块检查
编译完成后,会生成以下模块,有了这个模块 pam_mysql.so
就可以使用 mysql 去做认证了 。
[root@neo ~]# ls /usr/lib64/security/ | grep pam_mysql pam_mysql.la pam_mysql.so
3、vsftpd 安装
3.1 查看 vsftpd 是否安装
[root@neo ~]# yum info vsftpd Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.bit.edu.cn * extras: mirror.bit.edu.cn * updates: mirror.bit.edu.cn Installed Packages Name : vsftpd Arch : x86_64 Version : 3.0.2 Release : 25.el7 Size : 353 k Repo : installed From repo : base Summary : Very Secure Ftp Daemon URL : https://security.appspot.com/vsftpd.html License : GPLv2 with exceptions Description : vsftpd is a Very Secure FTP daemon. It was written completely from : scratch.
2、查看 vsftpd 是否启动
[root@neo ~]# systemctl status vsftpd.service ● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2019-08-14 03:57:38 EDT; 21h ago Main PID: 14605 (vsftpd) CGroup: /system.slice/vsftpd.service └─14605 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
4、创建数据库、授权用户、创建账号和密码
4.1 pam 配置文件创建(需要和后续 mysql 数据库中的数据保持一致)
[root@neo ~]# vim /etc/pam.d/vsftpd.vusers [root@neo ~]# cat /etc/pam.d/vsftpd.vusers auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd 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=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
pam 配置文件格式说明
auth # 认证帐号密码是否正确 account # 验证账号密码正常使用 required # 表示认证要通过 /usr/lib64/security/pam_mysql.so # 指定认证模块 # 模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数 user=vsftpd # 登陆 mysql 的用户名 passwd=mageedu # 登陆 mysql 的密码 host=127.0.0.1 # 指定 mysql 的主机地址 db=vsftpd # 指定 mysql 的数据库名称 table=users # 指定 mysql 的表名称 usercolumn=name # 指定 mysql 表中存储虚拟用户的用户名的列 passwdcolumn=password # 指定 mysql 表中存储虚拟用户的密码的列 crypt=2 # 指定用户名密码的加密方式
crypt是加密方式 0表示不加密 1表示crypt(3)加密 2表示使用mysql password()函数加密 3表示md5加密 4表示sha1加密
pam 配置文件帮助手册
[root@neo pam_mysql-0.7RC1]# pwd /home/pam_mysql-0.7RC1 [root@neo pam_mysql-0.7RC1]# ls acinclude.m4 config.h config.sub CREDITS ltmain.sh missing pam_mysql.la pkg.m4 aclocal.m4 config.h.in configure INSTALL Makefile mkinstalldirs pam_mysql.lo README ChangeLog config.log configure.in install-sh Makefile.am NEWS pam_mysql.spec stamp-h config.guess config.status COPYING libtool Makefile.in pam_mysql.c pam_mysql.spec.in stamp-h.in [root@neo pam_mysql-0.7RC1]# less README
4.2 mysql 服务端配置文件修改
[root@neo ~]# vim /etc/my.cnf.d/server.cnf skip_name_resolve=ON # 关闭域名解析 innodb_file_per_table=ON log_bin=mysql-bin [root@neo ~]# systemctl restart mariadb.service # 重启 mariadb 服务
4.2 mysql 数据库配置
进行数据库配置时,要以上面 pam 文件中所指定的数据库名称、表名称和列名称要一一对应。
登陆 mysql ,进行登陆用户授权
[root@neo ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> GRANT ALL ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'vsftpd'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; # 清楚缓存,立即生效 Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> EXIT # 退出 mysql 数据库 Bye
利用新授权的用户名进行登陆
[root@neo ~]# mysql -uvsftpd -pvsftpd -h127.0.0.1
创建数据库和表,并增加用户名和密码内容
MariaDB [(none)]> CREATE DATABASE vsftpd; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> use vsftpd; Database changed MariaDB [vsftpd]> CREATE TABLE users(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, password CHAR(48) NOT NULL, UNIQUE KEY(name)); Query OK, 0 rows affected (0.61 sec) MariaDB [vsftpd]> DESC users; # 查看表结构 +----------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(100) | NO | UNI | NULL | | | password | char(48) | NO | | NULL | | +----------+------------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec) MariaDB [vsftpd]> INSERT INTO users(name,password) VALUES ('neo',PASSWORD('neo')),('tang',PASSWORD('tang')); Query OK, 2 rows affected (0.15 sec) Records: 2 Duplicates: 0 Warnings: 0 MariaDB [vsftpd]> SELECT * FROM users; # 查看表中数据 +----+------+-------------------------------------------+ | id | name | password | +----+------+-------------------------------------------+ | 1 | neo | *CE61FE257AE1B611CE37CC643F2A9FA0A64D85D9 | | 2 | tang | *DF47B2C81BB01F5F2FA9B36C82418EF3CF3BF1E4 | +----+------+-------------------------------------------+ 2 rows in set (0.00 sec) MariaDB [vsftpd]> EXIT Bye
4.3 创建虚拟用户所映射的用户
[root@neo ~]# mkdir /ftproot/vuser -pv mkdir: created directory ‘/ftproot’ mkdir: created directory ‘/ftproot/vuser’ [root@neo ~]# useradd -d /ftproot/vuser vuser # 制定家目录,家目录后续就是 ftp 的根目录 [root@neo ~]# finger vuser Login: vuser Name: Directory: /ftproot/vuser Shell: /bin/bash Never logged in. No mail. No Plan.
[root@neo ~]# mkdir /ftproot/vuser/pub -pv # 约定俗成的习惯,创建一个 pub 目录 mkdir: created directory ‘/ftproot/vuser/pub’
4.4 按 4.1 进行 pam 文件设置
4.5 vsftpd 主配置文件修改
[root@neo ~]# cd /etc/vsftpd/ [root@neo vsftpd]# ls vsftpd.* # 对主配置文件进行备份,养成良好习惯 vsftpd.conf vsftpd.conf.bak [root@neo vsftpd]# vim vsftpd.conf anonymous_enable=YES # (保持默认即可)允许匿名用户登陆 pam_service_name=vsftpd.vusers # 指定 pam 认证文件 guest_enable=YES # 启动来宾帐号(虚拟帐号都成为来宾用户) guest_username=vuser # 来宾帐号映射成系统中的某一个用户 [root@neo vsftpd]# systemctl restart vsftpd.service # 重启服务 [root@neo vsftpd]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::80 :::* LISTEN 0 32 :::21 :::*
4.6 vsftpd 根目录的写权限需去掉
vsftpd 根目录的写权限需去掉,不然会在登陆成功后,提示
“Login failed. 421 Service not available, remote server has closed connection”
所以,vsftpd 用户根目录不能有写权限。
[root@neo ~]# chmod a-w /ftproot/vuser/ [root@neo ~]# ls -ld /ftproot/vuser/ dr-xr-xr-x. 3 root root 17 Aug 15 02:22 /ftproot/vuser/ [root@neo vsftpd]# systemctl restart vsftpd.service # 重启服务 [root@neo vsftpd]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::80 :::* LISTEN 0 32 :::21 :::*
进行如上配置后,再次登录就会提示
“230 Login successful”。
5、验证过程
5.1 创建 FTP 根下的目录,保证 vuser 有读写权限
这样的话,虚拟用户映射成 vuser 时,就能进行读写。
[root@neo vuser]# ll .. total 0 dr-xr-xr-x. 5 root root 47 Aug 15 02:53 vuser [root@neo ~]# cd /ftproot/vuser/ [root@neo vuser]# ll total 0 drwxr-xr-x. 2 root root 6 Aug 15 02:22 pub [root@neo vuser]# mkdir upload [root@neo vuser]# mkdir download [root@neo vuser]# chown vuser:vuser upload/ [root@neo vuser]# chown vuser:vuser download/ [root@neo vuser]# ll total 0 drwxr-xr-x. 2 vuser vuser 6 Aug 15 02:53 download drwxr-xr-x. 2 root root 6 Aug 15 02:22 pub drwxr-xr-x. 2 vuser vuser 6 Aug 15 02:53 upload
5.2 进行 FTP 登陆,进行文件创建
- 进行登陆
- 登陆成功后,进行新建目录创建
- 操作被拒绝。权限不够。此时需要查看共享权限
5.3 对虚拟用户的操作权限进行设置
修改 vsftpd 主配置文件
[root@neo ~]# vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers_config/ # 定义虚拟用户的操作权限的目录
创建定义每个虚拟用户的权限文件
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在
vsftpd.conf指定其路径及名称即可。
每个用户的权限都可以单独定制,但路径一定要与 vsftpd 主文件中的路径保持一致。
[root@neo ~]# mkdir /etc/vsftpd/vusers_config/ -pv mkdir: created directory ‘/etc/vsftpd/vusers_config/’ [root@neo ~]# cd /etc/vsftpd/vusers_config/ [root@neo vusers_config]# touch neo tang [root@neo vusers_config]# ll total 0 -rw-r--r--. 1 root root 0 Aug 15 03:07 neo -rw-r--r--. 1 root root 0 Aug 15 03:07 tang
权限语句说明
anon_upload_enable=YES # 可上传,注意:文件系统权限 anon_mkdir_write_enable=YES # 可创建目录 anon_other_write_enable=YES # 可删除和修改上传的文件
创建每个虚拟用户的权限文件
[root@neo vusers_config]# cat neo non_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES [root@neo vusers_config]# cat tang non_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
5.4 进行验证
- 重启服务
[root@neo vusers_config]# !sys systemctl restart vsftpd.service
- 进行登陆
- 新创建目录和文件,可以根据自己的权限进行所设置的权限进行相应的操作
相关文章推荐
- FTP服务系列之vsftpd+pam+mysql实现虚拟用户认证
- 19、vftpd基于PAM_MYSQL进行虚拟用户的认证且每个用户有自己的独立目录及不同的访问权限
- 在Centos7上使用vsftpd+pam_mysql实现虚拟用户认证
- vsftpd的基于pam_mysql的虚拟用户配置示例
- Vsftpd完全攻略(六)建立多个虚拟用户支持ftp不同访问权限
- vsftpd服务器基于mysql的虚拟用户认证,并为每个用户分配不同的目录
- vsftpd基于pam_mysql的认证和hash编码的方式配置虚拟用户
- 基于vsftpd+pam+mysql架设ftp并实现虚拟用户登录
- vsftpd基于pam_mysql的虚拟用户认证
- vsftpd虚拟用户认证配置(vsftpd+pam+mysql)
- Vsftpd完全攻略(六)建立多个虚拟用户支持ftp不同访问权限【1】
- 基于vsftpd+pam+mysql架设ftp并实现虚拟用户登录
- Vsftpd完全攻略(六)建立多个虚拟用户支持ftp不同访问权限【2】
- vsftpd基于pam_mysql做虚拟用户认证
- vsftpd基于pam虚拟用户认证,还怕泄漏账号么?
- 安装vsftpd+pam+mysql实现对虚拟用户身份认证功能
- vsftpd基于pam_mysql mysql 虚拟用户认证
- FTP服务学习笔记之基于MySQL+PAM的vsftpd虚拟用户
- vsftpd基于pam_mysql的虚拟用户认证
- vsftpd+mysql+apache实现给虚拟用户分配不同目录及权限并实现远程管理