vsftp匿名用户,本地用户,虚拟用户+mysql认证详情配置
一,简介
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。注意这个是linux系统上必须掌握的基础服务之一。工作中各种上传下载都要用到它。--松鼠&青蛙
下面数据传输端口计算227*256+73
用户认证分为匿名用户,本地用户,虚拟用户:
nsswitch:network server switch,名称解析框架
配置文件:/etc/nsswitch.conf
模块:/lib64/libnss*,/usr/lib64/libnss*
pam:pluggable authentication module,用户认证框架
模块:/lib64/security
配置文件:/etc/pam.conf,/etc/pam.d/*
匿名用户:Anonymous
本地用户:
虚拟用户:仅用于访问某特定服务中的资源
配置文件
centos 6.5 vsftpd
/etc/logrotate.d/vsftpd 完成日志滚动
/etc/pam.d/vsftpd 用户认证配置文件
/etc/rc.d/init.d/vsftpd 服务脚本
/etc/vsftpd 配置文件
/var/ftp匿名用户共享资源位置 ftp用户家目录就是/var/ftp/
系统用户通过ftp访问的资源的位置:用户自己的家目录
虚拟用户用过ftp访问的资源的位置:给虚拟用户指定的映射成为的系统用户的家目录
二,匿名用户配置
anonymous_enable=YES 启用匿名用户
anon_upload_enable=YES 匿名用户上传权限
anon_mkdir_write_enable=YES 匿名创建目录权限
anon_other_write_enable=YES 匿名删除文件权限
注意还必须给匿名用户主目录授权
setfacl -m u:ftp:rwx /var/ftp/pub/ 给匿名用户目录权限读写权限
三,本地用户配置
local_enable=YES 本地用户上传文件
write_enable=YES
local_umask=022 本地用上传文件默认的文件权限
禁锢所有的ftp本地用户于其家目录中
chroot_local_user=YES
或只锁定指定用户与其家目录中
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 在此文件中锁定用户
信息验证查看
cat /var/log/secure用户登录验证信息
其他设置
给关键目录添加警告说明提示信息
dirmessage_enable=YES目录消息用户访问目录是反馈的信息
在ftp对应的目录下echo "hello world" > .message
日志:
传输日志put,get的user信息
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES指定日志格式
用户上传文件属主
chown_uploads=YES 是否改变上传文件的属主
chown_username=whoever 改成哪个系统用户
空闲会话超时时长
idle_session_timeout=600
数据链接超时时长
data_connection_timeout=120
不建议启用:文本格式上传下载;强制如果本来是二进制程序,上传下载会出现问题。
#ascii_upload_enable=YES
#ascii_download_enable=YES
欢迎信息
#ftpd_banner=Welcome to blah FTP service.
黑白名单控制
vsftpd使用pam完成用户认证,其用到的pam配置文件 /etc/vsftpd/ftpusers黑名单
pam_service_name=vsftpd
[root@localhost pam.d]# cat vsftpd
#%PAM-1.0
会话session optional pam_keyinit.so force revoke
认证auth requiredpam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed(终止)黑名单
auth requiredpam_shells.so
auth includepassword-auth
账号account includepassword-auth
session required pam_loginuid.so
session includepassword-auth
vsftpd不使用pam自己控制用户登录的列表文件/etc/vsftpd/user_list
userlist_enable=YES是否启用这个文件控制用户登录
userlist_deny=YES|NO 出现在这个文件中的用户就拒绝或允许
速率限制
链接限制:
max_clients:最大并发连接数
max_per_ip:每个ip可同时发起的并发请求数;
传输速率:
anon_max_rate:所有匿名用户的一共最大传输速率,单位是"字节/秒"
local_max_rate:本地用户
四,虚拟用户
所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;各虚拟用户可被赋予不用的访问权限:通过匿名用户的权限控制参数进行指定;
虚拟用户账号的存储方式;
文件:编辑文件
奇数行为用户
偶数行为密码
此文件需要被编码为hash格式
关系型数据库中的表中:
计数查询数据库完成用户认证;
mysql库,此时pam要依赖pam_mysql模块
pam_mysql的使用说明
配置文档
一、安装所需要程序
1、安装mysql和pam_mysql
# yum -y install mysql-server mysql-devel pam_mysql
注意:pam_mysql由epel源提供。
二、创建虚拟用户账号
1.准备数据库及相关表
首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'www.magedu.com';
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'www.magedu.com';
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (
id int AUTO_INCREMENT NOT NULL,
name char(20) binary NOT NULL,
password char(48) binary NOT NULL,
primary key(id)
);
2、添加测试的虚拟用户
根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。
mysql> insert into users(name,password) values('magedu1',password('magedu'));
mysql> insert into users(name,password) values('magedu2',password('magedu'));
三、配置vsftpd
1.建立pam认证所需文件
#vi /etc/pam.d/vsftpd.mysql
添加如下两行
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
crypt (plain)
The method to encrypt the user's password:
0 (or "plain") = No encryption. Passwords stored in plaintext.
HIGHLY DISCOURAGED. 没加密
1 (or "Y") = Use crypt(3) function. 加密的
2 (or "mysql") = Use MySQL PASSWORD() function. It is possible
that the encryption function used by PAM-MySQL
is different from that of the MySQL server, as
PAM-MySQL uses the function defined in MySQL's
C-client API instead of using PASSWORD() SQL function
in the query. MySQL PASSWORD()加密的
3 (or "md5") = Use plain hex MD5.
4 (or "sha1") = Use plain hex SHA
注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
2.修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /var/ftproot vuser -s为了不让用户登录
# chmod go+rx /var/ftproot 其他用户能读能进入
请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES
guest_username=vuser
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
四、启动vsftpd服务
# service vsftpd start
# chkconfig vsftpd on
查看端口开启情况
# netstat -tnlp |grep :21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 23286/vsftpd
使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win Box上用IE或者FTP客户端工具登录验正
# ftp localhost
五、配置虚拟用户具有不同的访问权限。本地用户映射到虚拟用户其实是匿名用户权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
1、配置vsftpd为虚拟用户使用配置文件目录
# vim vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config
2、创建所需要目录,并为虚拟用户提供配置文件
# mkdir /etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch tom jerry
3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
pam验证
1.生成虚拟用户口令库文件。为了建立此口令库文件,先要生成一个文本文件。该文件的格式如下,单数行为用户名,偶数行为口令:
#vi account.txt
magedu1
magedu
magedu2
magedu
2.生成口令库文件,并修改其权限:
#db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
#chmod 600 /etc/vsftpd/account.db
3.新建一个虚拟用户的PAM文件。加上如下两行内容:
#vi /etc/pam.d/vsftp.pam
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib/security/pam_userdb.so db=/etc/vsftpd/account
4,建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /var/ftproot vuser -s为了不让用户登录
# chmod go+rx /var/ftproot 其他用户能读能进入
pam_service_name=vsftp.pam
本文转自 吃草的青蛙 51CTO博客,原文链接:http://blog.51cto.com/tlinux/1721981,如需转载请自行联系原作者