部署ftp服务(vsftp+nginx)

背景

领导说,要搞个ftp服务,方便各个部门的人下载资源,我觉得确实有这个必要,速度给他搞一个。

分析需求

1.各个部门一个账号和密码
2.有个公共的文件夹public,每个账号都能够访问
3.各自部门的账号,只能下载自己文件夹下的文件和public文件夹下的文件,看不到其他用户的目录
4.要能通过浏览器下载
5.前10m不受限制,之后限制下载速度为2m/s

规划

/app/vsftpd/public(公共文件夹)
/app/vsftpd/u01(u01用户的文件夹)
/app/vsftpd/u02(u02用户的文件夹)
/app/vsftpd/u03(u03用户的文件夹)

部署

1.安装vsftpd+nginx

# 安装vsftpd和nginx(nginx也可以选择自己编译)
sudo yum install -y vsftpd nginx

# 安装ftp客户端用于测试
sudo yum install -y ftp

# 启动服务并设置开机自启
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
sudo systemctl start nginx
sudo systemctl enable nginx

# 开放防火墙端口
sudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

2.创建目录结构和用户

# 创建主目录结构
sudo mkdir -p /app/vsftpd/{public,u01,u02,u03}

# 创建用户并设置主目录
sudo useradd -d /app/vsftpd/u01 -s /sbin/nologin u01
sudo useradd -d /app/vsftpd/u02 -s /sbin/nologin u02
sudo useradd -d /app/vsftpd/u03 -s /sbin/nologin u03

# 设置密码(交互式,按提示设置密码)
sudo passwd u01
sudo passwd u02
sudo passwd u03

# 设置目录权限
sudo chown u01:u01 /app/vsftpd/u01
sudo chown u02:u02 /app/vsftpd/u02
sudo chown u03:u03 /app/vsftpd/u03
sudo chmod 755 /app/vsftpd/public
sudo chmod 755 /app/vsftpd/u0{1,2,3}

# 创建公共目录的符号链接到各用户目录
sudo ln -s /app/vsftpd/public /app/vsftpd/u01/public
sudo ln -s /app/vsftpd/public /app/vsftpd/u02/public
sudo ln -s /app/vsftpd/public /app/vsftpd/u03/public

3.配置VSFTPD

[root@mail public]# cat /etc/vsftpd/vsftpd.conf |grep -v  ^#|grep -v ^$
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_min_port=40000
pasv_max_port=45000
#local_root=/app/vsftpd/$USER
#限制VSFTP服务器同时接受的最大总连接数为50个
max_clients=50
#限制单个IP地址最多只能建立5个并发连接
max_per_ip=5

4.创建用户列表文件

echo -e "u01\nu02\nu03" | sudo tee /etc/vsftpd/user_list

5.重启vsftp服务

sudo systemctl restart vsftpd

6.配置nginx.conf

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 405;
}
server {
    listen       80;
    server_name  your-server-ip-or-domain;

    location /files/ {
        #client_max_body_size 500M;
        # 前10MB不限制,之后限制为2M/s
        limit_rate_after 10m;
        limit_rate 2048k;
        alias /app/vsftpd/$remote_user/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        charset utf-8;
        auth_basic "Restricted Access";
        auth_basic_user_file /app/nginx/conf/ftp.passwd;
    }
}

7.创建认证文件(为Web访问设置密码)

sudo yum install -y httpd-tools
htpasswd -c /app/nginx/conf/ftp.passwd u01
htpasswd -c /app/nginx/conf/ftp.passwd u02
htpasswd -c /app/nginx/conf/ftp.passwd u03
如果您不想安装 httpd-tools,也可以使用 OpenSSL 创建密码文件:
# 创建 u01 的密码(会提示输入密码)
printf "u01:$(openssl passwd -crypt)\n" | sudo tee /app/nginx/conf/ftp.passwd
# 添加 u02
printf "u02:$(openssl passwd -crypt)\n" | sudo tee -a /app/nginx/conf/ftp.passwd
# 添加 u03
printf "u03:$(openssl passwd -crypt)\n" | sudo tee -a /app/nginx/conf/ftp.passwd

8.检查并重启nginx

sudo nginx -t
sudo systemctl restart nginx

9.验证

http://xxx.xxx.xxx.xxx:{port}/files/

image

后续新增用户配置

比如新增用户u05
# 创建主目录结构
mkdir -p /app/vsftpd/u05
# 创建用户并设置主目录
sudo useradd -d /app/vsftpd/u05 -s /sbin/nologin u05
sudo passwd u05
# 设置目录权限
sudo chown u05:u05 /app/vsftpd/u05
sudo chmod 755 /app/vsftpd/u05
# 创建公共目录的符号链接到各用户目录
ln -s /app/vsftpd/public /app/vsftpd/u05/public
# 创建用户列表文件
echo "u05" >> /etc/vsftpd/user_list
# 重启vsftp服务
sudo systemctl restart vsftpd
# 设置用户在web页面上的访问密码(建议使用强算法)
htpasswd -B -C 12 /app/nginx/conf/ftp.passwd u05  # bcrypt, cost=12
posted @ 2025-07-03 16:34  海yo  阅读(44)  评论(0)    收藏  举报