25 私有链接
ACL 权限小抄(长期维护版)
一句总纲(先记住这句)
👉 “能不能删 / 改名,看父目录;能不能进 / 写,看当前目录;ACL 是系统级,FTP/SMB 都吃它。”
一、最常见权限语义速查
1️⃣ 只读目录(能看、能进,不能改)
setfacl -m u:linshi:rx DIR
适用:
- 部门根目录
- 不允许结构变化的层级
2️⃣ 完全可操作目录(上传 / 删除 / 改名 / 建目录)
setfacl -m u:linshi:rwx DIR
setfacl -m m:rwx DIR
3️⃣ 管理员(xxh)全权
setfacl -m u:xxh:rwx DIR
setfacl -m m:rwx DIR
4️⃣ 只允许在目录里“操作内容”,但不能删目录本身
核心思想:
- 父目录:
rx - 子目录:
rwx
# 父目录
setfacl -m u:linshi:rx PARENT
# 子目录
setfacl -m u:linshi:rwx CHILD
setfacl -m m:rwx CHILD
二、默认 ACL(新文件/目录自动继承)
5️⃣ 以后新文件也要有同样权限(非常重要)
setfacl -d -m u:linshi:rwx DIR
setfacl -d -m u:xxh:rwx DIR
setfacl -d -m m:rwx DIR
记忆点:
-d = 将来
三、递归修复已有文件(常用)
6️⃣ 让“已经存在的文件/目录”立刻生效
setfacl -R -m u:linshi:rwx DIR
setfacl -R -m u:xxh:rwx DIR
四、for 循环批量改目录(你最爱用的)
7️⃣ 一组目录统一赋权(强烈推荐)
for d in 010_* 020_* 030_*; do
setfacl -m u:linshi:rwx "$d"
setfacl -m u:xxh:rwx "$d"
setfacl -m m:rwx "$d"
setfacl -d -m u:linshi:rwx "$d"
setfacl -d -m u:xxh:rwx "$d"
setfacl -d -m m:rwx "$d"
done
8️⃣ 针对“目录下一层”批量操作(你用过的)
for d in /ftp-data/worker-data/090_首审部/*; do
setfacl -m u:linshi:rwx "$d"
setfacl -m m:rwx "$d"
setfacl -d -m u:linshi:rwx "$d"
setfacl -d -m m:rwx "$d"
done
五、查看 & 排错必备命令
9️⃣ 看 ACL(一定要会)
getfacl DIR
🔟 判断“最终权限”(不看规则,看结果)
sudo -u linshi test -w DIR && echo 可写 || echo 不可写
sudo -u linshi test -x DIR && echo 可进 || echo 进不去
11️⃣ ACL 的“总闸门”(mask)
ACL 明明写了 rwx 但还是不行 → 99% 是 mask
setfacl -m m:rwx DIR
六、你这套环境的“固定规则模板”
📁 /ftp-data/worker-data 顶层
setfacl -m u:linshi:rx /ftp-data/worker-data
setfacl -m u:xxh:rwx /ftp-data/worker-data
setfacl -m m:rwx /ftp-data/worker-data
📁 普通部门目录(010~080、110 等)
setfacl -m u:linshi:rwx DIR
setfacl -m u:xxh:rwx DIR
setfacl -m m:rwx DIR
setfacl -d -m u:linshi:rwx DIR
setfacl -d -m u:xxh:rwx DIR
setfacl -d -m m:rwx DIR
📁 结构锁定目录(090、100)
# 本层
setfacl -m u:linshi:rx DIR
# 子层
for d in DIR/*; do
setfacl -m u:linshi:rwx "$d"
setfacl -m m:rwx "$d"
done
七、永远记住的三条“铁律”
1️⃣ 删文件 ≠ 文件权限,看的是父目录
2️⃣ FTP / SMB / shell 全都吃 ACL(系统级)
3️⃣ 能写但删不了,先查:mask / 父目录 / 客户端安全删除
八、你可以直接存成文件
建议你存一份:
vi /root/ACL_运维小抄.txt
把这整份贴进去,未来维护直接照抄。
net use * /deleteCentOS 7 安装 vsftpd(虚拟用户 + FTPS)
⚠️ 请先用
root或sudo -i
==============================
一、系统基础设置
==============================
# 1. 安装中文语言包(支持中文编码)
yum install -y kde-l10n-Chinese glibc-common
# 查看可用语言
localectl list-locales | grep zh
# 设置系统默认中文 UTF-8
localectl set-locale LANG=zh_CN.UTF-8
# 重新登录后生效,验证
locale
# 2. 设置时区
timedatectl list-timezones | grep Shanghai
timedatectl set-timezone Asia/Shanghai
date
# 3. 时间同步(chrony)
yum install -y chrony
systemctl enable chronyd
systemctl start chronyd
timedatectl status
==============================
二、永久关闭 SELinux(CentOS 必做)
==============================
# 临时关闭(立即生效)
setenforce 0
# 永久关闭
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 查看确认(需要重启后完全生效)
getenforce
==============================
三、安装 vsftpd 及依赖
==============================
yum install -y vsftpd db4-utils openssl firewalld
systemctl enable firewalld
systemctl start firewalld
==============================
四、创建 FTP 虚拟用户宿主账户
==============================
useradd -r -d /srv/ftp -s /sbin/nologin ftpvirt
mkdir -p /srv/ftp
chown -R ftpvirt:ftpvirt /srv/ftp
==============================
五、vsftpd 目录结构
==============================
mkdir -p /etc/vsftpd
mkdir -p /etc/vsftpd/vuser_conf
==============================
六、创建虚拟用户
==============================
# 用户名 / 密码(两行一组)
cat > /etc/vsftpd/virt_users.txt <<EOF
scientistzjf
YOUR_PASSWORD
EOF
# 转换为 db 文件
db_load -T -t hash \
-f /etc/vsftpd/virt_users.txt \
/etc/vsftpd/virt_users.db
chmod 600 /etc/vsftpd/virt_users.*
==============================
七、PAM 虚拟用户认证
==============================
cat > /etc/pam.d/vsftpd_virtual <<EOF
auth required pam_userdb.so db=/etc/vsftpd/virt_users
account required pam_userdb.so db=/etc/vsftpd/virt_users
EOF
==============================
八、创建虚拟用户目录
==============================
mkdir -p /srv/ftp/scientistzjf
chown -R ftpvirt:ftpvirt /srv/ftp/scientistzjf
==============================
九、vsftpd 主配置文件
==============================
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
cat > /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=YES
pam_service_name=vsftpd_virtual
guest_enable=YES
guest_username=ftpvirt
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vuser_conf
chroot_local_user=YES
allow_writeable_chroot=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.allowed_users
listen=YES
listen_ipv6=NO
pasv_enable=YES
pasv_address=YOUR_IP_ADDR
pasv_min_port=30000
pasv_max_port=30100
pasv_promiscuous=YES
utf8_filesystem=YES
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES
EOF
==============================
十、虚拟用户独立配置
==============================
cat > /etc/vsftpd/vuser_conf/scientistzjf <<EOF
local_root=/srv/ftp/scientistzjf
write_enable=YES
EOF
==============================
十一、用户白名单
==============================
echo "scientistzjf" > /etc/vsftpd.allowed_users
chmod 600 /etc/vsftpd.allowed_users
==============================
十二、防火墙放行
==============================
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=30000-30100/tcp
firewall-cmd --reload
==============================
十三、生成 FTPS(ECC)证书
==============================
openssl ecparam -name secp384r1 -genkey -noout \
-out /etc/vsftpd/vsftpd.key
openssl req -new -x509 \
-key /etc/vsftpd/vsftpd.key \
-out /etc/vsftpd/vsftpd.crt \
-days 36500
==============================
十四、启用 FTPS
==============================
cat >> /etc/vsftpd/vsftpd.conf <<EOF
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/vsftpd.key
ssl_ciphers=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA256:!aNULL:!MD5
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
debug_ssl=YES
EOF
==============================
十五、启动 vsftpd
==============================
systemctl enable vsftpd
systemctl restart vsftpd
systemctl status vsftpd --no-pager
# 验证监听 21 端口
ss -lntp | grep :21
# 手动启动排错
/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
==============================
🧠 机房实战小提醒
- IP 变了记得改
pasv_address - FTPS 客户端要选:
- 协议:
FTP over TLS (Explicit) - 加密:
Require explicit FTP over TLS
- 协议:
- 530 错误 → 90% 是 PAM / 白名单 / SELinux
- 425 错误 → 防火墙 / PASV 端口
Debain旧版本下载地址
假设共享目录是/srv/data/
samba配置文件在/etc/samba/smb.conf
建 Linux 用户(如果还没建)
useradd -m -s /bin/bash scientistzjf
passwd scientistzjf
加 Samba 密码(Windows 连接用这个)
smbpasswd -a scientistzjf
smbpasswd -e scientistzjf
配置文件:
[global]
workgroup = WORKGROUP
server string = ZJF Samba
security = user
# 用户不存在时映射为匿名
map to guest = Bad User
guest account = nobody
# 日志
log file = /var/log/samba/log.%m
max log size = 1000
# Windows 兼容性
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
########################################
# 管理员总入口(不影响排序,可选)
########################################
[srv-data]
comment = Full access for scientistzjf
path = /srv/data
browseable = yes
guest ok = no
valid users = scientistzjf
read only = no
force user = scientistzjf
force group = scientistzjf
create mask = 0777
directory mask = 0777
########################################
# 以下共享名 = 目录名(Windows 排序友好)
########################################
[000-Video]
path = /srv/data/000-Video
browseable = yes
guest ok = yes
read only = yes
[001-Music]
path = /srv/data/001-Music
browseable = yes
guest ok = yes
read only = yes
[002-Documents]
path = /srv/data/002-Documents
browseable = yes
guest ok = yes
read only = yes
write list = scientistzjf, nobody
[003-E_Books]
path = /srv/data/003-E_Books
browseable = yes
guest ok = yes
read only = yes
[004-Android_APPs]
path = /srv/data/004-Android_APPs
browseable = yes
guest ok = yes
read only = yes
[005-Tools]
path = /srv/data/005-Tools
browseable = yes
guest ok = yes
read only = yes
[006-Downloads]
path = /srv/data/006-Downloads
browseable = yes
guest ok = yes
read only = yes
write list = scientistzjf, nobody
检查与重启 Samba
testparm
systemctl restart smbd
systemctl restart nmbd # 有些系统需要
测试smb连接
smbclient -L localhost -N
前沿的精简系统下载 | ylx系统下载 | 溯汐潮系统下载 | 动感超人系统下载 | Palesys浅色系统下载 | Windows各种精简版下载 | Windows server精简版下载
不忘初心博客 不忘初心系统博客 不忘初心精简版 不忘初心系统官网 不忘初心精简版系统 win windows
window精简系统 : 分享精简作品 可测试、交流 、下载: 极限精简,适度精简,轻量优化,极限优化,速度稳定为先,快速安装,用户自定义安装,精简包、系统清理软件分享
PVE安装OpenWRT的方法
安装PVE虚拟机
下载PVE镜像
https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso
下载镜像烧录软件
https://etcher.balena.io/#download-etcher
准备一个U盘,并把PVE镜像烧录到U盘
安装PVE虚拟机
※ 把U盘插入计算机(插在后面,别插在HUB)
※ 硬盘磁盘格式化成xfs类型的文件系统
※ 按提示完成安装
进入PVE管理界面
https://YOUR_IP:8006/
安装OpenWRT
下载OpenWRT镜像
https://github.com/firker/openwrt-Exclusive/releases
上传OpenWRT镜像到PVE的ISO镜像
记下上传时镜像的target路径,比如:
/var/lib/vz/template/iso/openwrt-buddha-v2_2024_-x86-64-generic-squashfs-uefi.img
创建一个虚拟网卡
在PVE管理界面的 “节点”→“系统”→“网络”中,点击“创建”按钮,创建一个“Linux Bridge”,并给它一个名字,比如“vmbr1”。
创建一个虚拟机,不需要CD-ROM,其他默认。(假设ID为9000)
导入OpenWRT的镜像成为硬盘,并删除原来的硬盘。
qm importdisk 9000 /var/lib/vz/template/iso/openwrt-buddha-v2_2024_-x86-64-generic-squashfs-uefi.img local-lvm
开机,并配置网络
检查vi /etc/config/network,看看lan和wan是否正确分配给了vmbr1和vmbr0,否则改过来。
重启网络,这时你应该可以看到WAN口IP
/etc/init.d/network restart
ip a
udhcpc -i eth0
ip a show eth0
ip r
关闭OpenWRT系统防火墙
/etc/init.d/firewall stop
/etc/init.d/firewall disable
/etc/init.d/firewall status
关闭后你访问管理页面,没有密码
OpenWrt LuCI 默认是:
http://172.16.101.160/
配置好OpenWrt网络转发,比如
“系统”→“管理权”→“SSH 访问”,指定“接口”的内外网访问。
“网络”→“防火墙”→“端口转发”,映射“OpenWRT管理页面”和“OpenWRT的SSH”。
最后记得 “保存并应用”。恢复防火墙,否则转发规则不会生效。
/etc/init.d/firewall enable
/etc/init.d/firewall start
指定给 某个IP/任何人 访问管理页面
- 放行 WAN 口的 HTTP 80(仅某个IP)
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-LuCI-HTTP-from-myPC'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].proto='tcp'
uci set firewall.@rule[-1].dest_port='80'
uci set firewall.@rule[-1].src_ip='YOUR_IP'
uci set firewall.@rule[-1].target='ACCEPT'
-
放行 WAN 口的 HTTPS 443(仅某个IP)
uci add firewall rule uci set firewall.@rule[-1].name='Allow-LuCI-HTTPS-from-myPC' uci set firewall.@rule[-1].src='wan' uci set firewall.@rule[-1].proto='tcp' uci set firewall.@rule[-1].dest_port='443' uci set firewall.@rule[-1].src_ip='YOUR_IP' uci set firewall.@rule[-1].target='ACCEPT' -
放行 WAN 口的 SSH 22(仅某个IP)
uci add firewall rule uci set firewall.@rule[-1].name='Allow-LuCI-HTTPS-from-myPC' uci set firewall.@rule[-1].src='wan' uci set firewall.@rule[-1].proto='tcp' uci set firewall.@rule[-1].dest_port='22' uci set firewall.@rule[-1].src_ip='YOUR_IP' uci set firewall.@rule[-1].target='ACCEPT' -
放行 WAN 口指定IP(所有人)
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-LuCI-HTTP-WAN'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].proto='tcp'
uci set firewall.@rule[-1].dest_port='80'
uci set firewall.@rule[-1].target='ACCEPT'
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-LuCI-HTTPS-WAN'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].proto='tcp'
uci set firewall.@rule[-1].dest_port='443'
uci set firewall.@rule[-1].target='ACCEPT'
添加完成后,重启防火墙:
uci commit firewall
/etc/init.d/firewall restart
检查是否已生效(可选)
uci show firewall | grep LuCI
规则怎么删除?
在 OpenWrt shell 执行:
uci show firewall | grep Allow-LuCI
你会看到类似输出(举例):
firewall.@rule[7].name='Allow-LuCI-HTTP-from-ZJF'
firewall.@rule[8].name='Allow-LuCI-HTTPS-from-ZJF'
这里的 [7]、[8] 就是规则编号。
按编号删除规则:
uci delete firewall.@rule[7]
uci delete firewall.@rule[8]
保存并应用
uci commit firewall
/etc/init.d/firewall restart
规则都在这里:
vi /etc/config/firewall
扩大OpenWRT的镜像的磁盘大小(不会破坏已有内容)(可选)
qemu-img info /var/lib/vz/template/iso/openwrt-buddha-v2_2024_-x86-64-generic-squashfs-uefi.img
qemu-img resize /var/lib/vz/template/iso/openwrt-buddha-v2_2024_-x86-64-generic-squashfs-uefi.img 2G
最后想“容量真的能用上”,通常还需要在 OpenWrt 里做:
检查当前分区布局
进入 OpenWrt 的 shell,使用 fdisk 或 lsblk 来查看当前分区表。
fdisk -l
lsblk -f
blkid
/dev/sda2 是 squashfs,这是根文件系统,它是只读的。
/dev/loop0 是 f2fs,这是一个可写文件系统,通常作为 overlay 文件系统使用,挂载在 /tmp/extroot/overlay 和 /overlay 上。
扩展 f2fs 文件系统
安装 f2fs-tools(如果没有安装的话)
opkg update
opkg install f2fs-tools
然后,使用 resize.f2fs 来扩展文件系统:
resize.f2fs /dev/loop0
扩展后,使用 df -h 或 lsblk -f 命令确认新的空间已经被成功识别并且分配给了 /overlay
前言一直对软路由这个东西念念不忘,想要入手折腾一下。最近因为家里需要一台服务器,我就把我的 n1 拿回了家里,转手就入了一个 j3455 的成品软路由,这边文章记录下在 pve 环境下折腾 openwrt 的心得,顺便学习下 pve(说不定能当个 IDC 呢
VSFTP配置(虚拟用户版)
非加密FTP
修改系统默认语言为中文
sudo dpkg-reconfigure locales
在弹出的配置界面中,选择 zh_CN.UTF-8 和 en_US.UTF-8,然后将 zh_CN.UTF-8 设置为默认语言。
同步时间
timedatectl list-timezones | grep Shanghai
sudo timedatectl set-timezone Asia/Shanghai
date
sudo apt install openntpd
sudo systemctl status openntpd
timedatectl status
安装依赖工具
sudo apt install -y vsftpd db-util
创建vsftpd专用目录
mkdir -p /etc/vsftpd/
创建ftp用户
sudo useradd -r -d /srv/ftp -s /usr/sbin/nologin ftpvirt
sudo mkdir -p /srv/ftp
sudo chown -R ftpvirt:ftpvirt /srv/ftp
sudo mkdir -p /etc/vsftpd/vuser_conf
sudo mkdir -p /srv/ftp/scientistzjf
sudo chown -R ftpvirt:ftpvirt /srv/ftp/scientistzjf
创建虚拟用户的用户名和密码,并转换成db数据
# virt_users.txt每两行一组
sudo tee /etc/vsftpd/virt_users.txt > /dev/null <<'EOF'
YOUR_USERNAME
YOUR_PASSWORD
EOF
sudo db_load -T -t hash -f /etc/vsftpd/virt_users.txt /etc/vsftpd/virt_users.db
sudo chmod 600 /etc/vsftpd/virt_users.*
将用户数据导入PAM中
sudo tee /etc/pam.d/vsftpd_virtual > /dev/null <<'EOF'
auth required pam_userdb.so db=/etc/vsftpd/virt_users
account required pam_userdb.so db=/etc/vsftpd/virt_users
EOF
创建日志文件
touch /var/log/vsftpd.log
chmod 600 /var/log/vsftpd.log
编辑/etc/vsftpd.conf配置文件
# 禁止匿名
anonymous_enable=NO
# 允许非匿名登录(虚拟用户也算“非匿名”,必须开)
local_enable=YES
# 允许写
write_enable=YES
# PAM 指向我们刚建的虚拟用户认证
pam_service_name=vsftpd_virtual
# 启用 guest 映射:所有虚拟用户映射为 ftpvirt
guest_enable=YES
guest_username=ftpvirt
# 让虚拟用户拥有本地用户权限(否则像匿名一样限制多)
virtual_use_local_privs=YES
# 每个虚拟用户独立配置(非常好用)
user_config_dir=/etc/vsftpd/vuser_conf
# 建议启用(按需)
chroot_local_user=YES
allow_writeable_chroot=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.allowed_users
# 独立监听模式
listen_ipv6=NO
listen=YES
# Bad IP connecting解决方法
pasv_address=YOUR_IP_ADDR
pasv_promiscuous=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30100
# 启用 utf8 支持
utf8_filesystem=YES
background=YES
给vsftpd独立用户创建配置
sudo tee /etc/vsftpd/vuser_conf/scientistzjf > /dev/null <<'EOF'
local_root=/srv/ftp/scientistzjf
write_enable=YES
EOF
#此处local_root=/srv/ftp/scientistzjf是该用户的根目录,一定要给与ftp用户目录权限(ftpvirt:ftpvirt)
给vsftpd配置白名单(防止服务器本地用户登录)
echo "scientistzjf" | sudo tee /etc/vsftpd.allowed_users
sudo chmod 600 /etc/vsftpd.allowed_users
注意,vsftpd.conf中应该要有以下配置:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.allowed_users
重启VSFTPD服务
sudo systemctl restart vsftpd
sudo systemctl status vsftpd --no-pager
sudo systemctl enable vsftpd
验证是否真的在监听 21 端口
sudo ss -lntp | grep ':21'
远程测试命令
telnet YOUR_IP_ADDR 21
使用加密FTPS
检查 OpenSSL 是否支持椭圆曲线加密(ECC)
openssl ecparam -list_curves
如果显示了椭圆曲线(如 prime256v1, secp384r1 等),说明你的 OpenSSL 已启用椭圆曲线支持。
生成椭圆曲线密钥(ECDSA)
openssl ecparam -name secp384r1 -genkey -noout -out /etc/vsftpd/vsftpd.key
openssl req -new -x509 -key /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.crt -days 36500
生成普通RSA加密(可选)
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.crt -days 36500 -nodes
编辑/etc/vsftpd.conf配置文件,添加SSL信息
// ...之前的配置
# 启用 SSL 支持
ssl_enable=YES
# 仅使用 SSL 加密传输(两个都是YES则只用FTPS,两个都是NO则FTP和FTPS都可用)
force_local_data_ssl=YES
force_local_logins_ssl=YES
# 证书文件路径
rsa_cert_file=/etc/vsftpd/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/vsftpd.key
# 允许客户端使用 SSL 协议
ssl_ciphers=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA256:!aNULL:!MD5
ssl_tlsv1=YES
ssl_sslv3=NO
ssl_sslv2=NO
# 启用日志记录,用于排查问题
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
# 启用 FTP 协议级日志记录(帮助排查 SSL 握手问题)
log_ftp_protocol=YES
# 平时 debug_ssl=NO,出问题再临时开
debug_ssl=YES
重启VSFTPD服务
sudo systemctl restart vsftpd
sudo systemctl status vsftpd --no-pager
sudo systemctl enable vsftpd
手动启动 vsftpd,查看错误日志
sudo /usr/sbin/vsftpd /etc/vsftpd.conf
vsftpd.conf 选项速查手册(中文整理版)
1. 文件与语法
- 默认配置文件路径通常为:
/etc/vsftpd.conf
(有些发行版会放在/etc/vsftpd/vsftpd.conf,以你的系统为准) - vsftpd 启动时也可以通过命令行参数指定配置文件路径。
- 基本语法:
注释行以 # 开头
配置行格式:option=value
option 与 = 与 value 之间不能有空格(有空格可能会被当成错误)
2. 布尔选项(YES/NO)
2.1 匿名/访客与权限
anonymous_enable
- 作用:是否允许匿名登录(用户名
anonymous或ftp) - 默认:
YES - 常用:
公共下载站:YES
只允许账号登录:NO
no_anon_password
- 作用:匿名登录时不要求输入密码(直接登录)
- 默认:
NO
anon_world_readable_only
- 作用:匿名用户只能下载“全局可读”(world-readable) 文件
- 默认:
YES
anon_upload_enable
- 作用:允许匿名用户上传文件
- 依赖:
write_enable=YES且匿名用户对目标目录有写权限 - 默认:
NO - 备注:虚拟用户默认也按“匿名权限模型”处理时,上传也常需要这个开关。
anon_mkdir_write_enable
- 作用:允许匿名用户创建目录
- 依赖:
write_enable=YES - 默认:
NO
anon_other_write_enable
- 作用:允许匿名用户执行“除上传/建目录以外”的写操作(删除、重命名等)
- 默认:
NO - 安全建议:一般不推荐打开
2.2 本地用户、虚拟用户与 chroot
local_enable
- 作用:是否允许本地系统用户登录(
/etc/passwd或 PAM) - 默认:
NO - 重要:任何非匿名登录(包括虚拟用户)要能用,通常都需要
local_enable=YES。
write_enable
- 作用:是否允许执行会修改文件系统的 FTP 命令
包括:STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, SITE - 默认:
NO
chroot_local_user
- 作用:将本地用户登录后“限制在其家目录(chroot 牢笼)内”
- 默认:
NO - 提醒:启用后能提升隔离性,但要注意:
用户若可写入 chroot 根目录,可能触发安全限制或需要额外配置(如 allow_writeable_chroot 在某些版本/发行版存在)
不同发行版补丁策略不同
chroot_list_enable
- 作用:启用 chroot 用户名单机制(配合
chroot_list_file) - 默认:
NO - 语义:
若 chroot_local_user=NO:名单中的用户会被 chroot
若 chroot_local_user=YES:名单中的用户 不会被 chroot(例外名单)
passwd_chroot_enable
- 作用:允许在
/etc/passwd的 home 字段里用/.指定 chroot 位置
示例:/data/ftp/.形式表示 chroot 到某位置 - 默认:
NO - 备注:属于高级玩法,谨慎使用
guest_enable
- 作用:把所有“非匿名登录”都当作访客(guest)登录,并映射到
guest_username - 默认:
NO - 典型用途:虚拟用户(PAM + guest 映射)
virtual_use_local_privs
- 作用:让虚拟用户使用“本地用户权限模型”而非“匿名权限模型”
- 默认:
NO - 说明:虚拟用户默认权限更像匿名(更受限);要让虚拟用户像本地用户一样可写,通常要开这个。
2.3 SSL/TLS 相关
仅在 ssl_enable=YES 时相关的选项,才会生效。
ssl_enable
- 作用:启用 FTPS(基于 OpenSSL)
- 默认:
NO
allow_anon_ssl
- 作用:允许匿名用户使用 SSL/TLS
- 默认:
NO
force_anon_logins_ssl / force_anon_data_ssl
- 作用:强制匿名用户在登录/数据连接上使用 SSL/TLS
- 默认:
NO
force_local_logins_ssl / force_local_data_ssl
- 作用:强制本地用户在登录/数据连接上使用 SSL/TLS
- 默认:通常为
YES(不少发行版如此) - 备注:若你只跑明文 FTP,需要显式关掉它们。
ssl_sslv2 / ssl_sslv3 / ssl_tlsv1
- 作用:允许哪些协议版本
- 默认:
sslv2=NOsslv3=NOtlsv1=YES - 建议:现代环境应禁用 SSLv2/SSLv3。
require_ssl_reuse
- 作用:要求 SSL 数据连接复用控制连接的 SSL 会话(更安全)
- 默认:
YES - 兼容性:有些客户端会被它“搞坏”,遇到连接/传输异常可尝试设为
NO
require_cert
- 作用:强制客户端提供证书(双向认证)
- 默认:
NO
ssl_request_cert
- 作用:请求客户端证书(但不强制,除非
require_cert=YES) - 默认:
YES
validate_cert
- 作用:要求客户端证书验证通过(自签通常不算通过)
- 默认:
NO
debug_ssl
- 作用:把 OpenSSL 连接诊断写进日志(排错用)
- 默认:
NO
strict_ssl_read_eof / strict_ssl_write_shutdown
- 作用:更严格地判断 SSL 传输结束方式(更安全/更严格)
- 默认:
NO - 兼容性:很多客户端不支持,通常保持默认
implicit_ssl
- 作用:启用“隐式 FTPS”(一上来就握手 SSL)
- 默认:
NO - 提醒:现代多用“显式 FTPS”(AUTH TLS),隐式通常需要独立监听端口。
2.4 连接模式与安全检查
pasv_enable
- 作用:允许被动模式(PASV)
- 默认:
YES
port_enable
- 作用:允许主动模式(PORT)
- 默认:
YES
pasv_promiscuous
- 作用:禁用 PASV 的“数据连接 IP 必须与控制连接 IP 相同”的检查
- 默认:
NO - 风险:安全性降低,一般不要开(除非你明确知道用途,比如某些隧道/特殊网络)
port_promiscuous
- 作用:禁用 PORT 的“数据连接只能连回客户端”的检查
- 默认:
NO - 风险:同上,不推荐
connect_from_port_20
- 作用:主动(PORT)模式的数据连接是否强制从服务器端口 20 发起
- 默认:
NO(示例配置里常会设成YES) - 备注:开启会需要更多特权,可能影响安全/部署灵活性
2.5 日志与调试
xferlog_enable
- 作用:记录上传/下载传输日志
- 默认:
NO
xferlog_std_format
- 作用:使用传统 wu-ftpd 风格的 xferlog 格式
- 默认:
NO
dual_log_enable
- 作用:同时写两份日志:
/var/log/xferlog+/var/log/vsftpd.log - 默认:
NO
log_ftp_protocol
- 作用:记录所有 FTP 命令/响应(协议级调试)
- 默认:
NO
syslog_enable
- 作用:把 vsftpd 日志写入系统日志(syslog),而不是文件
- 默认:
NO
2.6 运行方式/隔离
listen
- 作用:独立运行模式(不通过 inetd)
- 默认:
NO
listen_ipv6
- 作用:监听 IPv6(与
listen互斥) - 默认:
NO
background
- 作用:独立模式启动时是否后台运行
- 默认:
YES
run_as_launching_user
- 作用:以启动 vsftpd 的用户身份运行(非 root)
- 默认:
NO - 严重提醒:会导致很多特权功能不可用(chroot/低端口等),风险和限制很大,除非你非常清楚。
isolate_network
- 作用:用 Linux namespace(CLONE_NEWNET)隔离不受信任进程网络
- 默认:
YES
isolate
- 作用:用 PID/IPC namespace(CLONE_NEWPID/NEWIPC)隔离进程
- 默认:
YES
2.7 其他常见布尔项
dirlist_enable
- 作用:是否允许列目录(LIST/NLST 等)
- 默认:
YES
download_enable
- 作用:是否允许下载(RETR 等)
- 默认:
YES
dirmessage_enable
- 作用:进入目录时显示消息文件(如
.message) - 默认:
NO(示例文件常开)
message_file
- 关联字符串选项,默认
.message
force_dot_files
- 作用:即使客户端不加
-a,也显示以.开头的文件/目录(不包括./..) - 默认:
NO
ls_recurse_enable
- 作用:允许
ls -R递归列目录 - 默认:
NO - 风险:可能造成性能/资源问题
async_abor_enable
- 作用:启用异步 ABOR(某些客户端取消传输会用)
- 默认:
NO
chmod_enable
- 作用:允许本地用户使用
SITE CHMOD - 默认:
YES
hide_ids
- 作用:目录列表中把用户/组显示为
ftp - 默认:
NO
text_userdb_names
- 作用:列表中显示用户名而不是数字 UID/GID
- 默认:
NO
reverse_lookup_enable
- 作用:PAM 认证前做反向 DNS(IP->主机名)
- 默认:
YES - 若 DNS 慢导致登录慢,可设
NO
tcp_wrappers
- 作用:启用 TCP Wrappers(hosts.allow/deny + 按IP加载配置)
- 默认:
NO
session_support
- 作用:维护会话(utmp/wtmp + pam_session)
- 默认:
NO
setproctitle_enable
- 作用:在进程列表里显示会话状态(idle/download…)
- 默认:
NO
no_log_lock
- 作用:写日志时不加文件锁(解决极少数文件系统挂起)
- 默认:
NO
lock_upload_files
- 作用:上传加写锁、下载加共享读锁
- 默认:
YES
mdtm_write
- 作用:允许
MDTM修改文件时间(受权限检查) - 默认:
YES
delete_failed_uploads
- 作用:上传失败时删除不完整文件
- 默认:
NO
deny_email_enable
- 作用:匿名密码(常被用作 email)黑名单机制
- 默认:
NO
secure_email_list_enable
- 作用:只允许匿名登录使用“白名单密码”(每行一个)
- 默认:
NO
check_shell
- 作用:检查
/etc/shells里是否是合法 shell(仅非 PAM 版本相关) - 默认:
YES
use_localtime
- 作用:目录列表显示本地时区时间(默认 GMT)
- 默认:
NO
use_sendfile
- 作用:内部性能相关(sendfile)
- 默认:
YES
tilde_user_enable
- 作用:解析
~user/path这种路径 - 默认:
NO
3. 数字选项(非负整数,部分可用八进制)
注意:涉及 umask 的选项常用八进制,记得加前导 0,如 077。
3.1 超时与限制
accept_timeout
- 作用:PASV 数据连接等待客户端连接的超时(秒)
- 默认:
60
connect_timeout
- 作用:PORT 数据连接等待客户端响应的超时(秒)
- 默认:
60
data_connection_timeout
- 作用:数据传输无进展的超时(秒)
- 默认:
300
idle_session_timeout
- 作用:控制连接空闲超时(秒)
- 默认:
300
max_login_fails
- 作用:连续登录失败次数达到后断开
- 默认:
3
max_clients
- 作用:独立模式下最大并发客户端数(0=不限制)
- 默认:
2000
max_per_ip
- 作用:同一 IP 最大并发连接数(0=不限制)
- 默认:
50
3.2 速率限制
anon_max_rate
- 作用:匿名用户最大传输速率(字节/秒,0=不限)
- 默认:
0
local_max_rate
- 作用:本地用户最大传输速率(字节/秒,0=不限)
- 默认:
0
3.3 被动端口与其他
listen_port
- 作用:独立模式监听端口
- 默认:
21
pasv_min_port / pasv_max_port
- 作用:PASV 数据连接端口范围(便于防火墙放行)
- 默认:
0(表示任意端口)
ftp_data_port
- 作用:PORT 模式数据连接默认端口(通常 20)
- 默认:
20
file_open_mode
- 作用:上传文件创建时的基础权限(再叠加 umask)
- 默认:
0666
local_umask / anon_umask
- 作用:本地/匿名用户创建文件的 umask
- 默认:
077
delay_failed_login
- 作用:登录失败前延迟(秒)
- 默认:
1
delay_successful_login
- 作用:成功登录前延迟(秒)
- 默认:
0
trans_chunk_size
- 作用:内部传输块大小(可影响限速平滑性)
- 默认:
0(自动选择)
chown_upload_mode
- 作用:匿名上传且 chown 后强制的文件模式
- 默认:
0600
4. 字符串选项
4.1 目录与根目录
anon_root
- 作用:匿名登录后的根目录(chdir 到这里)
- 默认:空
local_root
- 作用:本地用户登录后的根目录(chdir 到这里)
- 默认:空
- 常用:配合
chroot_local_user=YES做用户目录限制
secure_chroot_dir
- 作用:vsftpd 需要无权限运行时使用的“安全空目录”
- 默认:
/usr/share/empty - 要求:该目录必须存在,且普通 ftp 用户不可写
4.2 用户列表 / 每用户配置
userlist_file
- 作用:userlist 名单文件路径
- 默认:
/etc/vsftpd/user_list
userlist_enable
- 作用:启用 userlist 机制(会读取
userlist_file) - 默认:
NO
userlist_deny
- 作用:配合
userlist_enable使用:
YES:名单里的人 拒绝登录(黑名单)
NO:名单里的人 允许登录(白名单)
- 默认:
YES
userlist_log
- 作用:记录 userlist 拒绝登录事件
- 默认:
NO
user_config_dir
- 作用:按用户覆盖配置(登录用户为
chris时加载.../chris) - 默认:空
- 注意:并非所有选项都能“按用户生效”,有些必须在会话开始前确定。
user_sub_token
- 作用:模板变量替换,常用于虚拟用户目录生成
例如local_root=/home/virtual/$USER - 默认:空
4.3 Banner / 消息 / 隐藏与拒绝
ftpd_banner
- 作用:连接时显示的欢迎横幅字符串
- 默认:空(显示默认横幅)
banner_file
- 作用:从文件读取横幅内容(覆盖
ftpd_banner) - 默认:空
message_file
- 作用:目录消息文件名(配合
dirmessage_enable) - 默认:
.message
hide_file
- 作用:目录列表中隐藏匹配的文件名模式(但知道名字仍可访问)
- 默认:空
deny_file
- 作用:拒绝访问匹配的文件/目录(不隐藏,直接拒绝操作)
- 默认:空
- 说明:这是“轻量策略”,严肃访问控制应优先依赖文件系统权限。
4.4 PAM 与用户映射
pam_service_name
- 作用:vsftpd 使用的 PAM 服务名
- 默认:
ftp
guest_username
- 作用:访客(guest)登录映射到的真实系统用户
- 默认:
ftp
ftp_username
- 作用:匿名 FTP 使用的本地用户(其 home 通常是匿名根目录)
- 默认:
ftp
4.5 监听地址
listen_address
- 作用:独立模式下绑定监听的 IPv4 地址(不填则所有接口)
- 默认:空
listen_address6
- 作用:独立模式下绑定监听的 IPv6 地址
- 默认:空
4.6 PASV 公网地址
pasv_address
- 作用:PASV 模式向客户端“宣告”的 IP 地址(NAT/公网时常用)
- 默认:空(默认取控制连接的本地地址)
pasv_addr_resolve
- 作用:若
pasv_address填的是主机名,是否在启动时解析 - 默认:
NO
4.7 SSL 证书与加密套件
rsa_cert_file
- 作用:RSA 证书文件路径
- 默认:
/usr/share/ssl/certs/vsftpd.pem(发行版可能不同)
rsa_private_key_file
- 作用:RSA 私钥文件路径(不填通常与 cert 同文件)
- 默认:空
dsa_cert_file / dsa_private_key_file
- 作用:DSA 证书/私钥路径(现在较少用)
- 默认:空
ca_certs_file
- 作用:CA 证书链文件(用于验证客户端证书)
- 默认:空
ssl_ciphers
- 作用:允许的 SSL/TLS 加密套件
- 默认:
DES-CBC3-SHA(历史默认;现代建议配置更强套件)
4.8 日志文件路径
vsftpd_log_file
- 作用:vsftpd 风格日志文件路径
- 默认:
/var/log/vsftpd.log
xferlog_file
- 作用:wu-ftpd 风格传输日志文件路径
- 默认:
/var/log/xferlog
5. 常见组合示例(便于你自己搜)
5.1 禁用匿名、只允许本地用户
anonymous_enable=NO
local_enable=YES
5.2 允许写入(上传/删除/改名等)
write_enable=YES
5.3 把用户限制在目录(chroot)
chroot_local_user=YES
5.4 只允许名单用户登录(白名单)
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.userlist
5.5 PASV 端口范围(防火墙/NAT 常用)
pasv_enable=YES
pasv_min_port=10090
pasv_max_port=10100
7z a /root/backup_name.7z /DevelopZone -xr\!target -xr\!node_modules -mmt12 -mx9 -p123 -mhe=on -yDebain 12 如何升级到 Debian 13
确认当前版本
lsb_release -a
更新 Debian 12 到最新状态
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo reboot
修改软件源(核心步骤)
sudo nano /etc/apt/sources.list
把所有的:bookworm 全部替换为:trixie
重点
Debian 12 之后把 non-free-firmware 单独拆出来了,一定要保留
第三方源(Docker、Node、CUDA、国内镜像)建议先注释掉
示例(标准官方源):
deb https://deb.debian.org/debian trixie main contrib non-free non-free-firmware
deb https://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
刷新软件索引
sudo apt update
如有提示 release info changed,输入 Y
最小升级(防止大规模冲突)
sudo apt upgrade --without-new-pkgs
完整升级
sudo apt full-upgrade
过程中注意:
配置文件询问:
服务器建议选 keep local version
重启
sudo reboot
确认系统版本
lsb_release -a
应显示:Debian GNU/Linux 13 (trixie)
清理旧包
sudo apt --purge autoremove
sudo apt clean
升级失败 / 依赖冲突
sudo apt -f install
sudo dpkg --configure -a
修改直达(复制到浏览器地址栏打开):
chrome://net-internals/#hsts
前提:服务端支持http,不支持的情况无法处理
打开chrome浏览器:
1.地址栏输入:chrome://net-internals/#hsts
2.找到标题:Delete domain security policies
3.在Domain输入框中输入信息,如:test.com, 点击Delete
4.地址栏重新输入地址,如:http://test.com
KingbaseES简介文档中心
https://docs.kingbase.com.cn/cn/KES-V9R1C10/introduction
对标APEX的快速开发与运维平台
https://bbs.kingbase.com.cn/documentGuide?recId=6b134ad01e599577b9f4e5de59d181f6
首先确保你有合适的内核版本,通常需要使用 4.9 及以上的内核版本来支持 BBR。以下是开启 BBR 的步骤:
1. 确认系统内核版本
首先,确认你的内核版本。如果内核版本低于 4.9,你需要升级内核。如果内核版本是 4.9 或更高版本,则可以直接进入下一步。
uname -r
如果你的内核版本低于 4.9,可以升级内核。可以通过安装最新的内核来确保支持 BBR:
sudo apt update
sudo apt install linux-image-amd64
然后重启系统并检查内核版本:
reboot
uname -r
2. 启用 BBR
BBR 是一个 TCP 拥塞控制算法,可以通过配置内核模块来启用它。按照以下步骤启用:
1) 加载 BBR 模块
使用以下命令加载 BBR 模块:
echo "tcp_bbr" | sudo tee -a /etc/modules-load.d/modules.conf
2) 设置 TCP 默认队列
打开 /etc/sysctl.conf 文件,添加配置:
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
3) 应用 sysctl 配置
应用更改的配置:
sudo sysctl -p
4) 验证 BBR 是否启用
检查 BBR 是否启用,可以运行以下命令:
sysctl net.ipv4.tcp_congestion_control
如果输出是 bbr,则表示 BBR 已成功启用。
sysctl net.ipv4.tcp_available_congestion_control
如果输出包含 bbr,说明你的系统支持并已启用 BBR。
3. 重启系统
为了确保所有更改生效,可以重启系统:
sudo reboot
4. 验证内核和 BBR 状态
重启后,再次使用以下命令验证内核版本和 BBR 状态:
uname -r
sysctl net.ipv4.tcp_congestion_control
总结
以上步骤适用于 Debian 12 和 Debian 13,通过更新内核(如果需要),并启用 BBR,可以提升网络性能,尤其是在高带宽、低延迟的网络环境下。