CentOS FTP 服务器共享文件夹管理
一 场景与方案选型
- 常见需求包括:为多个用户提供一个可读写的公共目录、为每个用户隔离个人目录、仅开放只读的公共资料库、以及更安全的 SFTP 共享。下表给出常用方案与要点:
| 场景 |
推荐方案 |
关键要点 |
| 多用户公共目录(可读写) |
vsftpd + 共享组 + ACL |
共享目录属主 root:共享组,权限 770;用户加入共享组;必要时用 ACL 给个别用户额外授权 |
| 用户个人目录隔离 |
vsftpd + chroot |
启用 chroot 锁定用户到家目录;如需可写,使用 allow_writeable_chroot 或“可写子目录”方案 |
| 只读公共资料库 |
vsftpd 匿名或本地只读 |
匿名根目录设为只读共享目录;或本地用户只读策略 |
| 更安全的共享(SFTP) |
OpenSSH SFTP + chroot |
使用组限制、目录 root 属主、权限 755、子目录授权上传,必要时 ForceCommand internal-sftp |
上述做法在 CentOS 上均易落地,且便于权限审计与维护。
二 快速搭建 vsftpd 公共共享目录(本地用户)
- 安装与启动
- 安装:sudo yum install -y vsftpd
- 开机自启并启动:sudo systemctl enable --now vsftpd
- 检查端口:sudo ss -tlnp | grep :21
- 创建共享目录与组
- 目录:sudo mkdir -p /ftp/share
- 组:sudo groupadd ftpgrp
- 权限:sudo chown root:ftpgrp /ftp/share && sudo chmod 770 /ftp/share
- 创建用户并加入共享组(禁止登录 shell,仅用于 FTP)
- sudo useradd -d /ftp/share -s /sbin/nologin ftpuser1
- sudo usermod -aG ftpgrp ftpuser1
- 如需个人隔离目录:sudo mkdir -p /ftp/home/ftpuser1 && sudo chown ftpuser1:ftpuser1 /ftp/home/ftpuser1 && sudo chmod 700 /ftp/home/ftpuser1
- 配置 vsftpd(/etc/vsftpd/vsftpd.conf)
- 核心:
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- local_umask=022
- chroot_local_user=YES
- allow_writeable_chroot=YES
- listen=YES
- 可选:启用用户名单
- userlist_enable=YES
- userlist_file=/etc/vsftpd/user_list
- userlist_deny=NO(白名单模式)
- 防火墙放行
- 被动模式需放行 FTP 数据端口范围(示例 30000–31000):
- sudo firewall-cmd --permanent --add-service=ftp
- sudo firewall-cmd --permanent --add-port=30000-31000/tcp
- sudo firewall-cmd --reload
- 重启生效:sudo systemctl restart vsftpd
- 客户端测试
- 使用 FileZilla/命令行 ftp 连接,验证登录、列目录、上传/下载、公共目录写入与隔离目录不可越权访问。
三 权限与 SELinux 要点
- 共享目录推荐“root 属主 + 共享组 + 770”,必要时用 ACL 精细化授权:
- 例:sudo setfacl -m u:ftpuser2:rwx /ftp/share(仅给特定用户额外写权限)
- SELinux(若启用)
- 允许本地用户家目录访问:sudo setsebool -P ftp_home_dir on
- 若自定义目录,修正类型:sudo chcon -Rt public_content_rw_t /ftp/share(只读共享可用 public_content_t)
- chroot 可写性
- 若 chroot 目录可写,vsftpd 需配置 allow_writeable_chroot=YES;更安全的做法是保持 chroot 目录只读,在内部为上传创建可写子目录(如 upload,权限 770 并归属相应用户/组)。
四 常见问题与排查
- 无法启动 vsftpd
- 检查端口占用:sudo ss -tlnp | grep :21;若被占用,释放或调整端口后重启服务。
- 登录失败或被动模式不可用
- 核对 /etc/vsftpd/vsftpd.conf 关键项(local_enable/write_enable、chroot 相关、listen);确保防火墙放行控制端口与被动端口范围。
- 能登录但无法写入共享目录
- 核对共享目录属主/属组与权限(root:ftpgrp,770),用户是否在 ftpgrp;若启用 SELinux,检查布尔值与上下文是否正确。
- 用户被越权访问
- 确认 chroot 生效且用户家目录不可向上遍历;公共目录避免给“其他用户”写权限;必要时用 ACL 精确授权。
五 SFTP 共享目录管理(更安全的替代)
- 适用场景:需要更强的传输安全(加密通道)且以目录为边界进行隔离与授权。
- 基本思路
- 创建 sftp 组与共享目录:sudo groupadd sftpusers;sudo mkdir -p /sftp/share
- 共享目录权限:sudo chown root:sftpusers /sftp/share && sudo chmod 755 /sftp/share
- 可写子目录:sudo mkdir /sftp/share/upload && sudo chown ftpuser1:sftpusers /sftp/share/upload && sudo chmod 770 /sftp/share/upload
- 配置 /etc/ssh/sshd_config(片段):
- Match Group sftpusers
- ChrootDirectory /sftp/%u
- ForceCommand internal-sftp
- AllowTcpForwarding no
- X11Forwarding no
- 重启 SSH:sudo systemctl restart sshd
- 说明
- 通过组限制与 chroot,用户登录后根即为各自目录;在共享目录内为需要协作的用户创建可写子目录并授权,实现“公共可写、个人隔离”。