FTP 搭建

FTP 是 File Transfer Protocol(文件传输协议)的英文简称,它工作在 0SI 模型的第七层,TCP 模型的第四屋上,即应用层。

一、FTP 简介

FTP 会话时包含了两个通道,一个叫控制通道,端口号21;一个数据通道,端口号 20。

21 端口用于连接,20 端口用于传输数据。进行 FTP 文件传输中,客户端首先连接到 FTP 服务器的 21 端口,进行用户的认证,认证成功后,要传输文件时,服务器会开一个端口为 20 来进行传输数据文件。也就是说,端口 20 才是真正传输所用到的端口,端口 21 只用于 FTP 的登陆认证。

1.1 FTP 工作模式

数据传输有 2 种方式:主动模式和被动模式。两种模式的区别是被动模式是客户端打开一个端口去连接服务端,这就绕过了客户端的防火墙限制。

(1) 主动模式的工作原理(PORT模式)

  1. 客户端对服务器发起请求,连接的是服务器的 21 号端口,客户端的端口号 N 是大于 1024 的随机端口。
  2. 服务器的 21 号端口给予客户端响应数据流。
  3. 服务器打开 20 端号口去连接客户端的 N+1 的端口(注意客户端 N+1 要打开防火墙限制)。
  4. 客户端给予响应,数据开始传输。

(2) 被动模式的工作原理(PASY模式)

  1. 客户端对服务发起的请求连接是服务器的 21 号口,客户端的端口号 N 是大于 1024 的随机端口。
  2. 服务器的 21 号端口给予客户端响应数据流。
  3. 服务器打开一个大于 1024 的随机端口,客户端使用用 N+1 口号去连接务器打开的端口。
  4. 服务器给予响应,于是数据开始传输。

1.2 FTP 远程登陆方式

FTP 提供 3 种远程的登陆方式

(1) 匿名登录方式

就是不需要用户名,密码。就能登陆到务器

(2) 本地用户方式

需要帐户名和密码才能登录。而且,这个帐户名和密码,都是在 1inux 系统里面,已经有的用户。

(3) 虚拟用户方式

同样要用户名和密码才能造录。但是和上面的区别就是,这个用户名和密码,在 1inux 系统中是没有的。

下面分别介绍这三种登陆方式的安装和配置。

二、FTP 安装

2.1 FTP 软件安装

1. 关闭防火墙和 selinux

# CentOS7 关闭防火墙
# 从 CentOS7 开始使用 systemctl 来管理服务和程序,包括了 service 和 chkconfig
systemctl stop firewalld
systemctl disable firewalld # CentOS6 关闭防火墙
servcie iptables stop
chkconfig iptables off # 关闭 selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# SELINUX=disabled
# vi /etc/selinux/config

2. 安装 vsftp

rpm -qa | grep vsftpd       # 查看是否安装 vsftpd
yum install -y vsftpd ftp # 安装 ftp 服务端和客户端

3. 启动 vsftpd

systemctl start vsftpd      # 临时启动 vsftpd
systemctl enalble vsftpd # 开机启动 vsftpd
systemctl stop vsftpd # 关闭 vsftpd
systemctl restart vsftpd # 重启 vsftpd
systemctl status vsftpd # 查询状态 vsftpd
systemctl enalble vsftpd # 开机启动 vsftpd
systemctl is-enabled vsftpd;echo $? # 查询是否开机启动 vsftpd
systemctl systemctl list-unit-files | grep enabled # 查询启动了那些服务 vsftpd

到此为止,FTP 已经安装成功,默认打开匿名用户登陆的方式。

2.2 匿名登录方式

(1) 查看 /etc/vsftpd/vsftpd.conf

anonymous_enable=YES

(2) 查看 /etc/passwd | grep ftp

[root@mdw ftp]# cat /etc/passwd | grep ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftpuser:x:1002:50::/home/ftpuser/:/sbin/nologin

可以看到 FTP 的默认路径 /var/ftp。FTP 访问路径: ftp://192.168.2.110/

2.3 本地用户方式

(1) 修改 /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

(2) 创建用户

useradd -g ftp binarylei
echo 123456 | passwd --stdin binarylei

FTP 访问路径: ftp://binarylei:123456@192.168.2.110/

(3) 测试

ftp 192.168.2.110   # 登陆
ftp> pwd # /home/binarylei
ftp> put /root/.bashrc /home/binarylei/.bashrc # 上传到 /home/binarylei/.bashrc

(4) 为每一个用户单独授权

修改 vsftpd.conf 配制文件

vim /etc/vsftpd/vsftpd.conf

chroot_local_user=YES       # 只允许访问 ftp 目录,这时 pwd 显示 '/',否则显示 '/home/binarylei'
user_config_dir=/etc/vsftpd/vuser_config # ftp 用户配置文件地址,优先级: vuser_config/ftpuser > vsftpd.conf
local_root=/data/ftp # 本地用户 ftp 根目录,可以在 vuser_config/ftpuser 中覆盖

添加 /etc/vsftpd/vuser_config/binarylei 配制文件

vim /etc/vsftpd/vuser_config/binarylei

local_root=/home/ftp/leigang
anon_umask=022 # 权限掩码,比如创建目录 777 - 022 = 755
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

2.4 虚拟用户方式

虚拟用户是寄生在本地用户之上的,所以要先创建一个本地的用户 virtual。

(1) 修改 /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
pam_service_name=vsftpd guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/vuser_config
allow_writeable_chroot=YES

(2) 创建本地帐号

useradd -g ftp -d /home/ftp -s /sbin/nologin virtual
echo 123456 | passwd --stdin virtual

(3) 修改 /etc/pam.d/vsftpd(其余配置注释)

auth       required      /lib64/security/pam_userdb.so  db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

(4) 生成 vuser_passwd.db

echo zhangsan >> /etc/vsftpd/vuser_passwd.txt
echo 123456 >> /etc/vsftpd/vuser_passwd.txt
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

(5) 创建 vuser_config/zhangsan 配制文件

local_root=/home/binarylei/zhangsan
anon_umask=022
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

(6) 测试

ftp 192.168.2.110   # 启用后本地用户方式无法登陆
ftp> pwd # /
ftp> put /root/.bashrc .bashrc # 上传到根目录(local_root),上传要指定上传后的文件名

三、FTP 命令

(1) ftp 登陆

ftp -n
ftp> open 127.0.0.1
ftp> user ftpuser ftpuser
ftp> close

(2) ftp 常用命令说明

ftp> pwd        # 显示远程主机的当前工作目录
ftp> cd pub # 切换目录
ftp> dir # 查看本目录下的内容
ftp> lcd / # 本地目录切换
ftp> get chargeni.exe # 下载文件
ftp> put chargeni.exe chargeni.exe # 上传文件
ftp> bye # 离开

四、FTP 其它配置

4.1 端口配置

(1) 修改 /etc/vsftpd/vsftpd.conf

listen_port=8021

(2) 修改 /etc/services

# 21 is registered to ftp, but also used by fsp
ftp 8021/tcp
ftp 8021/udp fsp fspd

4.2 允许 root 帐户登陆

ftp 不允许 /etc/vsftpd 下 ftpusers、user_list 的两个配置文件中的帐号登陆,只需要将 root 帐号注释即可。

注意:user_list 文件当 /etc/vsftpd/vsftpd.conf/userlist_enable=YES 时 user_list 的帐号不允许登陆,NO 时则允许登陆。默认为 YES

五、附录

5.1 vsftp 配置文件

# allow anonmy user login
anonymous_enable=YES # 允许匿名用户登陆
anon_upload_enable=YES # 允许匿名用户上传文件
anon_mkdir_write_enable=YES # 允许匿名用户新增目录的权限
anon_world_readable_only=NO # 不允许匿名用户下载
anon_other_write_enable=YES # 允许匿名用户上传和新建目录之处的权限,如删除、重命名
anon_umask=002 # 匿名用户新增文件的 umask 数值
anon_root=/var/ftp write_enable=YES # 允许使用任何可以修改文件系统的 FTP 的指令
chroot_local_user=YES # 用于指定用户列表文件中的用户,是否允许切换到上级目录 # local user setting
local_enable=YES # 允许本地用户登陆(linux 帐号)
local_root=/home/ftp/public
local_umask=022 xferlog_enable=YES # 启用一个日志文件,用于详细记录上传和下载
vsftpd_log_file=/var/log/vsftpd.log # vsftpd 日志存放位置
use_localtime=YES # 使用本地时间而不是 GMT
dual_log_enable=YES # 用户登陆日志
xferlog_file=/var/log/xferlog # 记录上传下载文件的日志
xferlog_std_format=YES # 记录日志使用标准格式 max_clients=5000
max_per_ip=5000 connect_from_port_20=YES # 开启 20 端口 idle_session_timeout=600 # 登陆之后超时时间 60 秒,登陆之后,一分钟不操作,就会断开连接。
listen=YES # 开启监听
userlist_enable=YES # 允许由 userlist_file 指定文件中的用户登录FTP服务器
tcp_wrappers=YES # 支持 tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny) # set virtual users
pam_service_name=vsftpd # 验证文件的名字
guest_enable=YES # 起用虚拟用户
guest_username=taokey # 虚拟用户名
user_config_dir=/etc/vsftpd/vuser_config# 虚拟用户配置文件路径

参考:

  1. 《FTP配置虚拟用户》:https://blog.csdn.net/u014226012/article/details/64919902
  2. 《FTP配置文件参数详解》:https://www.cnblogs.com/helonghl/articles/5533857.html

每天用心记录一点点。内容也许不重要,但习惯很重要!

FTP 搭建的更多相关文章

  1. Xlight FTP搭建FTP服务器教程

    Xlight FTP搭建FTP服务器教程 1. 服务器公共设置 设置FTP 端口, ip 等 FTP 服务器公共的设定 2. 设定 FTP 用户, FTP 目录 等信息    备注: 这个用户是非Wi ...

  2. linux私有ftp搭建与创建新用户

    一.私有ftp搭建 以后补充 1. 搭建 2.修改配置文件 二.创建新用户 在linux搭建好私有ftp后,默认存放目录是 /var/ftp/ 我们有时候需要给外部公司之类的用,但又不想让他们直接在  ...

  3. ftp搭建后外网无法连接和访问阿里云服务器(非软件)

    阿里云服务器由于性价比高,是不少企业建站朋友们的首选.而在购买阿里云服务器后,不少客户反映其在搭建FTP后出现外网无法访问的问题,这里特意搜集整理了关于ftp搭建后外网无法连接和访问的问题,提供以下解 ...

  4. FTP搭建注意事项

    正常的FTP搭建步骤很简单,随便网搜一篇文章就出来了 下面提出一个网址可供学习 https://blog.csdn.net/m0_38044299/article/details/81627607 但 ...

  5. FTP搭建YUM源服务器

    一.FTP搭建YUM源服务器 1.服务器 挂载centos镜像[root@localhost ~]#yum install vsftpd[root@localhost ~]#systemctl sta ...

  6. 使用FTP搭建YUM

    VSFTP搭建YUM源 1.安装FTP [root@FTP kel]# rpm -qa |grep vsftp vsftpd-2.2.2-6.el6_0.1.x86_64 首先需要安装的ftp软件为v ...

  7. 170116、centos6.4下nginx和ftp搭建图片服务器

    一.需要的组件 图片服务器两个服务: Nginx(图片访问): 1.http服务:可以使用nginx做静态资源服务器.也可以使用apache.推荐使用nginx,效率更高. 2.反向代理 实现 负载均 ...

  8. nginx+ftp搭建图片服务器(Windows Server服务器环境下)

    几种图片服务器的对比 1.直接使用ftp服务器,访问图片路径为 ftp://账户:密码@192.168.0.106/31275-105.jpg 不采用这种方式,不安全容易暴露ftp账户信息 2.直接使 ...

  9. 记一次linux上的ftp搭建过程

    最近公司测试环境需要搭建ftp,正好自己稍微有点空且这方面确实不会,就自告奋勇说让我先试试,玩炸了你们再帮忙重装系统重新搭吧(手动滑稽),虽然最终是完成了,但是中间磕磕碰碰遇到一些小问题,到处查百度, ...

随机推荐

  1. Redis安装及五种数据类型

    redis是非关系型数据库,也叫内存数据库.数据是键值对的形式,通过key查找value 安装Radis:6379 sudo apt-get update sudo apt-get install r ...

  2. leetcode242

    public class Solution { public bool IsAnagram(string s, string t) { Dictionary<char, int> dic ...

  3. nginx直接返回json

    尝试配置nginx.conf之后,访问直接变成下载文件... 查阅之后,发现需要配置返回内容的格式. location ~ ^/get_json { default_type application/ ...

  4. 使用Ping来做等待的时间计算

    利用ping两次发送消息之间的间隔时间.ping在发送多个消息时,在得到上一次消息的回应后,它会再等待1秒的时间才发送下一次消息,而这个回应时间因机型.系统和网络配置而不同,其中IP地址尤其关键,只有 ...

  5. gevent 实现io自动切换,gevent.join([]), gevent.spawn, 爬虫多并发的实现

    gevent 是一个第三方库,可以很容易的实现遇到io(文件传输)操作时,程序自动跳转到下一个程序 例一: 用gevent.sleep()  来模拟io操作 import gevent def foo ...

  6. vmware esxi6.5安装使用教程(图文安装)

    准备工作: 下载ESXI5.5镜像和client客户端. 将ISO写入到U盘或是刻录光盘然后启动安装. 一.开始安装 欢迎界面 协议界面 安装在本地 键盘的键入方式 设置登录密码 开始安装 重启 安装 ...

  7. C#--Winform项目核心模块--考勤模块

    C#--Winform项目核心模块--考勤模块(一) C#--Winform项目核心--考勤模块(二) C#--Winform项目核心模块--考勤模块(三)

  8. cobbler全自动批量安装部署linux

    Cobbler的设计方式: Cobbler的配置结构基于一组注册的对象.每个对象表示一个与另一个实体相关联的实体(该对象指向另一个对象,或者另一个对象指向该对象).当一个对象指向另一个对象时,它就继承 ...

  9. Java Magic. Part 3: Finally

    Java Magic. Part 3: Finally @(Base)[JDK, magic, 黑魔法] 转载请写明:原文地址 英文原文 系列文章: -Java Magic. Part 1: java ...

  10. spring 中的断言的作用

    org.springframework.util.AssertAssert翻译为中文为"断言".用过JUNIT的应该都知道这个概念了.就是断定某一个实际的值就为自己预期想得到的,如 ...