local_umask是vsftpd中控制本地用户上传文件(666−umask)和目录(777−umask)默认权限的八进制掩码,需配合write_enable=yes生效,虚拟用户则使用anon_umask。

vsftpd 中的 local_umask 是控制本地用户上传文件和目录默认权限的关键参数,它不是直接设成目标权限,而是通过“掩码”方式反向计算——即从最大默认权限(目录777、文件666)中减去 umask 值,得到实际创建的权限。
local_umask 的作用原理
umask 是一个八进制掩码,每一位代表“禁止哪些权限”。例如:
– local_umask=022 表示:目录 777 − 022 = 755,文件 666 − 022 = 644
– local_umask=002 表示:目录 777 − 002 = 775,文件 666 − 002 = 664(组可写)
– local_umask=000 表示:目录 777,文件 666(完全开放,慎用)
注意:vsftpd 不支持十进制或符号模式,必须用三位八进制数(如 022,不可写成 22 或 u=rwx,g=rx,o=rx)。
修改 local_umask 的操作步骤
- 编辑主配置文件:
sudo nano /etc/vsftpd/vsftpd.conf - 查找或添加这一行:
local_umask=022(若已存在,直接修改数值) - 确保
write_enable=YES已启用,否则上传权限无效 - 保存后重启服务:
sudo systemctl restart vsftpd
常见权限需求与对应 umask 值
- 希望上传文件可被同组用户修改(如协作环境)→ 设为
local_umask=002(文件 664,目录 775) - 希望上传文件对所有人可读(如静态资源站)→ 设为
local_umask=022(文件 644,目录 755) - 严格限制仅用户自己可读写(默认安全策略)→ 保持
local_umask=077(文件 600,目录 700) - 虚拟用户不走 local_umask,应改
anon_umask(匿名或 PAM 虚拟用户场景)
验证是否生效
用本地用户登录 FTP,上传一个新文件(如 test.txt),然后在服务器上执行:ls -l /home/用户名/
观察文件权限是否符合预期(例如 umask=002 时应显示 -rw-rw-r--)。
若仍为 600/700,请确认:
– 用户确实是本地系统用户(非匿名或虚拟用户)
– 配置未被其他规则覆盖(如 user_config_dir 下的单用户配置优先级更高)
– SELinux 或防火墙未干扰权限继承











