FTP 简介
FTP 是文件传输协议,用于internet 上的控制文件的双向传输
ftp主要有三种用户:
列表内容
虚拟用户:仅用于访问某特定服务中的资源
系统用户
匿名用户
ftp有2种数据连接模式:命令连接和数据连接
FTP架构
FTP工作用于应用层,监听于TCP的21号端口,是一种C/S架构的应用程序
FTP数据的两种连接模式:
命令连接:指文件管理类命令,始终在线的持久性连接,直到用户退出登录为止
数据连接:指数据传输,按需创建及关闭连接
数据的传输模式分两种:
主动模式:首先是命令连接,客户端以一个(大于1023)的随机端口来连接服务器的21号端口,然后就是数据连接,服务器以自己的20号端口去连客户端创建命令连接时使用的随机端口+1的端口号
被动模式:由客户端创建数据连接,客户端以一个随机端口来连接服务器的21号端口,进行命令连接。数据连接是以客户端进行命令连接时创建的(随机端口+1)的端口号去连接服务器的一个随机端口
*主动模式有一个弊端,客户端的端口是随机的,客户端如果开了防火墙,服务器端去连接客户端创建数据连接时可能会被拒绝
/etc/pam.d/vsftpd //vsftpd用户认证 配置文件
/etc/vsftpd/ //配置文件目录
/etc/vsftpd/vsftpd.conf //主配置文件
//匿名用户(映射为ftp用户)的共享资源位置是 /var/ftp
//系统用户通过ftp访问的资源位置为用户的家目录
//虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录
vsftpd常见的配置参数
参数 | 作用 |
---|---|
anonymous_enable=YES | 启用匿名用户登录 |
anon_upload_enable=YES | 允许匿名用户上传 |
anon_nkdir_write_enable=YES | 允许匿名用户创建目录,但是不能删除 |
anon_other_write_enable=YES | 允许匿名用户创建和删除目录 |
local_enable=YES | 启用本地用户登录 |
write_enable=YES | 允许本地用户有写权限 |
local_umask=022 | 通过ftp上传文件的默认遮罩码 |
chroot_list_enable=YES | 开启禁锢文件列表,需要与chroot_list_file参数一起使用 |
chroot_list_file=/etc/vsftpd/chroot_list | 指定禁锢列表文件路径,在此文件里面的用户将被禁锢在其家目录中 |
allow_writeable_chroot=YES | 允许被禁锢的用户家目录有写权限 |
xferlog_enable=YES | 是否启用传输日志,记录ftp传输过程 |
xferlog_std_format=YES | 传输日志是否使用标准格式 |
xferlog_file=/var/log/xferlog | 指定传输日志存储的位置 |
chown_uploads=YES | 是否改变上传文件属主的功能 |
chown_username=whoever | 指定要将上传的文件的属主改为哪个用户,此用户必须是系统中存在的 |
pam_service_name=vsftpd | 指定vsftpd使用/etc/pam.d下的哪个pam配置文件进行用户认证 |
userlist_enable=YES | 是否启用控制用户登录的列表文件:默认为/etc/vsftpd/use_list文件 |
userlist_deny=YES | 是否拒绝userlist指定的列表文件中存在的用户登陆ftp |
max_clients=# | 最大并发连接数 |
max_per_ip=# | 每个IP可同时发起的并发请求数 |
anon_max_rate | 匿名用户的最大传输速率,单位是"字节/秒" |
local_max_rate | 本地用户的最大传输速率,单位是"字节/秒" |
dirmessage_enable=YES | 启用某目录下的。message描述信息,假定有一个目录为/upload,在其下创建一个文件名为.message,在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示。message文件中的内容 |
message_file | 设置访问一个目录时获得的目录信息文的文件名默认是.message |
idle_session_timeout=600 | 设置默认的断开不活跃session的时间 |
date_connection_timeout=120 | 设置数据传输超时时间 |
ftpd_banner=“Welcome to c henlf FTP service.” | 定制欢迎信息,登录ftp时自动显示 |
*** 虚拟用户账号的存储方式 **:
1.文件:编辑文件,此文件需要被编码为hash格式
奇数行为用户名,偶数行为密码
2.关系型数据库的表中:
通过即使查询数据库完成用户认证
mysql库:pam要依赖于pam_mysql软件,可通过epel源yum安装
配置vsftpd虚拟用户配置
安装依赖程序
初始环境没有yum仓库,在此可用网络源下载:
[root@vsftp-server ~]# mv /etc/yum.repos.d/* /opt/
[root@vsftp-server /]# cd /etc/yum.repos.d/
[root@vsftp-server yum.repos.d]# curl -o 163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
[root@vsftp-server yum.repos.d]# sed -i "s#\$releasever#7#g" 163.repo
[root@vsftp-server yum.repos.d]# sed -i "s#enabled=0#enabled=1#g" 163.repo
[root@vsftp-server yum.repos.d]# yum clean all
[root@vsftp-server yum.repos.d]# yum install -y epel-release
[root@vsftp-server /]# yum install -y vsftpd //安装vsftp服务
创建文本格式的用户名,密码列表
[root@vsftp-server yum.repos.d]# cd /etc/vsftpd/
[root@vsftp-server vsftpd]# touch vu.list
[root@vsftp-server vsftpd]# vim vu.list
[root@vsftp-server vsftpd]# cat vu.list //添加了一个用户名,下面是用户对应的密码
chens
123
安装db4工具
[root@vsftp-server ~]# yum install -y db4*
将刚创建的文本格式用户名,密码文件使用db4工具转成数据库文件
[root@vsftp-server ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
/// -T 表示转换 -t 表示加密方式使用hash算法加密
设置文件权限为600,以避免数据外泄
[root@vsftp-server ~]# chmod 600 /etc/vsftpd/vu.*
[root@vsftp-server ~]# ll /etc/vsftpd/vu*
-rw-------. 1 root root 12288 Aug 8 07:17 /etc/vsftpd/vu.db
-rw-------. 1 root root 10 Aug 8 07:11 /etc/vsftpd/vu.list
添加虚拟用户的映射账号,创建ftp根目录。
[root@vsftp-server ~]# useradd -d /opt/six -s /sbin/nologin vftp // -d 指定用户的家目录 -s 指定用登录的shell nologin 此处表示不允许登陆
[root@vsftp-server ~]# chmod 755 /opt/six/
为虚拟用户建立PAM认证
[root@vsftp-server ~]# mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
[root@vsftp-server ~]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
修改vsftpd配置文件,添加虚拟用户支持
[root@vsftp-server ~]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES //允许所有人访问
guest_username=vftp //允许通过用户名vftp访问
user_config_dir=/etc/vsftpd/vusers_dir //与虚拟用户建立映射关系
allow_writeable_chroot=YES //允许用户家目录有写权限
为不同的虚拟用户建立独立的配置文件,并设置虚拟用的权限
[root@vsftp-server vsftpd]# mkdir vusers_dir
[root@vsftp-server vsftpd]# vim /etc/vsftpd/vusers_dir/chens
[root@vsftp-server vusers_dir]# cat chens
anon_upload_enable=YES //允许匿名用户上传
anon_mkdir_write_enable=YES //允许匿名用户创建目录权限
anon_umask=022 //设置匿名用户的umask权限
anon_other_write_enable=YES //允许匿名用户创建和删除目录
关闭防火墙,关闭SELINUX ,启动服务
[root@vsftp-server ~]# systemctl stop firewalld //关闭防火墙
[root@vsftp-server ~]# systemctl disable firewalld //开机不启动防火墙
[root@vsftp-server ~]# setenforce 0 //关闭selinux
[root@vsftp-server ~]# sed -i 's#^SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux //修改配置文件,开机不启动selinux
[root@vsftp-server ~]# systemctl start vsftpd //启动服务