FTP: File Transfer Protocol, 应用层协议,监听在21/tcp, ftp协议是明文的
FTP的两个连接:
命令连接: 文件管理类命令,始终在线的连接
数据连接: 数据传输,按需创建及关闭的连接
主动: 由服务器创建连接 命令: Client:50000 --> Server: 21 数据: Client: 50000+1 <-- Server: 20/tcp 被动: 由客户端创建连接 命令: Client:50000 --> Server: 21 数据: Client: 50000+1 --> Server: 随机端口
服务器端程序有:
wu-ftpd: vsftpd: Very Secure ftp Daemon proftp: pureftpd FileZilla Serv-U
客户端程序有:
CLI: ftp lftp, lftpget GUI: gftp Flashftp cuteftp filezilla gftp(Linux GUI)
安装服务器端vsftpd程序:
yum install vsftpd -y //这里是192.168.1.102作为vsfptd服务器
安装客户端ftp程序:
yum install ftp -y //这里是192.168.1.104作为客户端进行测试
服务器端程序vsftpd程序相关文件组成
用户认证配置文件: /etc/pam.d/vsftpd
服务脚本: /etc/rc.d/init.d/vsftpd
配置文件目录: /etc/vsftpd
主配置文件: /vsftpd.conf
匿名用户(映射为ftp用户)共享资源位置: /var/ftp
系统用户通过ftp访问的资源的位置: 用户自己的家目录
虚拟用户通过ftp访问的资源的位置: 给虚拟用户指定的映射成为的系统用户的家目录
主程序: /usr/sbin/vsftpd
vsftpd配置文件及相关配置: /etc/vsftpd/vsftpd.conf
<style></style>匿名用户的配置:<style></style>
anonymous_enable=YES //允许匿名用户登录 anon_upload_enable=YES //允许匿名用户上传文件 anon_mkdir_write_enable=YES //允许匿名用户创建目录 anon_other_write_enable=YES //允许匿名用户执行delete,rmdir等这些操作
系统用户的配置:
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 //让本地用户登录后执行pwd命令后看到的都是”/“,而不是自己的家目录
日志: xferlog_enable=YES xferlog_std_format=YES xferlog_file=/var/log/xferlog
改变上传文件的属主 chown_uplodads=YES chown_username=whoever
vsftpd使用pam完成用户认证,其用到的pam配置文件: pam_service_name=vsftpd
是否启用控制用户登录的列表文件: userlist_enable=YES //是否开启控制用户登录的功能,下面选项读取的是/etc/vsftpd/user_list文件 userlist_deny=YES|NO //如果为YES,user_list中的用户就不能登录,为黑名单; 如果为NO,user_list中的用户就可以登录,为白名单
连接限制: max_clients: 最大并发连接数; max_per_ip: 每个IP可同时发起的并发请求数
传输速率: anno_max_rate: 匿名用户的最大传输速率,单位是“字节/秒” local_max_rate: 本地用户的最大传输速率
虚拟用户:所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录
各虚拟用户可被赋予不同的访问权限 通过匿名用户的权限控制参数进行指定
虚拟用户账号的存储方式:
1.文件: 编辑文件
奇数行为用户
偶数行为密码
但是此文件需要被编码为hash格式,所以修改不是很方便
2.关系型数据库中的表中:
即时查询数据库完成用户认证
vsftpd是基于pam认证用户的,所以pam要依赖于pam-mysql模块,没有这个模块所以要安装第三方程序:EPEL源中的pam_mysql
vsftpd基于mysql进行用户认证
1. 安装pam_mysql及mysql客户端
这里以192.168.1.102作为vsftpd服务器:
安装mysql客户端: yum install mysql -y
安装pam_mysql依赖包: yum install pam_mysql
2. 创建虚拟用户账号
1. 准备数据库及相关表 这里准备的是192.168.1.105上安装的mariadb数据库,并且已经正常启动,建立存储虚拟用户的数据库,比如这里将其创建为vsftpd数据库
mysql> CREATE DATABASE vsftpd;
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'192.168.1.%' IDENTIFIED BY 'www.alen.com';
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'www.alen.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)
-> );
在vsftpd服务器上测试连接mysql服务器:# mysql -uvsftpd -h 192.168.1.105 -pwww.alen.com
2. 添加测试的虚拟用户 根据需要添加所需要的用户,这里将其密码为了安全应该使用PASSWORD函数加密后存储 mysql> INSERT INTO users(name,password) VALUES('tom',PASSWORD('alen'));
mysql> INSERT INTO users(name,password) VALUES('jerry',PASSWORD('alen'));
3. 配置vsftpd
1. 建立pam认证所需文件 # vi /etc/pam.d/vsftpd.mysql 添加如下两行:crypt的值参照rpm -q pam_mysql命令结果中的readme文档中的crypt条目0:明文 2: 数据库password加密的方式 auth required /lib/security/pam_mysql.so user=vsftpd passwd=www.alen.com host=192.168.1.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=www.alen.com host=192.168.1.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注意: 由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
2. 修改vsftpd的配置文件,使其适应mysql认证 建立虚拟用户映射的系统用户及相应目录 # useradd -s /sbin/nologin -d /var/ftproot vuser //-d ftpserver/pub 可以是一个单独的文件系统 # chmod go+rx /var/ftproot 确保/etc/vsftpd.conf中已经启用了以下选项 anonymous_enable=YES 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
4. 启动vsftpd服务
# service vsftpd start # chkconfig vsftpd on 查看端口开启情况 # netstat -tnlp | grep :21 使用虚拟用户登录,验证配置结果,以下为在192.168.1.104上的命令方式测试,你也可以在其他Win Box上用IE或者FTP客户端工具登录验证 # ftp 192.168.1.102
5. 配置虚拟用户具有不同的访问权限
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/ anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} ano_other_write_enable={YES|NO}
补充:
其他下载工具 :axel, lftpget, wget, curl
<style></style>