CentOS 搭建 ftp 服务 (VSFTP)

CentOS FTP shell

Posted by gomyck on December 10, 2019

简单描述搭建过程, 使用 windows 系统连接的过程, 以及中间遇到的问题

软件安装

1.线上安装使用 yum 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 查看镜像仓库有什么, 我一般都使用阿里云的镜像仓库, 如果需要改 yum 的镜像源, 可以参考文章: yum修改镜像源
$ yum repolist

# 安装服务, 所有询问皆为 yes (-y)
$ yum -y install vsftpd

# 进入配置文件夹
$ cd /etc/vsftpd/

# 修改配置文件
$ vim vsftpd.conf

# 启动服务
$ systemctl restart vsftpd

# 添加系统用户, vsftp 可以用 linux 的用户进行登录, 但是为了系统安全, 我们设置用户为nologin状态
# 也就是说, 有这个用户, 但是不能用这个用户登录当前服务器, 只能用作登录 ftp 服务
# -d 为指定用户的工作目录(home dir, ftp服务上传文件默认就是 home 文件夹
$ useradd gomyck -s /sbin/nologin -d /home/gomyck

# 修改 gomyck 用户的密码
$ passwd gomyck

# 在 /bin/shell 文件中添加 /sbin/nologin
$ echo /sbin/nologin >> /etc/shells

# 可能需要添加防火墙规则
$ firewall-cmd --permanent --add-service=ftp
$ firewall-cmd --reload


注意事项: 配置文件使用默认的就好, 一般来说啥也不用改

关于 /etc/shells 的解释

The /etc/shells is a Linux / UNIX text file which contains the full pathnames of valid login shells. This file is used by various commands including chsh command. Please note that there are programs which consult this file to find out if a user is a normal user. For example, ftp daemons such as ftpd disallow access to users with shells not included in this file.

客户端连接

windows 客户端连接

1
2
3
4
5
6
7
8
1. win + e
2. 右键选择添加网络位置
3. 输入: ftp://192.168.1.xxx (ftp 服务器地址)
4. 取消勾选匿名登录, 并在下方输入框输入: gomyck  (添加的用户)
5. 点击下一步, 输入网络位置名称, 点击完成
6. 双击添加的网络文件夹, 如果提示输入密码, 则输入: xxxxx (gomyck 用户的密码)

macOS 客户端连接

1
2
3
4
5
1. command + k
2. 在输入框里输入 ftp://192.168.1.xxx (ftp 服务器地址)
3. 点击完成, 按照提示操作即可

遇见的问题

一开始新建 nologn 用户, 使用客户端连接不了, 最后发现, /bin/shells 文件里没有 nologin 配置, 加上即可

VSFTP 配置

配置文件 文件路径
vsftpd的可执行文件 /usr/sbin/vsftpd
vsftpd启动脚本 /etc/rc.d/init.d/vsftpd
vsftpd主配置文件 /etc/vsftpd/vsftpd.conf
vsftpd的PAM认证文件 /etc/pam.d/vsftpd
禁止使用vsftpd的用户列表文件 /etc/vsftpd/ftpusers
禁止或允许使用vsftpd的用户列表文件(默认是禁止列表) /etc/vsftpd/user_list
匿名用户主目录 /var/ftp

常用的全局配置

listen_address=192.168.245.128 设置监听的IP地址
listen=YES 是否以独立运行的方式监听服务
listen_port=21 设置监听FTP服务的端口号
write_enable=YES 是否启用写入权限
download_enable=YES 是否允许下载文件
max_clients=0 限制并发客户端连接数
max_per_ip=0 限制同一IP地址的并发连接数
pasv_enable=yes 设置最小的被动端口号
pasv_min_port=9981 设置最小的被动端口号
pasv_max_port=9981 设置最大的被动端口号
dirmessage_enable=yes 是否显示目录说明文件
xferlog_enable=yes 是否记录ftp传输过程
xferlog_file=/var/log/vsftpd.log 日志的路径和名字
xferlog_std_format=yes 是否使用标准的ftp xferlog
chown_username=username 是否改变上传文件的属主,如果是则需要输入一个系统用户名
idle_session_timeout=600 设置默认不活跃session时间
date_connection_timeout=120 设置数据传输超时时间

本地用户访问限制:

userlist_enable=YES 是否启用user_list列表文件
userlist_deny=YES 是否禁用user_list中的用户

本地用户权限控制:

local_enable=YES 是否启用本地系统用户
local_umask=022 本地用户所上传文件的权限掩码
local_root=/var/ftp 设置本地用户的FTP根目录
chroot_local_user=YES 是否将用户禁锢在主目录
local_max_rate=0 限制最大传输速率(字节/秒)
chroot_list_enable=YES 配合下面的文件使用
chroot_list_file=/etc/vsftpd/chroot_list 配合使用,列表中的用户将被禁锢在目录中

匿名权限控制:

anonymous_enable=YES 启用匿名访问
anon_umask=022 匿名用户所上传文件的权限掩码
anon_root=/var/ftp 匿名用户的FTP根目录
anon_word_readable_only=YES 允许匿名下载
anon_upload_enable=YES 允许上传文件anon_mkdir_write_enable=YES:允许创建目录
anon_other_write_enable=YES 开放其他写入权
anon_max_rate=0 限制最大传输速率(字节/秒)