原文:https://blog.csdn.net/zz_aiytag/article/details/107451720
推荐文章:https://www.cnblogs.com/fan-yuan/p/11347943.html ( 修改配置 root登陆)
提醒:链接的时候选择 sftp 不是 ftp 端口默认21 可以修改
文章目录
环境与需求
安装
首先检查系统是不是已经有了ftp服务
[root@worker opt]# rpm -qa | grep vsftpd
我这里没有安装,直接安装
[root@worker opt]# yum -y install vsftpd
创建ftp用户
创建用户
# useradd -s 是指定用户登入后所使用的shell。默认值为/bin/bash
# 这里指定/sbin/nologin是不允许系统login,可以使用其他ftp等服务
# -d 是指定用户登入时的主目录
# 这个ftpuser01目录不要手动创建,否则还需要修改权限,在下面指令执行后会自动创建对应目录
[root@worker opt]# useradd -s /sbin/nologin -d /home/ftpuser01 ftpuser01
查看用户
[root@worker opt]# cat /etc/passwd
ftpuser01:x:1001:1001::/home/ftpuser01:/sbin/nologin
设置用户密码
[root@worker opt]# passwd ftpuser01
Changing password for user ftpuser01.
New password: # 我这里输入的是123456
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
修改配置文件
编辑/etc/vsftpd/vsftpd.conf
文件
[root@worker opt]# vim /etc/vsftpd/vsftpd.conf
# 是否允许匿名用户登录,改成NO
anonymous_enable=NO
# 所有的用户只能在自己的目录范围内活动
chroot_list_enable=NO
chroot_local_user=YES
#不增加此行参数,登录时会出现用户身份验证失败
allow_writeable_chroot=YES
# 如果配置了上面一行仍然出现用户身份验证失败的问题,则有可能是selinux问题了
# 可以临时关闭selinux测试一下
# setenforce 0
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
以下核心参数按照默认即可
local_enable=YES
write_enable=YES
local_umask=022
pam_service_name=vsftpd
connect_from_port_20=YES
先暂时修改上述参数,保存退出,重启vsftpd服务
[root@worker opt]# systemctl restart vsftpd
[root@worker opt]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2020-07-19 22:01:03 CST; 6s ago
Process: 1152 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 1153 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─1153 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
我这里使用xftp登录
登录后只显示根目录,然后在根目录创建一个文件夹,在LINUX
中查看该文件夹,可知根目录就是用户的活动空间。
[root@worker opt]# cd /home/ftpuser01/
[root@worker ftpuser01]# ll
total 0
drwxr-xr-x 2 ftpuser01 ftpuser01 6 Jul 19 22:12 testpath
启用日志功能
以下日志默认是开启的,不用管,直接查看/var/log/xferlog
即可
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
看了很多博客,说vsftpd
本身有自己风格的日志,需要配置以下
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
但是我配了之后,启动vsftpd
失败,说参数有问题,先暂时不处理
[root@worker log]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2020-07-19 22:26:31 CST; 54s ago
Process: 1220 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=2)
Main PID: 1183 (code=killed, signal=TERM)
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: Starting Vsftpd ftp daemon...
Jul 19 22:26:31 worker.learn.bigdata vsftpd[1220]: 500 OOPS: bad bool value in config file for: dual_log_enable
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: vsftpd.service: control process exited, code=exited status=2
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: Failed to start Vsftpd ftp daemon.
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: Unit vsftpd.service entered failed state.
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: vsftpd.service failed.
安全设置
# 用户空闲超时,单位秒
idle_session_timeout=600
# 数据连接空闲超时,单位秒
data_connection_timeout=120
# 将客户端空闲1分钟后断开
accept_timeout=60
# 本地用户传输速率,单位bite
local_max_rate=100000
# FTP的最大连接数
max_clients=200
# 每IP的最大连接数
max_per_ip=10
被动模式设置
# 是否开户被动模式
pasv_enable=YES
# 被动模式最小端口
pasv_min_port=30000
# 被动模式最大端口
pasv_max_port=30999
防火墙开启状态设置
文章中以上操作都是防火墙关闭状态下进行的,当防火墙开启时,会出现如下一系列的问题。
查看防火墙状态
[root@manager services]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-07-22 10:14:35 CST; 35min ago
Docs: man:firewalld(1)
Main PID: 561 (firewalld)
CGroup: /system.slice/firewalld.service
└─561 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
防火墙开启状态下,使用ftp工具连接时出现无法连接的情况。
不关闭防火墙,只能对防火墙的规则进行修改。firewalld
和iptables
不太一样,firewalld
可以直接对服务进行策略设置。
[root@manager firewalld]# cd /usr/lib/firewalld
[root@manager firewalld]# ll
total 16
drwxr-xr-x. 2 root root 203 Jul 16 09:21 helpers
drwxr-xr-x. 2 root root 4096 Jul 16 09:21 icmptypes
drwxr-xr-x. 2 root root 20 Jul 16 09:21 ipsets
drwxr-xr-x. 2 root root 8192 Jul 22 10:44 services
drwxr-xr-x. 2 root root 94 Jul 16 09:21 xmlschema
drwxr-xr-x. 2 root root 163 Jul 16 09:21 zones
查看firewalld
自带的服务,在services
目录下有自带的ftp.xml
文件,它已经定义好了21端口。
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>FTP</short>
<description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
<port protocol="tcp" port="21"/>
<module name="nf_conntrack_ftp"/>
</service>
使用firewall-cmd
工具直接将ftp
服务放入通行名单
先查看firewall-cmd
工具版本
[root@manager services]# firewall-cmd --version
0.4.4.4
查看当前活动区域
[root@manager services]# firewall-cmd --get-active-zones
public
interfaces: ens33
查看当前区域的服务
[root@manager services]# firewall-cmd --list-service
ssh dhcpv6-client
开放ftp服务
# 暂时开放
[root@manager services]# firewall-cmd --add-service=ftp
success
# 永久开放
[root@manager services]# firewall-cmd --add-service=ftp --permanent
success
# 永久关闭
[root@manager services]# firewall-cmd --remove-service=ftp --permanent
success
# 任何改动操作都需要重新加载
[root@manager services]# firewall-cmd --reload
success
执行完永久开放和重新加载后,再次查看服务
[root@manager services]# firewall-cmd --list-service
ssh dhcpv6-client ftp
再次登录就能正常登录了。