1 安装 vsftpd 组件
安装完后, 有 / etc/vsftpd/vsftpd.conf 文件, 是 vsftp 的配置文件
[root@bogon~]#yum - y install vsftpd
2FTP 主动模式与 FTP 被动模式的端口说明
FTP 是仅基于 TCP 的服务, 不支持 UDP 与众不同的是 FTP 使用 2 个端口, 一个数据端口和一个命令端口 (也可叫做控制端口) 通常来说这两个端口是 21(命令端口)和 20(数据端口)但 FTP 工作方式的不同, 数据端口并不总是 20 这就是主动与被动 FTP 的最大不同之处
FTP 协议有两种工作方式: PORT 方式和 PASV 方式, 中文意思为主动式和被动式
(一) FTP 主动模式
主动方式的 FTP 是这样的: 客户端从一个任意的非特权端口 N(N>1024)连接到 FTP 服务器的命令端口, 也就是 21 端口然后客户端开始 监听端口 N+1,
并发送 FTP 命令 port N+1 到 FTP 服务器接着服务器会从它自己的数据端口 (20) 连接到客户端指定的数据端口(N+1)
针对 FTP 服务器前面的防火墙来说, 必须允许以下通讯才能支持主动方式 FTP:
1. 任何大于 1024 的端口到 FTP 服务器的 21 端口(客户端初始化的连接)
2. FTP 服务器的 21 端口到大于 1024 的端口 (服务器响应客户端的控制端口)
3. FTP 服务器的 20 端口到大于 1024 的端口(服务器端初始化数据连接到客户端的数据端口)
4. 大于 1024 端口到 FTP 服务器的 20 端口(客户端发送 ACK 响应到服务器的数据端口)
简明概括:
PORT(主动)方式的连接过程是: 客户端向服务器的 FTP 端口 (默认是 21) 发送连接请求, 服务器接受连接, 建立一条命令链路当需要传送数据时,
客户端在命令链路上用 PORT 命令告诉服务器: 我打开了 XXXX 端口, 你过来连接我于是服务器从 20 端口向客户端的 XXXX 端口发送连接请求,
建立一条数据链路来传送数据
开启主动模式:
pasv_enable=no
若设置为 YES, 则使用 PASV 工作模式; 若设置为 NO, 则使用 PORT 模式默认值为 YES, 即使用 PASV 工作模式
主动模式下:
SecureFX 工具去连接 ftp, 客户没有允许开放端口, 服务器没法与客户端相连接, 关闭客户端防火墙
(二) FTP 被动模式
为了解决服务器发起到客户的连接的问题, 人们开发了一种不同的 FTP 连接方式这就是所谓的被动方式, 或者叫做 PASV, 当客户端通知服务器它处于
被动模式时才启用
在被动方式 FTP 中, 命令连接和数据连接都由客户端发起, 这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题
当开启一个 FTP 连接时, 客户端打开两个任意的非特权本地端口 (N > 1024 和 N+1) 第一个端口连接服务器的 21 端口, 但与主动方式的 FTP 不同,
客户端不会提交 PORT 命令并允许服务器来回连它的数据端口, 而是提交 PASV 命令这样做的结果是服务器会开启一个任意的非特权端口(P > 1024)
, 并发送 PORT P 命令给客户端然后客户端发起从本地端口 N+1 到服务器的端口 P 的连接用来传送数据
对于服务器端的防火墙来说, 必须允许下面的通讯才能支持被动方式的 FTP:
1. 从任何大于 1024 的端口到服务器的 21 端口 (客户端初始化的连接)
2. 服务器的 21 端口到任何大于 1024 的端口 (服务器响应到客户端的控制端口的连接)
3. 从任何大于 1024 端口到服务器的大于 1024 端口 (客户端初始化数据连接到服务器指定的任意端口)
4. 服务器的大于 1024 端口到远程的大于 1024 的端口(服务器发送 ACK 响应和数据到客户端的数据端口)
简明概括:
PASV(被动)方式的连接过程是: 客户端向服务器的 FTP 端口 (默认是 21) 发送连接请求, 服务器接受连接, 建立一条命令链路当需要传送数据时,
服务器在命令链路上用 PASV 命令告诉客户端: 我打开了 XXXX 端口, 你过来连接我于是客户端向服务器的 XXXX 端口发送连接请求, 建立一条数据
链路来传送数据
开启被动模式
默认是开启的, 但是要指定一个端口范围, 打开 vsftpd.conf 文件, 在后面加上
pasv_enable=yes
若设置为 YES, 则使用 PASV 工作模式; 若设置为 NO, 则使用 PORT 模式默认值为 YES, 即使用 PASV 工作模式
pasv_min_port=30000
在 PASV 工作模式下, 数据连接可以使用的端口范围的最大端口, 0 表示任意端口默认值为 0
pasv_max_port=30999
在 PASV 工作模式下, 数据连接可以使用的端口范围的最小端口, 0 表示任意端口默认值为 0
表示端口范围为 30000~30999, 这个可以随意改改完重启一下 vsftpd
由于指定这段端口范围, iptables 也要相应的开启这个范围, 所以像上面那样打开 iptables 文件
也是在 21 上下面另起一行, 更那行差不多, 只是把 21 改为 30000:30999, 然后: wq 保存, 重启下 iptables 这样就搞定了
(三)主动与被动 FTP 优缺点:
主动 FTP 对 FTP 服务器的管理有利, 但对客户端的管理不利因为 FTP 服务器企图与客户端的高位随机端口建立连接, 而这个端口很有可能被客户端的
防火墙阻塞掉被动 FTP 对 FTP 客户端的管理有利, 但对服务器端的管理不利因为客户端要与服务器端建立两个连接, 其中一个连到一个高位随机端
口, 而这 个端口很有可能被服务器端的防火墙阻塞掉
幸运的是, 有折衷的办法既然 FTP 服务器的管理员需要他们的服务器有最多的客户连接, 那么必须得支持被动 FTP 我们可以通过为 FTP 服务器指定
一个有 限的端口范围来减小服务器高位端口的暴露这样, 不在这个范围的任何端口会被服务器的防火墙阻塞虽然这没有消除所有针对服务器的
危险, 但它大大减少了危险
简而言之:
主动模式 (PORT) 和被动模式 (PASV) 主动模式是从服务器端向客户端发起连接; 被动模式是客户端向服务器端发起连接两者的共同点是都使
用 21 端口进行用户验证及管理, 差别在于传送数据的方式不同, PORT 模式的 FTP 服务器数据端口固定在 20, 而 PASV 模式则在 1025-65535 之间随机
常见的 FTP 客户端软件的 PASV 方式的关闭方法
大部分 FTP 客户端默认使用 PASV 方式 IE 默认使用 PORT 方式 在大部分 FTP 客户端的设置里, 常见到的字眼都是 PASV 或被动模式,
极少见到 PORT 或主动模式等字眼因为 FTP 的登录方式只有两种: PORT 和 PASV, 取消 PASV 方式, 就意味着使用 PORT 方式
(1)IE: 工具 -> Internet 选项 -> 高级 -> 使用被动 FTP(需要 IE6.0 以上才支持)
(2)CuteFTP:Edit -> Setting -> Connection -> Firewall -> PASV Mode 或 File -> Site Manager, 在左边选中站
点 -> Edit -> Use PASV mode
(3)FlashGet: 工具 -> 选项 -> 代理服务器 -> 直接连接 -> 编辑 -> PASV 模式
(4)FlashFXP: 选项 -> 参数选择 -> 代理 / 防火墙 / 标识 -> 使用被动模式 或 站点管理 -> 对应站点 -> 选项 ->
使用被动模式或快速连接 -> 切换 -> 使用被动模式
3 登录方式(三种登录方式)
3.1 防火墙开启 21 端口
因为 ftp 默认的端口为 21, 而 centos 默认是没有开启的, 所以要修改 iptables 文件
- [root@bogon ~]# vim /etc/sysconfig/iptables
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
在行上面有 22 -j ACCEPT 下面另起一行输入跟那行差不多的, 只是把 22 换成 21, 然后: wq 保存
还要运行下, 重启 iptables
[root@bogon ~]# service iptables restart
3.2 FTP 匿名登录
FTP 的匿名登录一般有三种:
1 用户名: anonymous 密码: Email 或者为空
2 用户名: FTP 密码: FTP 或者为空
3 用户名: USER 密码: pass
3.2.1 在 IE 浏览器或文件管理器中匿名访问
ftp 默认开启的匿名用户登录和主动模式, 用 IE 访问需要把使用被动 FTP 选项去掉前面的勾, 这样 ftp 都连接上去
在文件管理器输入框中输入 ftp:// 域名或者 ip, 如果端口不是 21 的后面加端口
3.3 匿名用户权限
3.3.1 vsftpd 配置文件
默认配置
- anonymous_enable=YES
- # 允许匿名用户和本地用户登陆
- local_enable=YES
- # 匿名用户使用的登陆名为 ftp 或 anonymous, 口令为空; 匿名用户不能离开匿名用户家目录 / var/ftp, 且只能下载不能上传
- write_enable=YES
- # 本地用户的登录名为本地用户名, 口令为此本地用户的口令; 本地用户可以在自己家目录中进行读写操作; 本地用户可以离开自家目录切换至有权限
访问的其他目录, 并在权限允许的情况下进行上传 / 下载
# 写在文件 / etc/vsftpd.ftpusers 中的本地用户禁止登陆
3.3.2 匿名用户 (anonymous) 设置
- anonymous_enable=YES/NO(YES)
- # 控制是否允许匿名用户登入, YES 为允许匿名登入, NO 为不允许默认值为 YES
- write_enable=YES/NO(YES)
- # 是否允许登陆用户有写权限属于全局设置, 默认值为 YES
- no_anon_password=YES/NO(NO)
- # 若是启动这项功能, 则使用匿名登入时, 不会询问密码默认值为 NO
- ftp_username=ftp
- # 定义匿名登入的使用者名称默认值为 ftp
- anon_root=/var/ftp
- # 使用匿名登入时, 所登入的目录默认值为 / var/ftp 注意 ftp 目录不能是 777 的权限属性, 即匿名用户的家目录不能有 777 的权限
- anon_upload_enable=YES/NO(NO)
- # 如果设为 YES, 则允许匿名登入者有上传文件 (非目录) 的权限, 只有在 write_enable=YES 时, 此项才有效当然, 匿名用户必须要有对上层目录的写入权默认值为 NO
- anon_world_readable_only=YES/NO(YES)
- # 如果设为 YES, 则允许匿名登入者下载可阅读的档案 (可以下载到本机阅读, 不能直接在 FTP 服务器中打开阅读) 默认值为 YES
- anon_mkdir_write_enable=YES/NO(NO)
- # 如果设为 YES, 则允许匿名登入者有新增目录的权限, 只有在 write_enable=YES 时, 此项才有效当然, 匿名用户必须要有对上层目录的写入权
默认值为 NO
- anon_other_write_enable=YES/NO(NO)
- # 如果设为 YES, 则允许匿名登入者更多于上传或者建立目录之外的权限, 譬如删除或者重命名(如果 anon_upload_enable=NO, 则匿名用户不能
上传文件, 但可以删除或者重命名已经存在的文件; 如果 anon_mkdir_write_enable=NO, 则匿名用户不能上传或者新建文件夹, 但可以删除或者重
命名已经存在的文件夹)默认值为 NO
- chown_uploads=YES/NO(NO)
- # 设置是否改变匿名用户上传文件 (非目录) 的属主默认值为 NO
- chown_username=username
- # 设置匿名用户上传文件 (非目录) 的属主名建议不要设置为 root
- anon_umask=077
- # 设置匿名登入者新增或上传档案时的 umask 值默认值为 077, 则新建档案的对应权限为 700
- deny_email_enable=YES/NO(NO)
- # 若是启动这项功能, 则必须提供一个档案 / etc/vsftpd/banner_emails, 内容为 email address 若是使用匿名登入, 则会要求输入 email address,
若输入的 email address 在此档案内, 则不允许进入默认值为 NO
- banned_email_file=/etc/vsftpd/banner_emails
- # 此文件用来输入 email address, 只有在 deny_email_enable=YES 时, 才会使用到此档案若是使用匿名登入, 则会要求输入 email address, 若输入的 email address 在此档案内, 则不允许进入
local_umask 目录:
777-022=755
local_umask 文件:
666-022=644
事例:
Linux 下允许 vsftp 匿名用户上传和下载的配置
配置要注意三部分, 请一一仔细对照:
1vsftpd.conf 配置文件
- # vi /etc/vsftpd/vsftpd.conf(vsftpd.conf 文件的配置)
- anonymous_enable=YES
#允许匿名用户登录 FTP
anon_root=/var/ftp/pub
#设置匿名用户的登录目录(如需要, 需自己添加并修改)
anon_upload_enable=YES
#打开匿名用户的上传权限
anon_mkdir_write_enable=YES
#打开匿名用户创建目录的权限
anon_other_write_enable=YES
#打开匿名用户删除和重命名的权限(如需要, 需自己添加)
- anon_umask=022
- # 匿名用户的掩码(如需要, 需自己添加, 含义: 如 umask 是 022, 这时创建一个权限为 666 的文件, 文件的实际权限为 666-022=644)
2ftp 目录的权限设置(匿名用户)
默认情况下, ftp 的根目录为 / var/ftp, 为了安全, 这个目录默认不允许设置为 777 权限, 否则 ftp 将无法访问但是我们要匿名上传文件, 需要 other 用户的写权限, 正确的做法:
chmod o+w /var/ftp/pub/
上传的文件权限是 600, 属主和属组默认都是 ftp
3 为了安全修改属主权限为匿名的 ftp 权限, 不用默认的 root 权限
chown ftp /var/ftp/pub/ -R
*net use /d 清除 ftp 连接缓存 **
3.4 本地用户登录
- anonymous_enable=no
- # 不允许匿名用户登入
- local_enable=YES/NO(YES)
- # 控制是否允许本地用户登入, YES 为允许本地用户登入, NO 为不允许默认值为 YES
- local_root=/home/username
- # 当本地用户登入时, 将被更换到定义的目录下默认值为各用户的家目录
- write_enable=YES/NO(YES)
- # 是否允许登陆用户有写权限属于全局设置, 默认值为 YES
- local_umask=022
- # 本地用户新增档案时的 umask 值默认值为 077
- file_open_mode=0755
- # 本地用户上传档案后的档案权限, 与 chmod 所使用的数值相同默认值为 0666
- chroot_local_user=YES
- # 用于指定用户列表文件中的用户不允许切换到上级目录默认值为 NO
3.4.1 添加一个 ftp 用户
此用户就是用来登录 ftp 服务器用的
[root@bogon~]#useradd ftpuser - s / sbin / nologin
这样一个用户建完, 不可以用这个登录, 记得用普通登录不要用匿名了登录后默认的路径为 /home/ftpuser.
3.4.2 给 ftp 用户添加密码
[root@bogon~]#passwd ftpuser
输入两次密码后修改密码
3.4.3 关闭匿名访问, 设置相应权限
修改 / etc/vsftpd/vsftpd.conf 文件:
- anonymous_enable=no
- local_enable=YES
- local_root=/home/ftpuser
- write_enable=YES
- local_umask=022
- file_open_mode=0755
- chroot_local_user=YES
3.4.4 重启 ftp 服务:
[root@bogon~]#service vsftpd restart
3.4.5 访问
在 windows 资源管理器中连接 ftp://ip
本地用户登录(家目录 / home/ftpuser), 可以创建或删除目录文件, 目录权限是 755, 文件权限是 644
修改路径为 / opt/test 下(local_root=/opt/test), 为了安全, 在 / opt/test 目录下建 tt 目录, 并给 tt 目录属主和属组修改为 ftpuser, 这样才可以创建或删除目录, 上传删除文件
3.5 虚拟用户登录
- pam_service_name=vsftpd
- # 虚拟用户使用 PAM 认证方式
- guest_enable= YES/NO(NO)
- # 设置 PAM 使用的名称, 默认值为 / etc/pam.d/vsftpd
- guest_username=ftp
- # 启用虚拟用户默认值为 NO
- virtual_use_local_privs=YES/NO(NO)
- # 这里用来映射虚拟用户默认值为 ftp
- # 当该参数激活 (YES) 时, 虚拟用户使用与本地用户相同的权限当此参数关闭 (NO) 时, 虚拟用户使用与匿名用户相同的权限默认情况下此参数
是关闭的(NO)
3.5.1 创建文本格式的用户名密码列表
首先需要建立一个文本格式的用户名 / 密码列表文件, 奇数行为用户名, 偶数行为上一行中用户名所对应的密码
例如: 添加两个用户 jenejohn, 密码分别为 abc123abc456 执行以下的操作:
- [root@ling ~]# vi /etc/vsftpd/juser.txt
- jene
- abc123
- john
- abc456
3.5.2 生成数据库:
db_load: 安装 db4,db4-devel,db4-utils
- # cd //etc/vsftpd #切换到 / etc/vsftpd 的目录下
- # yum -y install db4*
- # db_load -T -t hash -f juser.txt juser.db #将刚创建的 juser.list 列表转换为 juser.list.db
- file juser.db #查看转换后的文件类型
3.5.3 修改数据文件访问权限:
chmod 600 /etc/vsftpd/juser.db
3.5.4 修改 pam 配置:
- # vi /etc/pam.d/juser.pam // 为虚拟用户创建 PAM 认证文件, 文件名为 juser.pam(见名之义)
- auth required pam_userdb.so db=/etc/vsftpd/juser
- account required pam_userdb.so db=/etc/vsftpd/juser
注意: db=/etc/vsftpd/vsftpd_login 后面的. db 必须去掉
或
# vi /etc/pam.d/vsftpd
将里面其他的都注释掉, 添加下面这两行:
- auth required pam_userdb.so db=/etc/vsftpd/vuser
- account required pam_userdb.so db=/etc/vsftpd/vuser
3.5.5 创建虚拟账号对应的系统用户:
- #useradd - d /
- var / ftptom - s / sbin / nologin tom# 添加用户 tom, 指定到新建的家目录, 将虚拟用户对应到这个系统账号上, 这个账号无需设置密码及登录 Shell#chmod 755 /
- var / ftptom / #调整权限以允许浏览目录
3.5.6 修改主配置文件
- # vi /etc/vsftpd/vsftpd.conf
- anonymous_enable=no // 禁用匿名用户登录
- (anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- anon_umask=022 // 指定上传权限掩码)
- local_enable=YES // 需映射本地用户, 所以启用些项
- write_enable=YES // 启用上传写入支持
- chroot_local_user=YES //(自建配置)将所有本地用户限制在家目录中
- guest_enable=YES // 启用映射功能
- guest_username=tom // 指定映射的系统用户名称
- pam_service_name=juser.pam // 指定新的 PAM 认证文件
- user_config_dir=/opt/vsftpd/juser_dir //(自建配置)设置虚拟帐号的主目录为 / juser_dir
- max_clients=300 //(自建配置)设置 FTP 服务器最大接入客户端数为 300 个
- max_per_ip=10 //(自建配置)设置每个 IP 地址最大连接数为 10 个
- listen=YES
- port_enable=NO //(自建配置)取消 PORT 模式进行数据传输
- connect_from_port_20=NO //(修改配置)PORT 模式进行数据传输部使用 20 端口
- ftp_data_port=20
- pasv_enable=YES //(自建配置)允许 PASV 模式进行数据传输
- pasv_min_port=65341 //(自建配置)PASV 模式下数据传输所使用 port 范围下界
- pasv_max_port=65351 //(自建配置)PASV 模式下数据传输所使用 port 范围上界
3.5.7 建立虚拟账户的配置文件:
如上面的在没有给予虚拟用户上传建目录等权限的设置, 可以用下面的方法给虚拟用户建立独立的配置文件
在 user_config_dir 指定路径下, 建立与虚拟帐号同名的配置文件并添加相应的配置字段
- #mkdir / opt / vsftpd / juser_dir cd / opt / vsftpd / juser_dir // 切换到这个新建的配置文件夹下
touch jene 创建 jene 配置文件
touch john 创建 john 配置文件
- #vi jene // 为用户 jene 建立独立的配置文件, 允许他可以上传和创建目录
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- #touch john // 为其它用户 (john) 创建空的配置文件, 也就是他们没有上传和创建目录的权限
- [root@ling juser_dir]# service vsftpd reload // 重载 vsftpd 服务器
登录 ftp 服务器
已经登录 tom 的家目录下了
以上的虚拟用户 jene 和 john 共用映射的 tom 家目录的
3.5.8 若用自己各自的目录
vi vsftpd.conf
anonymous_enable=NO(修改配置)禁用匿名用户登录
write_enable=YES (默认开启)允许使用任何可以修改文件系统的 FTP 的指令
local_enable=YES(默认开启)启用本地用户登录设置
chroot_local_user=YES (自建配置)将所有本地用户限制在家目录中
pam_service_name=juser.pam(默认开启)配置 vsftpd 使用的 PAM 模块为 vsftpd
user_config_dir=/opt/vsftpd/juser_dir (自建配置)设置虚拟帐号的主目录为 / vsftpd_login
- # mkdir /opt/vsftpd/juser_dir // 建虚拟账号主目录
- # cd /opt/vsftpd/juser_dir // 切换到这个新建的配置文件夹下
- # touch jene 创建 jene 配置文件
- # touch john 创建 john 配置文件
为各虚拟用户建立独立的配置文件
# vi jene
anon_world_readable_only=YES 只读, 不能下载
anon_world_readable_only=no 表示用户可以浏览 FTP 目录和下载文件
guest_enable=yes 开启虚拟帐号登录
guest_username=ftp_jene 设置虚拟用户 jene 对应的系统帐号为 ftp_jene
local_root=/opt/jene 用户登入时, 所在目录
anon_world_readable_only=no 不允许匿名用户浏览器整个服务器的文件系统
anon_max_rate=50000 限定传输速率为 50KB/s
# vi john
guest_enable=yes 开启虚拟帐号登录
guest_username=ftp_ john 设置虚拟用户 john 对应的系统帐号为 ftp_john
local_root=/opt/john 用户登入时, 所在目录
anon_other_write_enable=YES 允许匿名账号具有删除改名权限
anon_mkdir_write_enable=yes 允许创建文件夹, 不能删除目录
anon_upload_enable=yes 开启匿名帐号的上传功能
anon_world_readable_only=no 不允许匿名用户浏览整个服务器的文件系统
anon_max_rate=100000 限定传输速度为 100KB/s
重启 vsftpd 服务
#service vsftpd restart
linux 文件权限分成属主属组和其他人这三种, 如果其他人没有可读权限, 那 anon_world_readable_only 这个参数就起效了, 对于目录来说, 如果其他人没有可读权限, 且 anon_world_readable_only=YES, 则匿名用户无法浏览该目录下的所有内容(看上去像个空目录), 而对于文件来说, 如果其他人没有可读权限, 且 anon_world_readable_only=YES, 则匿名用户无法下载该文件
4 修改 selinux
外网是可以访问上去了, 可是发现没法返回目录(使用 ftp 的主动模式, 被动模式还是无法访问), 也上传不了, 因为 selinux 作怪了
修改 selinux:
执行以下命令查看状态:
- [root@bogon ~]# getsebool -a | grep ftp
- allow_ftpd_anon_write --> off
- allow_ftpd_full_access --> off
- allow_ftpd_use_cifs --> off
- allow_ftpd_use_nfs --> off
- ftp_home_dir --> off
- ftpd_connect_db --> off
- ftpd_use_passive_mode --> off
- httpd_enable_ftp_server --> off
- tftp_anon_write --> off
- [root@bogon ~]#
执行上面命令, 再返回的结果看到两行都是 off, 代表, 没有开启外网的访问
- [root@bogon ~]# setsebool -P allow_ftpd_full_access on
- [root@bogon ~]# setsebool -P ftp_home_dir on
这样应该没问题了(如果, 还是不行, 看看是不是用了 ftp 客户端工具用了 passive 模式访问了, 如提示 Entering Passive mode, 就代表是 passive 模式, 默认是不行的, 因为 ftp passive 模式被 iptables 挡住了, 下面会讲怎么开启, 如果懒得开的话, 就看看你客户端 ftp 是否有 port 模式的选项, 或者把 passive 模式的选项去掉如果客户端还是不行, 看看客户端上的主机的电脑是否开了防火墙, 关吧)
FileZilla 的主动被动模式修改:
菜单: 编辑设置
5 设置开机启动 vsftpd ftp 服务
[root@bogon~]#chkconfig vsftpd on
6 修改 FTP 默认端口
6.1 登录服务器, 打开 vsftp.conf 文件
# vim /etc/vsftpd/vsftpd.conf
在文件末尾增加 listen_port=2121
- pasv_enable=yes
- pasv_min_port=30000
- pasv_max_port=30999
- listen_port=2121
6.2 打开 / etc/services 文件
- [plain] view plain copy
- # vim /etc/services
找到 ftp 选项并将 21 修改成你设置的端口, 本文为 2121
- # 21 is registered to ftp, but also used by fsp
- ftp 2121/tcp
- ftp 2121/udp fsp fspd
6.3 重启 vsftp 服务
# /etc/init.d/vsftpd restart
使用 netstat -utlpn | grep vsftp 命令查看设置的端口, 确认是否成功
- # netstat -utlpn | grep vsftp
- tcp 0 0 0.0.0.0:2121 0.0.0.0:* LISTEN 33004/vsftpd
- tcp 0 0 192.168.11.6:30954 0.0.0.0:* LISTEN 33006/vsftpd
6.4 防火墙加上允许策略:
- # vi /etc/sysconfig/iptables
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 2121 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 2120 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:30999 -j ACCEPT
在主动模式中, FTP 的两个端口是相对固定的, 如果命令端口是 x 的话, 那数据端口就是 x-1, 也就是说默认情况下, 命令端口是 21, 数据端口就是 20; 你把命令端口改成了 2121, 那么数据端口就是 2120 这样使用防火墙就很方便了, 只要开通这两个端口就可以了, 但是如果客户端是共享上网的话那岂不是不能正常使用 FTP 了, 这样还是不行, 一定需要被动模式
被动模式中就麻烦了些, 命令端口修改为 2121, 那么数据端口就是 2120, 但是数据端口是随机的, 所以需要在设备里设置一下被动端口范围 6000 到 7000(pasv_min_port=6000 pasv_max_port=7000)
防火墙里允许修改过端口号及随机端口号范围
7rhel7 中修改防火墙:
1 防火墙添加端口
- # firewall-cmd --zone=public --permanent --add-port=80/tcp
- # firewall-cmd --reload
- # firewall-cmd --zone=public --permanent --add-port=31000-31999/tcp
- # firewall-cmd --reload
2 防火墙删除端口
- # firewall-cmd --zone=public --permanent --remove-port=80/tcp
- # firewall-cmd --reload
3 查看防火墙配置
# cat /etc/firewalld/zones/public.xml
来源: http://www.bubuko.com/infodetail-2495268.html