ubuntu配置vsftpd

news/2025/10/18 21:18:15/文章来源:https://www.cnblogs.com/yushangyong/p/19148832

在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 ftpuser1sudo 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=$3if [ "$OPERATION" == "delete" ]; then# 只有ftpadmin用户可以删除文件if [ "$USER" != "ftpadmin" ]; thenecho "Permission denied: Only admin can delete files"exit 1fi
fiexit 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.shecho "开始部署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_listecho "FTP服务器部署完成!"

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

  • ✅ 局域网用户可连接

  • ✅ 所有用户可上传下载

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/939162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时序数据库 Apache IoTDB 等你“打卡”!2025 OSCAR 开源产业大会完整版议程揭晓

10月 28 日,期待与您在北京相见!开源作为一种开放共享的新型生产模式,已成为数字经济创新、开放、共享和可持续发展的核心驱动力。由中国通信标准化协会牵头主办,中国信息通信研究院具体承办的 2025 OSCAR 开源产业…

2024 CCPC Final F

F. Witnessing the Miracle / 见证奇迹 动态规划。 打表发现当一个被拿走的磁铁集合确定之后,未被拿走的磁铁的方向和距离可以由它左边被拿走的磁铁数量确定,因此,拿走磁铁的先后顺序不影响最终局面的状态,即从 \(…

Windows关闭端口占用

Microsoft Windows [版本 10.0.18363.535] (c) 2019 Microsoft Corporation。保留所有权利。 C:\Users\Administrator> netstat -ano | find "1099"TCP 0.0.0.0:1099 0.0.0.0:0 …

洛谷 P12865

给定长度为 \(n\) 的序列 \(a\) 和 \(q\) 次操作。每次操作为对 \(a\) 进行一次冒泡排序(\(a_i > a_{i + 1}\) 时交换)或者查询 \(a_l \sim a_r\) 之和。 对于一次冒泡排序,显然会把最大值挪到最后面。所以,当 …

ubuntu清理内存缓存

sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches

ubuntu常用技巧

获取qq的pid sudo netstat -anpt | grep qq | awk {print $7} | awk -F / {print $1} | head -n 1 获取无线网卡的ip地址 ifconfig wlp2s0 | grep inet | head -n 1 | awk {print $2} 获取首行 全局范围的IPv6地址…

单线程如何撑起百万连接?I/O多路复用:现代网络架构的基石

单线程如何撑起百万连接?I/O多路复用:现代网络架构的基石I/O多路复用(I/O Multiplexing)是一种允许单个线程同时监视多个文件描述符的I/O模型。其核心价值在于,它将应用程序从低效的I/O等待中解放出来,实现了“一…

10.17 CSP-S模拟33 改题记录

10.17HZOJ 写在前面 貌似没啥可写。。。大概就是二十多分钟写完T1然后写T2,一直想假一直写挂然后写了三个多小时,好在写出来了。T3看不上,T4正解需要的东西都写了然后喜提0pts,甚至不如输出0的37pts。《夜信》 今晚…

包装类(基本数据类型对应的引用数据类型)

包装类(基本数据类型对应的引用数据类型) Notice:基本数据类型存在栈里(基本类型基本没有属性和方法,所以基本类型的运算都靠Java提供的运算符) 引用数据类型存在堆里 所以栈里存的是堆里东西的地址NObject可统一…

luogu P7915 [CSP-S 2021] 回文

题目大意 给定一个长度为 \(2n\) 的序列 \(a\),要求每次取出其第一个数或者最后一个数,使得取出的数列 \(b\) 为一个回文数列。 注:回文数列即 \(\forall i\in \{ 1,n \}\) 都有 \(b_i=b_{2n-i+1}\) Sol 考虑第一步…

字典树 Trie 乱讲

Trie 是什么 实际上它就是一颗像字典的树,支持插入单词和查询单词个数等操作。 它的边权是某个字符。比如上图,插入单词 aca 时,我们就可以在 \(5\) 号节点下新建一个节点,边权为 a。而查询是否单词 abs 时,答案为…

系统稳定性监控

系统监控告警在研发日常运营中扮演着关键角色。没有监控,线上应用的运行就如同一个黑盒,无法预知潜在问题,往往只能依靠客服或用户反馈来发现。但此时,可能已经错过了最佳解决时机,甚至导致用户流失。一:系统监控…

USACO 绿-蓝 思维题小记

P6005 [USACO20JAN] Time is Mooney G dj 跑最长路是错的,可以以经过边数为阶段 \(O(nm)\) dp P6149 [USACO20FEB] Triangles S 枚举每个点,四个象限分讨,前缀和+二分做完 P6278 [USACO20OPEN] Haircut G 我的想法是…

Day16-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\classlei

Random()java.lang.Math.Random 调用这个Math.Random()能返回带正号的double值,该值[0.0,1.0),该返回值是一个伪随机选择的数,在该范围内近似均匀分布 public class random {public static void main(String[] args…

一个实用的短视频脚本创作指令分享

整理了一套结构化的AI指令,专门用来生成抖音短视频脚本。实测下来效果不错,这里分享给有需要的朋友。上周帮朋友优化了几个短视频脚本,发现很多人卡在"知道要拍什么,但不知道怎么拍"这个环节。于是整理了…

redis和mysql之间的数据一致性

解决双写一致性问题的主要策略 1、旁路缓存模式(Cache Aside Pattern) 在这个模式中,我们一般都是先更新数据库再删除旧缓存。 首先,为什么我们不选择先删除缓存再更新数据库,因为这样会导致在并发的情况下,假如A线…

ubuntu允许root登录桌面系统

1.设置root密码 sudo passwd root2.解锁root sudo passwd -u root 3.允许root登录 sudo nano /etc/gdm3/custom.conf# [Security] 下添加一下行AllowRoot=truesudo nano /etc/pam.d/gdm-password#注释或删掉以下行au…

申威(sw_64)架构下如何安装java-1.8.0-swjdk的rpm包?​

申威(sw_64)架构下如何安装java-1.8.0-swjdk的rpm包?​​ 专门为申威(sw_64)架构的电脑打造的Java 8运行环境。 ​1. 下载文件​ 安装包下载:https://pan.quark.cn/s/936281541bdf ,确保你已经下载了 java-1.8.…

AI协科学家:技术革命还是安全噩梦?

本期节目深入探讨AI协科学家如何推动科学突破,分析基于智能体架构中的安全黑洞问题,讨论人类是否准备好让AI处理所有日常任务,并揭示相关技术风险与挑战。在《两个漏洞之间》的这期特别节目中,我们紧接着上个月的内…

一个决定

一个决定在家毛了好几天了,一个原因是下雨,一个原因是家里有大显示器。 但是家里的效率奇差。 自己做饭,一日三餐得刷碗,然后吃饭得时候刷剧,吃完饭了,还很难抽离出来。 今天好了,炒白菜得时候加了两勺我妈今年…