You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 24.04中umask无法按预期生效,如何设置使/var/www下新文件和目录权限为755/644?

Ubuntu 24.04中umask无法按预期生效,如何设置使/var/www下新文件和目录权限为755/644?

我明白你现在遇到的头疼问题了——明明在~/.bashrc、/etc/profile还有/etc/apache2/envvars里都加了umask 022,甚至重启了系统,用sFTP在/var/www下创建的文件和目录还是顽固地保持775/664的权限,完全不是你想要的755/644。其实问题核心在于sFTP并不继承你设置的bash环境变量,它是靠sshd的子进程运行的,咱们一步步来搞定:

1. 调整sshd的sFTP子系统配置

sFTP默认用的是internal-sftp模块,咱们得直接给它指定umask值:

  • 打开sshd的配置文件:sudo nano /etc/ssh/sshd_config
  • 找到开头为Subsystem sftp的行,把它修改成:
    Subsystem sftp internal-sftp -u 0022
    
    这里的-u 0022就是给sFTP进程强制指定umask,这样新建目录权限会是777-022=755,文件则是666-022=644,正好匹配你的需求。
  • 保存文件后,重启sshd服务让配置生效:sudo systemctl restart sshd

2. 检查目录的默认ACL(如果上述方法没见效)

有时候/var/www目录的默认ACL会覆盖umask的设置,你可以先排查一下:

  • 执行命令查看默认ACL:getfacl /var/www
  • 如果输出里有类似default:group::rwx的内容,说明默认组权限是读写执行,这会导致新目录权限变成775。咱们修改默认ACL:
    sudo setfacl -d -m u::rwx,g::rx,o::rx /var/www
    
    这个命令会让/var/www下新建的文件和目录默认权限为:用户读写执行、组读执行、其他读执行,刚好对应755/644。

3. 确认www-data用户的umask(如果用该用户操作sFTP)

如果你是用www-data用户连接sFTP的,也得确保该用户的shell环境umask正确:

  • 编辑www-data的bash配置文件:sudo nano /var/www/.bashrc(如果文件不存在就直接创建)
  • 添加一行:umask 022
  • 保存后,下次该用户登录shell时umask会生效,不过因为sFTP用的是internal-sftp,这一步可能不是必须的,但可以作为兜底补充。

做完这些步骤后,你再用sFTP创建文件和目录测试一下,应该就能得到你想要的755(目录)和644(文件)权限了。

备注:内容来源于stack exchange,提问作者Matthijs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:28:13