Linux上安装配置FTP、以及常见问题解决

一、概述

  • FTP服务器为vsftpd,客户端为ftp。

  • 默认FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。如果服务器有防火墙,则建议设置为被动模式,额外开放指定数据端口。

版本信息

[root@VM-4-11-centos ~]# uname -r
3.10.0-1160.11.1.el7.x86_64
[root@VM-4-11-centos ~]# cat /proc/version
Linux version 3.10.0-1160.11.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Fri Dec 18 16:34:56 UTC 2020

二、安装vsftpd

# 1. 检查是否安装了ftp
rpm -qa |grep vsftpd
vsftpd -v
# 2. yum安装ftp
yum install -y vsftpd
# 3.启动ftp服务
service vsftpd start
# 4.查看ftp服务状态
service vsftpd status
# 查看当前端口开放情况
netstat -nlpt
netstat -nltp | grep 21
# 查看FTP目录
curl ftp://10.0.4.11

三、配置vsftpd

# 默认安装目录
[root@VM-4-11-centos ~]# cd /etc/vsftpd
[root@VM-4-11-centos vsftpd]# ll
总用量 20
-rw------- 1 root root  125 610 00:15 ftpusers # 禁止登录ftp用户
-rw------- 1 root root  361 610 00:15 user_list # 待授权访问的用户
-rw------- 1 root root 5116 610 00:15 vsftpd.conf # 配置文件
-rwxr--r-- 1 root root  338 610 00:15 vsftpd_conf_migrate.sh

# 如果vsftpd.conf 中 userlist_deny=YES(默认),则决不允许user_list中的用户使用ftp登陆。userlist_deny=NO,则仅允许此文件中的用户。
# 默认情况下vsftpd还检查ftpusers文件里有哪些用户被拒绝。


# 禁用匿名访问和切换根目录
vim /etc/vsftpd/vsftpd.conf
# 禁用匿名用户
anonymous_enable=NO
# 禁止切换根目录(还需要设置allow_writeable_chroot,否则无法登录)
# chroot_local_user=YES
# allow_writeable_chroot=YES
# 重启
service vsftpd restart

# 创建 FTP 用户
useradd ftp_wangfugui
# 设置密码
echo "123456" | passwd ftp_wangfugui --stdin
# 限制该用户仅能通过 FTP 访问,不能登录系统
usermod -s /sbin/nologin ftp_wangfugui
# 为用户分配主目录
mkdir -p /home/ftp_wangfugui/ftp/pub
# /home/ftp_wangfugui/ftp 为主目录, 该目录不可上传文件
# /home/ftp_wangfugui/ftp/pub 文件只能上传到该目录下
chmod a-w /home/ftp_wangfugui/ftp && chmod 777 -R /home/ftp_wangfugui/ftp/pub
# 创建登录欢迎文件
echo "Welcome to use FTP service." > /home/ftp_wangfugui/ftp/welcome.txt
# 设置为用户的主目录,-d <登录目录>
usermod -d /home/ftp_wangfugui/ftp ftp_wangfugui

# 访问FTP
# 关闭SELinux服务
setenforce 0
# 关闭防火墙
service iptables stop 或 iptables  -F

四、客户端ftp

基础命令
yum install -y ftp
# 登录
ftp 10.0.3.11 21
echo "hello world" > aa.txt
# 上传xxx.txt 
put xxx.txt 
# 下载xxx.txt 
get xxx.txt 
无法登录
# 检查 pam 保护机制:该配置项的含义为仅允许用户的shell为/etc/shells文件内的shell命令时,才能够成功,而创建ftp用户时,为了禁止ssh登录,一般多为/bin/false 、/usr/sbin/nologin 等,显然不是一个有效的bash,也就无法登录了。
vim /etc/pam.d/vsftpd
# 将 auth required pam_shells.so 修改为-> auth required pam_nologin.so 
auth required pam_nologin.so 
或者直接注释掉
#auth    required pam_shells.so
# 重启vsftpd
service vsftpd restart
登录慢卡

当客户端连接服务器时,服务器会执行一个DNS查找,来确认域名,如果所用DNS解析不到,会等到超时为止。

vim /etc/vsftpd/vsftpd.conf
# 不查找dns服务器
reverse_lookup_enable=NO
# 重启
service vsftpd restart

FTP客户端切换模式
# 关闭被动模式,再次执行该命令就可以启用
ftp> passive
Passive mode off.

可登录,无法读写

报错:

curl: (67) Access denied: 530

553 Could not create file.

550 Failed to open file.

解决1:检查目录

我们的工作目录是/home/ftpserver/ftp/pub,客户端登录默认为/home/ftpserver/ftp。

  • 如果使用ftp客户端工具,则需要:ftp> cd pub

  • 如果是Java客户端

    // 转移工作目录至指定目录下
    client.changeWorkingDirectory("pub");
    

解决2:检查权限

检查ftp工作目录的权限。

ls -l /home/ftpserver
dr-xr-xr-x 3 root root 4096 66 16:36 ftp    # 无写入权限

# 加入写权限
chmod +w /home/ftpserver

解决3:主被动模式

PORT(主动 - active mode)模式:服务器的21准入和20准出,客户端配置允许服务器连接。

PASV(被动 - passive mode)模式:服务器随机打开大于1024的tcp端口和21端口。(服务器有防火墙应该设置为被动模式,服务端配置端口区间。)

开启被动模式:

(1)修改/etc/vsftpd/vsftpd.conf文件配置

# 服务器开放21,20,10022端口
pasv_enable=yes
#pasv_promiscuous=no (Default: NO) 是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用)
pasv_max_port=10022
pasv_min_port=10022
# 重启
service vsftpd restart

(2)Java使用FTPClient客户端

// 启动被动模式
client.enterLocalPassiveMode();

五、卸载vsftpd

service vsftpd stop
yum remove vsftpd
rpm -qa |grep vsftp

六、使用

FTP服务:10.0.3.11       21
FTP用户:ftp_wangfugui
FTP密码:123456
FTP目录:/home/ftp_wangfugui/ftp/pub

Java客户端

# 转移工作目录至指定目录下 /home/ftp_wangfugui/ftp/pub
client.changeWorkingDirectory("pub");
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
FTP服务器配置 VSFTP配置文件路径:/etc/vsftpd/vsftpd.conf,重要参数: anonymous_enable=yes/no 是否允许匿名用户访问 anon_upload_enable=yes/no 是否允许匿名用户上传文件 anon_mkdir_write_enable=yes/no 是否允许匿名用户创建目录 anon_other_write_enable=yes/no 匿名用户和虚拟用户是否拥有删除权限 local_enable=yes/no 是否允许本地用户登陆 write_enable=yes/no 设置全局是否可写 anon_root=/var 指定匿名用户目录 chroot_local_user=yes 锁定所有用户到用户主目录 chroot_list_enable=yes/no 锁定列表中的用户到主目录,需要配合下一参数使用 chroot_list_file=/etc/vsftpd/chroot_list 指定存储被锁定用户的列表文件位置 chown_uploads=yes/no 匿名用户上传所有者指定功能,需要与下一参数配合使用 chown_username=用户名 指定匿名用户上传文件的所有者 max_clients=300 最大客户端连接数为300 anon_max_rate=30000 匿名用户和虚拟用户限速为30K/S local_max_rate=30000 本地用户限速为30K/S max_per_ip=10 每个IP最大连接数 listen_port=22 更改监听端口 实现如下要求:允许匿名用户登陆,匿名用户限速为60K/S,只允许下载。监听端口为22,最大连接数为10。新建用户ftp1,限速为200K/S,允许上传下载删除新建文件夹。进入目录/etc/vsftpd,用vi编辑器打开vsftpd.conf主配置文件: 直接添加以下选项: [root@LidadeFedora vsftpd]# service vsftpd restart 添加用户ftp1,设置登录脚本为 /sbin/nologin: vsftp默认目录为:/var/ftp,为方便测试,在/var/ftp下新建一个文件"testLocal",在"/var/ftp/pub"新建一个文件"testAnon"。 由于使用root用户新建文件文件的所有者为root,所以需要把文件的权限设置为644其他用户才能读取该文件 设置/var/ftp/pub权限为777,表示所有用户均有读写权限. 由于端口22被ssh服务器占用,所以需要关闭ssh服务并重启vsftp服务。 客户端用Flashfxp测试:新建站点"VsftpTest",输入Vsftp服务器的IP地址,端口填22,用户名填ftp1,密码填你设置的密码,然后点击"连接"按钮: 由于没有使用选项:local_root,登陆本地用户时自动跳转到该用户的主目录.没有使用chroot_local_user=yes,所以本地用户可以浏览整个文件系统中他有权限读取的文件文件夹: 切换到目录"/var/ftp/pub",该目录的权限为777,上传一个10M以上的文件,测试ftp1的上传速度: 新建文件夹和删除权限测试省略。下面测试匿名用户权限:勾选"匿名"选项并连接: 匿名用户登陆成功: 进入pub目录,尝试删除testAnon文件失败,说明这里是配置文件中的anon_other_write_enable=no生效了。最终权限等于配置文件中的权限和linux文件系统权限相或的结果。比如vsftp配置文件中允许匿名用户下载,但光这样是不够的,还需要被下载的文件文件夹的能够被其他用户读取。 尝试上传文件失败,符合匿名用户只允许下载的要求: 最后测试匿名用户的下载速度: vsftp配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上富贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值