虚拟用户认证
vsftpd软件包仅140KB
官方站点:http://vsftpd.beasts.org/
主程序:/usr/sbin/vsftpd
服务名:vsftpd
用户控制列表文件
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list //禁止登录的FTP用户列表, 仅提供一份FTP用户列表,是否禁止登录取决于主配置文件中的设置
主配置文件
/etc/vsftpd/vsftpd.conf
ftp的典型消息
由ftp服务器发送消息,这些消息是ftp协议所定义的。下面列出典型的ftp消息:
消息号
125:数据连接打开,传输开始
200:命令OK
226:数据传输完毕
331:用户名OK
425:不能打开数据连接
426:数据连接被关闭,传输被中断
452:错误写文件
500:语法错误,不可识别的命令
FTP用户的类型
匿名用户:anonymous或ftp
本地用户:
帐号名称、密码等信息保存在passwd、shadow文件中
虚拟用户:
使用独立的帐号/密码数据文件
user_list zhangsan 123456 /var/pub
sftpd 功能:
支持基于IP 的虚拟FTP 服务器
支持虚拟用户
支持PAM 或xinetd/tcp_wrappers 的认证方式
支持两种运行方式:独立和Xinetd
支持每个虚拟用户具有独立的配置
支持带宽限制等
在稳定性方面:vsftpd 可以在单机(非集群)上支持4000 个以上的并发用户同时连接。据ftp.redhat.com 的数据,vsftpd 可以支持15000 个并发用户。
在速度方面:下载数据时,vsftpd的速度是WU-FTPd 的两倍;如果Linux的主机使用2.4.X 版本的内核,在千兆以太网上的下载速度可达86Mbytes/sec;
安全性是编写vsftpd 代码的初衷,除了与生俱来的安全性能之外,高速、稳定的性能是vsftpd 的两个特性
文本模式和二进制模式
文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。
二进制模式用来传送可执行文件,压缩文件,和图片文件。如果你用ASCII模式传,会显示一堆乱码,你必须重新用BINARY模式传。用HTML和文本编写的文件必须用ASCII模式上传,用BINARY模式上传会破坏文件,导致文件执行出错。
FTP双TCP连接方式
控制连接:
用于在FTP客户端和FTP服务器之间传输FTP控制命令及命令执行信息;
控制连接在整个FTP会话期间一直保持打开
数据连接:
用于传输数据,包括数据上传、下载、文件列表发送等;
数据传输结束后数据连接将终止
主动连接
主动方式也称为PORT方式,是FTP协议最初定义的数据传输连接方式。
主要特点是:
FTP客户端通过向FTP服务器发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号;
当需要传送数据时,服务器通过TCP端口号20与客户端的临时端口建立数据传输通道,完成数据传输;
在建立数据连接的过程中,由服务器主动发起连接,因此被称为主动方式
被动连接
被动方式也称为PASV方式,被动方式的主要特点是:
FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动方式。服务器选择临时端口号并告知客户端
当需要传送数据时,客户端主动与服务器的临时端口号建立数据传输通道,完成数据传输
在整个过程中,由于服务器总是被动接收客户端的数据连接,因此被称为被动方式;
临时端口号(20*256+245=5365)
验证anonymous
匿名用户的下载目录/var/ftp/pub
本地用户登陆
本地用户登录后会进入用户主目录
能够切换目录
所有的ftp控制命令
umask022
dirmessage
定义logfie文件
目录可写writeable
ftpd_banner
ascii_upload
默认情况下,vsftpd 为了提高传输效率,禁止了ASCII 传输方式。虽然在ftp 客户软件中可以使用asc命令,但是传输文件时仍然使用二进制传输方式。
系统banner
vi /etc/issue
最大传输速度max_rate
设置最大传输速率限制
例如下面的配置:
local_max_rate=50000
anon_max_rate=30000
将使本地用户的最大传输速率为50kbytes/sec,匿名用户的传输速率为30kbytes/sec。
userlist用户控制
将test01加进user_list
测试黑名单
将test01加进user_list
添加test02用户,不在列表中
可正常访问
测试白名单
所有用户限制在家目录
在默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围内进行下载和上传;
如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot 选项
指定用户chroot_list
验证明文传输
max_per_ip
chown_username
session_timeout
1. 设置空闲的用户会话的中断时间
例如下面的配置:
idle_session_timeout=600
将在用户会话空闲10 分钟后被中断。
2. 设置空闲的数据连接的的中断时间
例如下面的配置:
data_connection_timeout=120
将在数据连接空闲2 分钟后被中断。
3. 设置客户端空闲时的自动中断和激活连接的时间
例如下面的配置:
accept_timeout=60
connect_timeout=60
将使客户端空闲1 分钟后自动中断连接,并在中断1 分钟后自动激活连接。
设置客户端连接时的端口范围
例如下面的配置:
pasv_min_port=50000
pasv_max_port=60000
将使客户端连接时的端口范围在50000 和60000 之间。这提高了系统的安全性。
nopriv_user
运行 vsftpd 需要的非特权系统用户,缺省是nobody
listen
listen=YES ( 如果设置为 YES , 则 vsftpd 将以独立模式运行,由vsftpd自己监听和处理连接请求)
tcp_wrappers
使用 tcp_wrappers 作为主机访问控制方式
表明服务器使用 tcp_wrappers 作为主机访问控制方式,tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制,在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制,前者设置允许访问记录,后者设置拒绝访问记录。
虚拟用户基于本地pam认证
1.建立虚拟FTP用户的帐号数据库文件
2.创建FTP根目录及虚拟用户映射的系统用户
3.建立支持虚拟用户的PAM认证文件
4.在vsftpd.conf文件中添加支持配置
[root@localhost ~]# vim/etc/vsftpd/vsftpd.conf
虚拟用户映射为本地用户
虚拟FTP账户访问测试
5.为个别虚拟用户建立独立的配置文件
虚拟FTP账户访问测试
配置基于mysql认证
一、安装所需要程序
1、安装mysql和pam_mysql
# yum -y install mysql-server mysql-devel pam_mysql vsftpd
注意:pam_mysql由epel源提供。
二、创建虚拟用户账号
1.准备数据库及相关表
首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。
mysql> create database vsftpd;
mysql> grant select on vsftpd.* tovsftpd@localhost identified by 'www.magedu.com';
mysql> grant select on vsftpd.* [email protected] identified by 'www.magedu.com';
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (
idint AUTO_INCREMENT NOT NULL,
namechar(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 /lib/security/pam_mysql.souser=vsftpd passwd=www.magedu.com host=127.0.0.1 db=vsftpd table=usersusercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.souser=vsftpd passwd=www.magedu.com host=127.0.0.1 db=vsftpd table=usersusercolumn=name passwdcolumn=password crypt=2
注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
2.修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /var/ftprootvuser
# 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}
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
测试
magedu1 magedu2
日志排查
tail/var/log/secure
本文出自 “网络技术交流学习” 博客,谢绝转载!