FTP文件传送协议,FTP使用两个并行TCP连接,一个控制连接,一个数据连接,控制连接用于在客户机和服务器之间发送控制信息,比如用户和密码,改变远程目录和命令,上传下载文件等,数据连接用于 真正发送数据。ftp有两种工作模式,主动模式(Active),被动模式(Passive)。
1)主动模式
在主动模式下,客户端随机tcp端口连接服务器的tcp21端口请求建立控制连接,tcp三次握手建立连接,需要数据连接时,然后客户端用控制连接告诉服务器可以用于数据连接的tcp端口,然后服务器用tcp20端口与客户端告知的tcp端口建立数据连接,连接方向从服务器到客户端。
2)被动模式
在被动模式下,客户端随机tcp端口连接服务器的tcp21端口请求建立控制连接,tcp三次握手建立连接,需要数据连接时,客户端通过控制连接告诉服务器进入被动传输模式,服务器告诉客户端可以使用的数据连接端口,客户端随机使用端口与告知的服务器端口建立连接,连接方向客户端到服务器。
1.1vsftpd
vsftpd(Very Secure FTP)在安全性,稳定性,高速上表现不错。
vsftpd安装
yum -y install vsftpd1.2vsftpd配置
配置文件/etc/vsftpd/vsftpd.conf,用户必须在配置文件中有上传功能和对应目录权限中有写权限才能上传文件。
匿名用户的配置:
anonymous_enable=YES:是否启动匿名登录anon_upload_enable=YES:是否能上传文件
anon_mkdir_write_enable=YES:是否能创建文件
anon_ohter_write_enable=YES:是否有其他权限例如删除文件等系统用户的配置:
local_enable=YES:是否本地用户登录write_enable=YES:是否能上传
local_umask=022 :上传文件权限设定禁锢所有的ftp本地用户于其家目录中:
chroot_local_user=YES禁锢文件中指定的ftp本地用户于其家目录中:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list日志:
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog改变上传文件的属主:
chown_uploads=YES
chown_username=whoevervsftpd使用pam完成用户认证,其用到的pam配置文件:
pam_service_name=vsftpd是否启用控制用户登录的列表文件
userlist_enable=YES
userlist_deny=YES|NO默认文件为/etc/vsftpd/user_list
连接限制:
max_clients: 最大并发连接数;
max_per_ip: 每个IP可同时发起的并发请求数;传输速率:
anon_max_rate: 匿名用户的最大传输速率, 单位是“字节/秒”;
local_max_rate: 本地用户的最大传输速率, 单位是“字节/秒”;匿名用户登录默认用户名ftp和anonymous。有效用户包括本地用户和虚拟用户,本地用户:vsftpd所在主机中/etc/passwd中的用户和密码作为认证来源,这是默认配置;虚拟用户:vsftpd将用户的信息保存在本地数据文件,Mariadb或者mysql中,虚拟用户只能访问FTP服务器的资源,加大了安全性。下边说下本地数据文件实现虚拟用户访问。
1)过本地数据文件实现虚拟用户访问,这种方法适用于用户比较少和变化不频繁情况下。
yum -y install db4-utils 安装生成数据库的软件包 useradd -d /var/ftp/userdir -s /sbin/nologin vftpuser 生成本地映射用户,/var/ftp/userdir目录权限700 修改/etc/vsftpd/vsftpd.conf文件,如下 guest_enable=YES 允许虚拟用户登录 guest_username=user 将虚拟用户映射成本地vftpuser用户 pam_service_name=vsftp.vu 将PAM配置文件指定生成虚拟用户文件
vim /etc/vsftpd/vftpuser.txt 建立用户文件 user1 虚拟用户 123 密码 user2 456将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件
db_load –T –t hash –f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.dbchmod 600 vfspuser.db新建一个虚拟用户的PAM文件,加入下边两行内容
vim /etc/pam.d/vsftpd.vu auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
重新加载配置完成
service vsftpd reload
2)通过MySQL实现虚拟用户访问
对于FTP服务器虚拟用户非常多或者变化比较频繁时,使用MySQL数据库可以发挥数据库操作灵活的优势,配置方法如下。
安装MySQL服务器软件包
yum -y install mysql-devel* yum -y install mysql-server*使用mysqladmin创建MySQL管理员和密码
mysqladmin -u root password redhat 建立用户root密码是redhat
·使用root用户登录MySQL数据库,建立虚拟用户的数据库和表然后加入虚拟用户tom 和tony
mysql -u root -p 登录mysql create database vftpuser; 建立数据库vftpuser use vftpuser; 进入数据库 create table users(name char(16) binary,pwd char(16) binary); 建立表user insert into users(name,pwd) values (‘tom’,password(‘123’)); 建立用户记录 insert into users(name,pwd) values (‘tony’,password(‘123’)); 建立用户记录 select * from users 查看表信息处于安全的考虑,在登录mysql数据库是,不应使用root,建立一个专门读取数据库中users表的用户
grant select on vftpuser.users to vsqluser@localhost identified by ‘redhat’; flush privileges生成本地映射用户,修改配置文件
useradd -d /var/ftp/userdir -s /sbin/nologin vftpuser 生成本地映射用户 修改/etc/vsftpd/vsftpd.conf文件,如下 guest_enable=YES 允许虚拟用户登录 guest_username=user 将虚拟用户映射成本地vftpuser用户 pam_service_name=vsftp.vu 将PAM配置文件指定安装mysql的PAM认证模块,并配置
重启vsftpd后可使用tom和tony登录FTP服务器。yum -y pam_mysql* vim /etc/pam.d/vsftp.vu 加入下列内容 auth required /lib/security/pam_mysql.so user=vsqluser password=redhat host=localhost db=vftpuser table=users usercolum=name passwordcolumn=pwd crypt=2 account required /lib/security/pam_mysql.so user=vsqluser password=redhat host=localhost db=vftpuser table=users usercolum=name passwordcolumn=pwd crypt=2 crypt指定密码以什么方式保存到数据库中 =0时以明文保存, =1时使用crypt()函数加密保存, =2时使用mysql中的password()函数加密保存, =3时使用md5方式保存。
原文地址:http://jianchixuexi.blog.51cto.com/4026260/1675750