vsftpd的基于pam_mysql的虚拟用户机制
虚拟用户:是
ftp
中常用的一种策略,因为ftp
服务古老而且不安全,使用匿名用户
不能有效的控制权限,而本地用户
可以登录操作系统,极为不安全,所以引入了虚拟用户
的概念,其只是将多个虚拟用户映射为一个本地用户,此用户可以设置不允许登录,从而加强了系统的安全性,本问主要介绍基于mysql
的虚拟用户
配置
pam_mysql
1
2
3
4
5
6
|
下载地址:pam-mysql.sourceforge.net
# yum -y groupinstall "Development Tools" "Server Platform Development"
# yum -y install pam-devel openssl-devel mariadb-devel
# ./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
# make && make install
安装后模块路径:
/usr/lib64/security/pam_mysql
.so
|
mariadb
配置
创建所需数据库和表,插入所需用户,这里的密码使用password
加密方式加密
1
2
3
4
5
6
7
8
9
10
11
12
13
|
MariaDB [(none)]> CREATE DATABASE ftpdb;
MariaDB [ftpdb]> CREATE TABLE
users
(
id
int AUTO_INCREMENT PRIMARY KEY,name char(30) NOT NULL,password char(48));
MariaDB [ftpdb]> INSERT INTO
users
(name,password) VALUES (
'tom'
,password(
'tom'
));
MariaDB [ftpdb]> INSERT INTO
users
(name,password) VALUES (
'jerry'
,password(
'jerry'
));
MariaDB [ftpdb]> SELECT * FROM
users
;
+----+-------+-------------------------------------------+
|
id
| name | password |
+----+-------+-------------------------------------------+
| 1 | tom | *71FF744436C7EA1B954F6276121DB5D2BF68FC07 |
| 2 | jerry | *09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0 |
+----+-------+-------------------------------------------+
MariaDB [(none)]> GRANT ALL ON ftpdb.* TO vsftpuser@
'172.18.%.%'
IDENTIFIED BY
'vsftpuser'
;
MariaDB [ftpdb]> FLUSH PRIVILEGES;
|
修改
pam
配置文件,添加配置
1
2
3
|
# vim /etc/pam.d/vsftpd.mysql
auth required
/usr/lib/security/pam_mysql
.so user=vsftpuser
passwd
=vsftpuser host=172.18.4.70 db=ftpdb table=
users
usercolumn=name passwdcolumn=password crypt=2
account required
/usr/lib/security/pam_mysql
.so user=vsftpuser
passwd
=vsftpuser host=172.18.4.70 db=ftpdb table=
users
usercolumn=name passwdcolumn=password crypt=2
|
添加
虚拟用户
映射用户
1
2
3
4
|
# useradd -s /sbin/nologin -d /ftproot vuser
# chmod -w /ftproot
# mkdir /ftproot/{download,upload} # 建议创建目录在子目录中赋予权限
# chown vuser.vuser /ftproot/{download,upload}
|
注意:CentOS 7后对vsftpd的权限限制更为严格,所以用户家目录不应有写权限,如果需要设置写权限,需在目录下创建子目录即可。
修改其权限保证用户可
进入
可读取
1
|
# chmod go+rx /ftproot/
|
修改配置文件:
/etc/vsftpd/vsftpd.conf
必须选项
1
2
3
4
5
6
7
8
9
|
修改pam认证模块为vsftpd.mysql:
pam_service_name=vsftpd.mysql
保证下面三项开启:
anonymous_enable=YES
local_enable=YES
write_enable=YES
添加:
guest_enable=YES
guest_username=vuser
|
可选选项
1
2
3
4
5
|
chroot_local_user=YES
# 基于安全考虑建议开启
anon_upload_enable=YES
# 用户可上传文件
anon_mkdir_write_enable=YES
#用户科协
anon_other_write_enable=YES
#除了上传和写入的其他权限
# 因为虚拟用户基于匿名用户,所以权限控制可以基于匿名用户使用。
|
设置用户可上传并测试
单独用户权限控制
编辑配置文件:
/etc/vsftpd/vsftpd.conf
添加对应目录:
user_config_dir=/etc/vsftpd/vuser.conf.d
创建对应目录:
mkdir /etc/vsftpd/vuser.conf.d
创建对应用户名的文件:
touch tom jerry
修改文件,添加权限即可
实例:控制
tom
用户可上传,jerry
用户不可上传
1、创建对应目录及修改配置文件
1
2
|
mkdir
/etc/vsftpd/vuser
.conf.d
echo
"user_config_dir=/etc/vsftpd/vuser.conf.d"
>>
/etc/vsftpd/vsftpd
.conf
|
2、设置文件系统及用户权限
1
2
3
|
echo
"anon_upload_enable=YES"
>>
/etc/vsftpd/vuser
.conf.d
/tom
echo
"anon_upload_enable=NO"
>>
/etc/vsftpd/vuser
.conf.d
/jerry
chown
-R vuser.vuser
/ftproot/upload
|
3、重启服务并测试
1
|
systemctl restart vsftpd.service
|
本文转自 赵大鑫 51CTO博客,原文链接:http://blog.51cto.com/xinzong/1767316,如需转载请自行联系原作者