Ftp简介
- 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,由客户端和服务端两部分组成
- 可以操作任意类型的文件,而不用进行进一步的处理,但是有着极高的延时性
- 提供用户认证:本地用户,虚拟用户,匿名用户
- 传输模式:ASCLL传输、二进制传输
- 基于C/S(客户/服务器)架构实现
- 应用于 TCP/IP 模型的第四层, 应用层
- 传输数据使用TCP
- FTP也是一个应用程序,基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。可以使用FTP进行下载和上传。
工作方式:传输一次信息,有多条线路交互的过程,所以有延时
端口
- TCP21 命令:是指文件管理类命令,始终在线的持久性连接,直到用户退出登录为止
- TCP20 数据:是指数据传输,按需创建及关闭的连接
port:主动工作方式,数据主动响应
- FTP客户端的高位随机端口和FTP服务器的TCP21端口建立连接
- 服务端返回一个确认
- 服务器端主动通过自己的TCP20端口连接至客户端的指定端口发送数据
- 客户端返回一个确认
- 服务器断开连接(数据响应后断开连接,并不实时连接)
passive:被动工作方式,数据被动响应
- FTP客户端的高位随机端口和FTP服务器的TCP21端口建立连接
- FTP服务器收到命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求
- 客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送
用户分类
本地用户
- 可以登录系统的真实用户,系统用户通过ftp访问的资源位置为用户的家目录
- 访问特点:用户、密码进行验证后可以访问
虚拟用户
- 仅用于访问某特定服务中的资源,虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录
匿名用户
- 不要求用户事先在该服务器进行登记注册,也不用取得FTP服务器的授权,可以访问公共资源
- 匿名用户的共享资源位置是/var/ftp/pnb
配置
- 安装vsftpd
dnf install vsftpd -y
- 启动服务
systemctl restart vsftbd 启动ftp服务
- 关闭防火墙,Linux
systemctl stop firewalld 关闭防火墙
setenforce 0
- 配置vsftpd
rpm -ql vsftpd 显示ftb的所有文件(配置文件在etc)
vim /etc/vsftpd/vsftpd.conf #主配置文件
connect_from_port_20=YES
参数 值
# recommended! 注释
#chown_uploads=YES 命令
访问个人资源
local_enable=YES 本地用户可以访问(下载)
write_enable=YES 写权限(上传、删除)
local_umask=022 权限掩码
allow_writeable_chroot=YES 允许被禁锢的用户家目录有写权限
chroot_local_user=YES 禁锢所有的ftp本地用户于其家目录中
公共网络资源 /var/ftp/pnb
anonymous_enable=NO 匿名用户启动
write_enable=YES 写权限
anon_upload_enable=YES 匿名用户的上传
anon_mkdir_write_enable=YES 匿名用户上传目录的权限
anon_umask=077 权限掩码
anon_other_write_enable=YES 允许匿名用户删除目录
虚拟用户
基于本地用户可以正常访问,禁锢家目录
chroot_local_user=YES 禁锢所有的ftp本地用户于其家目录中
创建系统用户,禁止系统用户进行登录
useradd -s /sbin/nologin ce 创建账户ce
修改主配置文件,增加以下三个选项
vim /etc/ysftpd/ysftp.d.conf
guest_enable=YES 虚拟用户模式开启
guest_username=ce ce为系统用户(真实本地用户)
yirtuaLuse_local privs=YES 本地虚拟用户特权开启
pam_service_name=ysftpd 设置PAM认证模块使用名称预设为vsftpd
创建虚拟用户
格式为一行用户名,一行密码,示例中abc为用户名redhat为密码
vim /etc/ysftpd/vfile 位置随意(建议在/etc/ysftpd)
ha1 账号
redhat 密码
将虚拟用户文件转换成用户数据库文件
db_load -T-t hash -f /etc/ysftpd/vfile /etc/ysftpd/vfile.db
修改虚拟用户数据库文件权限
shmod 600 /etc/ysftpd/vfile.db
编辑认证配置文件
vim /ets/pam.d/vsftpd
注释掉所有行,并添加以下两行:
auth required pam_userdb.so db=/etc/ysftpd/xfile
account required pam_userdb.so db=/etc/ysftpd/xfile
- 重启服务
systemctl restart vsftpd 重启ftp服务
参数 | 作用 |
---|---|
dirmessage_enable=YES | 目录基本信息 |
xferlog_enable=YES | 上传下载日志 |
connect_from_port_20=YES | 20号数据端口 |
chown_uploads=YES | |
xferlog_file=/var/log/xferlog | 开启日志文件 |
xferlog_std_format=YES | 开启日志标准格式 |
listen=NO | 监听(IPV4) |
listen_ipv6=YES | 监听(IPV6+IPV4) |
pam_service_name=vsftpd | 用户认证模块 |
userlist_enable=YES | 开启用户列表 |
anonymous_enable=YES | 启用匿名用户登录 |
anon_upload_enable=YES | 允许匿名用户上传 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录,但是不能删除 |
local_enable=YES | 启用本地用户登录 |
write_enable=YES | 允许本地用户有写权限 |
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/user_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的时间 |
data_connection_timeout=120 | 设置数据传输超时时间 |
ftpd_banner=“Welcome to chenlf FTP service.” | 定制欢迎信息,登录ftp时自动显示 |
anon_umask | 设置匿名用户创建的文件或目录的遮罩码 |
/etc/vsftpd/ #配置文件目录
/etc/vsftpd/vsftpd.conf #主配置文件
vsftpd常见的配置参数
访问
- 我的电脑
ftp://192.168.203.130
- Linux 命令界面
yum install lftp
lftp 192.168.203.130 -u v1