在centos 7上配置FIP服务器的详细教程!!!

在 ​CentOS 7 ​ 上配置 ​FTP 服务器 ​(通常使用 ​vsftpd,Very Secure FTP Daemon),可以实现多种用户访问方式,包括:

  1. 匿名用户(Anonymous)​ ​:无需账号密码,只能访问特定目录(如 /var/ftp/pub)。

  2. 本地用户(系统用户 / 实名用户)​​:使用系统已有的用户账号和密码登录,可访问自己的家目录或指定目录。

  3. 虚拟用户(Virtual Users)​​:使用独立的用户名/密码(不在系统用户中),更加安全,适合多用户管理。

  4. 访问控制​:限制用户只能访问自己的目录(chroot)、禁止某些IP、限制上传/下载等。


一、安装 vsftpd

1. 安装 vsftpd 软件包

复制代码
sudo yum install vsftpd -y

2. 启动 vsftpd 服务并设置开机自启

复制代码
sudo systemctl start vsftpd
sudo systemctl enable vsftpd

3. 检查服务状态

复制代码
sudo systemctl status vsftpd

二、配置匿名用户访问(Anonymous FTP)

匿名用户通常用于提供公共文件下载,不需要账号密码。

1. 编辑配置文件

复制代码
sudo vi /etc/vsftpd/vsftpd.conf

确保或添加以下配置项:

复制代码
# 允许匿名用户登录
anonymous_enable=YES

# 匿名用户默认登录目录为 /var/ftp
# 通常无需修改,系统已创建 /var/ftp 目录

# 允许匿名用户上传文件(可选,需配置写权限)
# anonymous_enable_write_enable=YES  # 一般不建议开启,有安全风险

# 匿名用户可下载的目录(通常是 /var/ftp/pub)
# 确保 pub 目录存在且有读权限
anon_upload_enable=NO             # 是否允许匿名上传(默认NO,较安全)
anon_mkdir_write_enable=NO        # 是否允许匿名创建目录
anon_other_write_enable=NO        # 是否允许其他写操作(删除、重命名等)

# 本地用户默认被 chroot(见下文)
local_enable=YES
write_enable=YES

2. 设置目录权限

复制代码
sudo chmod 755 /var/ftp
sudo chmod 755 /var/ftp/pub
sudo chown ftp:ftp /var/ftp/pub   # 通常 ftp 用户和组拥有 /var/ftp

如果你想允许匿名用户上传文件,可以设置:

复制代码
sudo mkdir /var/ftp/upload
sudo chmod 777 /var/ftp/upload

然后在配置中设置:

复制代码
anon_upload_enable=YES

3. 重启 vsftpd

复制代码
sudo systemctl restart vsftpd

4. 测试匿名登录

在 Windows 资源管理器地址栏输入:

复制代码
ftp://你的服务器IP

或使用 FTP 客户端(如 FileZilla)使用:

  • 用户名:anonymous

  • 密码:任意(或留空)


三、配置本地用户(实名用户)访问

本地用户指的是系统上已有的普通用户(如 user1),他们可以使用自己的用户名和密码登录 FTP,并默认访问自己的家目录(如 /home/user1)。

1. 确保配置中启用了本地用户

/etc/vsftpd/vsftpd.conf中确保有以下配置:

复制代码
local_enable=YES           # 允许本地用户登录
write_enable=YES           # 允许本地用户写入(上传/删除等)
local_umask=022            # 设置默认文件权限,如 644、755

2. 创建一个系统用户(如果还没有)

复制代码
sudo useradd user1
sudo passwd user1

默认情况下,用户登录 FTP 后会进入其家目录 /home/user1,并且被 chroot(限制在其家目录,无法访问上级目录)。

3. (可选)限制用户只能访问自己的家目录(chroot)

默认情况下,​vsftpd 允许通过配置限制本地用户在其家目录(chroot jail)​,确保配置中有:

复制代码
chroot_local_user=YES         # 将所有本地用户限制在自己的家目录
allow_writeable_chroot=YES    # 如果用户家目录可写,必须加上这一项

如果只想对某些用户 chroot,可以设置 chroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list,详见后文"访问控制"。

4. 重启服务

复制代码
sudo systemctl restart vsftpd

5. 测试登录

使用 FTP 客户端或命令行:

复制代码
ftp 你的服务器IP

输入刚才创建的用户名和密码,测试是否可以上传/下载文件。


四、配置虚拟用户(Virtual Users)

虚拟用户不在系统用户中,更加安全,适合多用户管理,每个虚拟用户可以有自己的家目录和权限。

1. 安装相关工具(db_load 用于生成数据库)

CentOS 7 默认有 db4-utilsdb5.3-utils,可以用来生成用户认证的数据库文件。

复制代码
sudo yum install db4-utils -y

如果提示没有 db4-utils,可以试:

复制代码
sudo yum install db5.3-utils -y

2. 创建虚拟用户账号文件

创建文本文件,每行一个用户,奇数行为用户名,偶数行为密码:

复制代码
sudo vi /etc/vsftpd/virtual_users.txt

内容示例:

复制代码
ftpuser1
password123
ftpuser2
abc456

3. 生成数据库文件

复制代码
sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

设置权限:

复制代码
sudo chmod 600 /etc/vsftpd/virtual_users.db

4. 配置 vsftpd 使用虚拟用户

编辑主配置文件:

复制代码
sudo vi /etc/vsftpd/vsftpd.conf

确保有以下配置:

复制代码
anonymous_enable=NO             # 禁用匿名登录
local_enable=NO                 # 禁用本地系统用户登录

# 启用虚拟用户
guest_enable=YES                # 启用虚拟用户映射为"guest"用户
guest_username=ftp              # 虚拟用户映射到的系统用户(如 ftp,需存在)
user_config_dir=/etc/vsftpd/user_conf  # 每个虚拟用户的个性化配置目录

# PAM 认证使用虚拟用户数据库
pam_service_name=vsftpd.virtual

注意:你需要创建一个 PAM 配置文件来使用虚拟用户数据库。

5. 创建 PAM 配置文件

复制代码
sudo vi /etc/pam.d/vsftpd.virtual

内容如下:

复制代码
auth required pam_userdb.so db=/etc/vsftpd/virtual_users
account required pam_userdb.so db=/etc/vsftpd/virtual_users

注意:这里的 virtual_users是不带 .db后缀的数据库名。
如果你的数据库是 /etc/vsftpd/virtual_users.db,则上面写 db=/etc/vsftpd/virtual_users即可,pam_userdb 会自动加后缀。

6. 创建虚拟用户配置目录及个性化配置

复制代码
sudo mkdir /etc/vsftpd/user_conf

为每个虚拟用户创建一个配置文件,如 ftpuser1

复制代码
sudo vi /etc/vsftpd/user_conf/ftpuser1

内容示例:

复制代码
local_root=/var/ftp/ftpuser1
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=NO
  • local_root:该虚拟用户登录后看到的根目录,比如 /var/ftp/ftpuser1

  • 你需要提前创建该目录并设置权限:

复制代码
sudo mkdir -p /var/ftp/ftpuser1
sudo chown ftp:ftp /var/ftp/ftpuser1
sudo chmod 755 /var/ftp/ftpuser1

7. 重启 vsftpd

复制代码
sudo systemctl restart vsftpd

8. 测试虚拟用户登录

使用 FTP 客户端,输入:

  • 用户名:ftpuser1

  • 密码:password123

应该能登录到 /var/ftp/ftpuser1目录,并可上传文件(如果配置了 write_enable=YES)。


五、访问控制

1. 限制用户只能访问自己的目录(chroot)

/etc/vsftpd/vsftpd.conf中添加或确保有:

复制代码
chroot_local_user=YES
allow_writeable_chroot=YES

如果只想对部分用户进行 chroot,使用:

复制代码
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

然后创建 /etc/vsftpd/chroot_list文件,每行一个要限制的用户:

复制代码
sudo vi /etc/vsftpd/chroot_list

内容:

复制代码
user1
user2

2. 禁止某些 IP 访问(可通过防火墙或 TCP Wrappers)

  • 使用 ​防火墙(firewalld/iptables)​​ 限制 IP 访问 FTP 的 21 端口。

  • 或编辑 /etc/hosts.allow/etc/hosts.deny(如果 vsftpd 支持 tcp_wrappers)。

3. 限制上传/下载

在用户配置文件(如 /etc/vsftpd/user_conf/username)中设置:

复制代码
write_enable=YES|NO         # 是否允许上传
anon_upload_enable=NO       # 匿名上传
local_enable=YES            # 本地用户

六、总结:FTP 服务配置对比表

功能 配置要点 适用场景
匿名用户 anonymous_enable=YES,目录 /var/ftp/pub,权限设置 提供公共文件下载
本地用户(实名)​ local_enable=YES,用户用自己的系统账号登录,限制家目录(chroot) 内部员工使用自己账号访问
虚拟用户 使用独立数据库(db),通过 pam_userdb认证,每个用户可单独配置 多租户、外部客户、更安全灵活
访问控制 chroot、防火墙、hosts.allow/deny、限制上传/下载 增强安全性,防止越权访问

七、防火墙放行 FTP

FTP 默认使用 ​21 端口(控制连接)​ ,如果使用主动模式还可能用到 ​20 端口(数据连接)​,被动模式会使用随机高端口。

建议使用 ​被动模式(pasv)​,并配置端口范围:

/etc/vsftpd/vsftpd.conf中添加:

复制代码
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000

然后放行防火墙:

复制代码
sudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
sudo firewall-cmd --reload

八、总结一句话

在 ​CentOS 7 ​ 上配置 ​FTP 服务器(vsftpd)​ ,可以通过修改 /etc/vsftpd/vsftpd.conf启用 ​匿名用户、本地用户、虚拟用户 ,并通过 ​chroot、权限控制、防火墙 ​ 实现访问限制,其中 ​虚拟用户​ 更加安全灵活,适合生产环境多用户管理。

相关推荐
FJW0208148 小时前
DevOps——CI/CD持续集成与持续交付/部署的理解与部署
运维·ci/cd·devops
Java 码农9 小时前
Linux shell sed 命令基础
linux·运维·服务器
yong15858553439 小时前
1. Linux C++ muduo 库学习——库的编译安装
linux·c++·学习
fyakm9 小时前
Linux网络接口配置:静态IP与动态IP设置(附代码示例)
linux·运维·tcp/ip
怀旧,9 小时前
【Linux系统编程】5. 基础开发⼯具(下)
linux·运维·服务器
喵叔哟9 小时前
10. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--Web API 接口与前端集成:部署与生产运维:稳定性、可观测与成本
运维
杰克崔9 小时前
内核里常用宏BUG_ON/WARN_ON/WARN_ONCE
linux·运维·服务器
一枚正在学习的小白9 小时前
k8s的包管理工具helm3--流程控制语句和变量(3)
linux·运维·服务器·云原生·kubernetes
Nimsolax9 小时前
Linux网络传输层协议UDP
linux·网络·udp