简介
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。互联网上提供文件存储和访问服务的计算机,他们依照的是FTP协议提供服务!支持FTP协议的服务器就是FTP服务器!FTP协议提供存储和传输服务的一套协议。下载”(Download)和”上传”(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
工作原理
FTP采用客户端/服务端的工作模式(C/S结构),通过TCP协议建立客户端和服务器之间的连接,但与其他大多数应用协议不同,FTP协议在客户端和服务端之间建立了两条通信链路,分别是控制链路和数据链路,其中,控制链路负责FTP会话过程中FTP命令的发送和接收,数据链路则负责数据的传输。FTP会话包含了两个通道,控制通道和数据通道,FTP的工作有两种方式,一种是主动模式,一种是被动模式,以FTPServer为参照物,主动模式,服务器主动连接客户端传输,被动模式,等待客户端的的连接 。(无论是主动模式还是被动模式,首先的控制通道都是先建立起来的,只是在数据传输模式上的区别)。
FTP的安装与配置
vsftpd是linux下的一款小巧轻快,安全易用的FTP服务器软件,是一款在各个Linux发行版中最受推崇的FTP服务器软件。
通过yum安装vsftpd
yum install -y vsftpd
修改vsftpd的配置文件
vi /etc/vsftpd/vsftpd.conf
修改配置文件如下:
1.不允许匿名访问
anonymous_enable=NO
2.允许使用本地帐户进行FTP用户登录验证
local_enable=YES
3.使用户不能离开主目录
当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
配置文件最后添加
allow_writeable_chroot=YES
要不然会报错
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
如果/etc/vsftpd/chroot_list
不存在,则需要创建该文件
vi /etc/vsftpd/chroot_list
:wq
直接保存并退出就行。
4.设定支持ASCII模式的上传和下载功能。
ascii_upload_enable=YES
ascii_download_enable=YES
最后 :wq
保存修改,重启vsftpd
systemctl restart vsftpd.service
新建FTP用户
useradd -d /var/ftp/public_root -g ftp -s /sbin/nologin ftpuser
修改该FTP用户密码
passwd ftpuser
登录FTP
我使用的是FileZilla FTP客户端测试的登录
其他说明
如果登陆成功,无法上传或修改文件,这里需要修改文件权限为对应的登陆用户,
我这里使用的是ftpuser用户登陆,用户目录是/html/ftpuser
chown root:ftpuser /html/ftpuser
chmod -R 557 /html/ftpuser
参数设置与说明
用户登陆控制
参数与值 | 说明 |
---|---|
anonymous_enable=YES | 允许匿名登陆 |
no_anon_password=YES | 匿名用户login时不询问口令 |
ftp_username=nobody | 匿名用户名,默认值为ftp |
anon_root=/mnt/anymous | 匿名用户根目录 |
local_enable=YES | 允许本地帐户登陆 |
check_shell=NO | 仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录 |
userlist_enable=YES | 开启userlist_file进行访问限制,且开启后,userlist_deny选项才生效 |
userlist_deny=NO | 若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录 |
userlist_file=/etc/vsftpd.user_list | 用户列表文件位置 |
local_root=/ | 本地用户根目录 |
用户权限控制
参数与值 | 说明 |
---|---|
write_enable=YES | 允许本地帐户删除和修改文件 |
local_umask=022 | FTP上本地的文件权限,默认是077 |
file_open_mode=0666 | 上传文件的权限,配合umask使用 |
anon_upload_enable=YES | 允许匿名用户上传权限 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录的同时可以在此目录中上传文件 |
anon_other_write_enable=YES | 匿名帐号删除权限 |
anon_world_readable_only=NO | 匿名用户浏览权限 |
guest_enable=NO | 虚拟用户可以登陆,如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名 |
guest_username | 虚拟用户用户名 |
chown_uploads=YES | 开启上传后更改文件所属权 |
chown_username=root | 上传后更改文件所属权的用户名 |
chroot_local_user=YES | 限制本地所有帐户只能在自己的目录中 |
chroot_list_enable=YES | 文件中的名单可以调用 |
chroot_list_file=/etc/vsftpd/chroot_list | 用户列表文件,生效前提是 chroot_local_user=NO |
async_abor_enable=YES | 允许使用"async ABOR"命令,一般不用,容易出问题 |
ascii_upload_enable=YES | 启用上传的ascii传输方式 |
ascii_download_enable=YES | 启用下载的ascii传输方式 |
allow_writeable_chroot=YES | 在自己的目录下可写 |
信息设置
参数与值 | 说明 |
---|---|
dirmessage_enable=YES | 切换目录时,显示目录下.message的内容 |
ftpd_banner | 显示欢迎信息 |
banner_file=/var/vsftpd_banner_file | 用户连接后欢迎信息使用的是此文件中的相关信息 |
banner_fail=/path/to/file | 连接失败时显示文件中的内容 |
服务器功能选项
参数与值 | 说明 |
---|---|
xferlog_enable=YES | 激活上传和下传的日志 |
xferlog_file=/var/log/xferlog | 日志文件 |
xferlog_std_format=YES | 使用标准的日志格式 |
tcp_wrappers=YES | 开启tcp_wrappers支持 |
pam_service_name=vsftpd | 定义PAM所使用的名称,预设为vsftpd |
超时设置
参数与值 | 说明 |
---|---|
idle_session_timeout=600 | 用户会话空闲后10分钟(秒) |
data_connection_timeout=120 | 将数据连接空闲2分钟断(秒) |
accept_timeout=60 | 将客户端空闲1分钟后断(秒) |
connect_timeout=60 | 中断1分钟后又重新连接(秒) |
数据传输选项
参数与值 | 说明 |
---|---|
local_max_rate=50000 | 本地用户传输率(bite/s),50K |
anon_max_rate=30000 | 匿名用户传输率(bite/s),30K |
连接选项
参数与值 | 说明 |
---|---|
max_clients=200 | FTP的最大连接数 |
max_per_ip=4 | 每IP的最大连接数 |
connect_form_port_20=YES | 启用FTP数据端口的数据连接 |
listen_address=192.168.1.100 | 绑定到某个IP,其它IP不能访问 |
listen_port=5555 | 从5555端口进行数据连接 |
pasv_min_port=5000 | 将客户端的数据连接端口改在 |
pasv_max_port=6000 | 5000—6000之间 |
服务性能选项
参数与值 | 说明 |
---|---|
ls_recurse_enable=NO | 是否能使用ls -R命令以防止浪费大量的服务器资源 |
one_process_model=YES | 是否使用单进程模式 |
listen=YES | 独立的vsftpd服务器 |
相关链接