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
相关产品推荐
相关产品推荐

