vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。比如:
1.非常高的安全性需求
2.带宽限制
3.良好的可伸缩性
4.创建虚拟用户的可能性
5.IPv6支持
6.中等偏上的性能
7.分配虚拟 IP 的可能性
8.高速
简单介绍下ftp:
FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。
数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。
FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式:PORT方式(主动方式)和PASV方式(被动方式)
一、vsftpd简介
安装vsftpd
yum -y install vsftpd
1.vsftpd的各个配置文件说明
/etc/vsftpd/vsftpd.conf | 主配置文件 |
/usr/sbin/vsftpd | Vsftpd的主程序 |
/etc/rc.d/init.d/vsftpd | 启动脚本 |
/etc/pam.d/vsftpd | PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户) |
/etc/vsftpd/ftpusers | 禁止使用vsftpd的用户列表文件。记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。 |
/etc/vsftpd/user_list | 禁止或允许使用vsftpd的用户列表文件。这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅允许user_list中指定的用户访问FTP服务器。 |
/var/ftp | 匿名用户主目录;本地用户主目录为:/home/用户主目录,即登录后进入自己家目录 |
/var/ftp/pub | 匿名用户的下载目录,此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除) |
/etc/logrotate.d/vsftpd.log | Vsftpd的日志文件 |
2.vsftpd的主配置文件/etc/vsftpd/vsftpd.conf说明
2.1 限制最大连接数和传输速率
#max_clients //用于设置FTP服务器所允许的最大客户端连接数,值为0时表示不限制 #max_per_ip //用于设置对于同一IP地址允许的最大客户端连接数,值为0时表示不限制。 #anon_max_rate // 用于设置匿名用户的最大传输速率,单位为B/s(字节/秒),值为0表示不限制 #local_max_rate //用于设置本地用户的最大传输速率,单位为B/s(字节/秒),值为0表示不限制
2.2 控制登录用户的机制
(1)设置禁止登录的用户账号(黑名单)
当vsftpd.conf配置文件中包括以下设置时,vsftpd.user_list文件中的用户账号被禁止进行FTP登录:
userlist_enable=YES userlist_deny=YES //默认是YES状态(可以不写) YES表示vsftpd.user_list文件用于设置禁止的用户账号。
(2)设置只允许登录的用户账号(白名单)
当vsftpd.conf配置文件中包括以下设置时,只有vsftpd.user_list文件中的用户账号能够进行FTP登录:
userlist_enable=YES userlist_deny=NO
2.3修改默认端口
默认FTP服务器端口号是21,出于安全目的,有时需修改默认端口号,修改/etc/vsftpd/vsftpd.conf,添加语句:
listen_port=4449
2.4设置用户组
#mkdir -p /home/try //递归创建新目录 #groupadd try //新建组 #useradd -g try -d /home/try try1 //新建用户try1并指定家目录和属组 #useradd -g try -d /home/try try2 //新建用户try2并指定家目录和属组 #useradd -g try -d /home/try try3 //新建用户try3并指定家目录和属组 #passwd try1 //为新用户设密码 #passwd try2 //为新用户设密码 #passwd try3 //为新用户设密码 #chown try1 /home/try //设置目录属主为用户try1 #chown .try /home/try //设置目录属组为组try #chmod 750 /home/try //设置目录访问权限try1为读,写,执行;try2,try3为读,执行
由于本地用户登录FTP服务器后进入自己主目录,而try1,try2 try3对主目录/home/try分配的权限不同,所以通过FTP访问的权限也不同,try1访问权限为:上传,下载,建目录;try2,try3访问权限为下载,浏览,不能建目录和上传。
实现了群组中用户不同访问级别,加强了对FTP服务器的分级安全管理。
2.5 欢迎信息的定义:
#banner_file //写入欢迎词 #dirmessage_enable=yes //显示.messages文件中的欢迎信息。可以在ftp可访问的目录下创建.messages文件
2.6 匿名用户的配置:
#anonymous_enable=YES //启用匿名用户登录 #anon_upload_enable=YES //匿名用户可以上传 #anon_other_write_enable=YES //匿名用户有其他写操作的权限,如更新,删除 #anon_mkdir_write_enable=YES //匿名用户可以创建目录 //注意:启用写入功能时,ftp用户对相应的本地文件系统也有相应的写入权限; //生效的权限取决于文件系统权限和服务权限的交集;
2.7 修改匿名用户上传文件的属主和属组:
#chown_uploads=YES #chown_username=someuser
二、基于mysql认证的虚拟用户
1、安装mysql和pam_mysql
# yum -y install mysql-server mysql-devel pam_mysql
2、创建虚拟用户账号
1.准备数据库及相关表,添加测试的虚拟用户
3、配置vsftpd
1.建立pam认证所需文件
#vim /etc/pam.d/vsftpd.mysql auth required /lib64/security/pam_mysql.so user=vsftpd passwd=admin host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /lib64/security/pam_mysql.so user=vsftpd passwd=admin host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
crypt=0,口令以明文方式(不加密)保存在数据库中;
crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;
crypt=2,口令经过MySQL的password()函数加密后保存。
2.修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
[root@stucw vsftpd]# useradd -s /sbin/nologin -d /var/ftproot vuser [root@stucw vsftpd]# chmod 777 /var/ftproot
编辑/etc/vsftpd/vsftpd_conf确保已经启用了以下选项
3.启动vsftpd服务
[root@stucw vsftpd]# service vsftpd restart
4.配置虚拟用户具有不同的访问权限
1、配置vsftpd为虚拟用户使用配置文件目录
[root@stucw ~]# vim /etc/vsftpd/vsftpd.conf 添加如下选项 user_config_dir=/etc/vsftpd/vusers_config
2、创建所需要目录,并为虚拟用户提供配置文件
[root@stucw ~]# mkdir /etc/vsftpd/vusers_config/ [root@stucw ~]# cd /etc/vsftpd/vusers_config/ [root@stucw ~]# touch tom luxi
3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件,创建目录的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。
anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES