ubuntu配置vsftpd

在Ubuntu上快速创建FTP服务器,推荐使用vsftpd(Very Secure FTP Daemon)。以下是完整步骤:

1. 安装vsftpd

bash
sudo apt update
sudo apt install vsftpd

2. 配置vsftpd

备份原始配置

bash
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup

编辑配置文件

bash
sudo vim /etc/vsftpd.conf

配置内容

bash
# 基本设置
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES

# 安全设置
chroot_local_user=YES
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

# 用户限制
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

# 日志设置
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

# 端口范围
pasv_min_port=40000
pasv_max_port=50000

# 根目录限制
local_root=/srv/ftp/shared

3. 创建FTP目录和设置权限

bash
# 创建共享目录
sudo mkdir -p /srv/ftp/shared

# 设置目录权限
sudo chown nobody:nogroup /srv/ftp/shared
sudo chmod 755 /srv/ftp/shared

# 创建上传目录(普通用户可上传)
sudo mkdir -p /srv/ftp/shared/upload
sudo chown ftp:ftp /srv/ftp/shared/upload
sudo chmod 755 /srv/ftp/shared/upload

4. 创建用户

创建普通用户组和用户

bash
# 创建用户组
sudo groupadd ftpusers

# 创建普通FTP用户(无删除权限)
sudo useradd -g ftpusers -d /srv/ftp/shared -s /bin/bash ftpuser1
sudo passwd ftpuser1

sudo useradd -g ftpusers -d /srv/ftp/shared -s /bin/bash ftpuser2
sudo passwd ftpuser2

创建特殊用户(有删除权限)

bash
# 创建特殊用户组
sudo groupadd ftpadmin

# 创建管理员用户
sudo useradd -g ftpadmin -d /srv/ftp/shared -s /bin/bash ftpadmin
sudo passwd ftpadmin

5. 配置用户权限

创建用户列表文件

bash
sudo vim /etc/vsftpd.user_list

添加允许登录的用户:

text
ftpuser1
ftpuser2
ftpadmin

设置目录权限控制删除功能

bash
# 设置共享目录权限,禁止普通用户删除
sudo chown ftpadmin:ftpadmin /srv/ftp/shared
sudo chmod 755 /srv/ftp/shared

# 上传目录设置为粘滞位,防止用户删除他人文件
sudo chown ftpadmin:ftpusers /srv/ftp/shared/upload
sudo chmod 3755 /srv/ftp/shared/upload  # 粘滞位,只有文件所有者和ftpadmin可以删除

6. 配置PAM认证

bash
sudo vim /etc/pam.d/vsftpd

确保包含以下行:

text
auth    required pam_shells.so

7. 启动服务

bash
# 重启vsftpd服务
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd

# 检查服务状态
sudo systemctl status vsftpd

8. 配置防火墙(如果需要)

bash
# 开放FTP端口
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw reload

9. 测试FTP连接

在局域网内其他机器测试

bash
# 安装ftp客户端
sudo apt install ftp

# 连接测试
ftp 192.168.1.100  # 替换为你的Ubuntu服务器IP

10. 高级配置(可选)

创建更精细的权限控制脚本

bash
sudo vim /usr/local/bin/ftp_permission_check.sh
bash
#!/bin/bash
# FTP权限检查脚本

USER=$1
OPERATION=$2
FILE=$3

if [ "$OPERATION" == "delete" ]; then
    # 只有ftpadmin用户可以删除文件
    if [ "$USER" != "ftpadmin" ]; then
        echo "Permission denied: Only admin can delete files"
        exit 1
    fi
fi

exit 0

验证功能

测试普通用户权限

bash
# 以普通用户登录
ftp 192.168.1.100
# 用户名: ftpuser1
# 尝试删除文件 - 应该失败

测试管理员权限

bash
# 以管理员登录
ftp 192.168.1.100
# 用户名: ftpadmin
# 尝试删除文件 - 应该成功

故障排除

查看日志

bash
sudo tail -f /var/log/vsftpd.log

检查连接

bash
# 检查端口监听
sudo netstat -tlnp | grep vsftpd

# 测试本地连接
ftp localhost

快速部署脚本

如果你想要一键部署,可以创建脚本:

bash
#!/bin/bash
# ftp_setup.sh

echo "开始部署FTP服务器..."

# 安装vsftpd
sudo apt update && sudo apt install -y vsftpd

# 创建目录结构
sudo mkdir -p /srv/ftp/shared/upload

# 配置权限
sudo chown nobody:nogroup /srv/ftp/shared
sudo chmod 755 /srv/ftp/shared
sudo chown ftpadmin:ftpusers /srv/ftp/shared/upload
sudo chmod 3755 /srv/ftp/shared/upload

# 创建用户
sudo groupadd ftpusers
sudo groupadd ftpadmin
sudo useradd -g ftpusers -d /srv/ftp/shared -s /bin/bash ftpuser1
echo "ftpuser1:password123" | sudo chpasswd
sudo useradd -g ftpadmin -d /srv/ftp/shared -s /bin/bash ftpadmin
echo "ftpadmin:admin123" | sudo chpasswd

# 配置用户列表
echo -e "ftpuser1\nftpadmin" | sudo tee /etc/vsftpd.user_list

echo "FTP服务器部署完成!"

这样你就建立了一个满足所有需求的FTP服务器:

  • ✅ 局域网用户可连接

  • ✅ 所有用户可上传下载

  • ✅ 普通用户不能删除文件

  • ✅ 特定管理员用户可以删除文件

posted @ 2025-10-17 21:02  人海中的海盗  阅读(4)  评论(0)    收藏  举报