定时任务(root)与 Web(www)权限冲突问题——使用 ACL 彻底解决

作者:半桶水专家日期:2026/7/2

在 Linux 服务器中,权限冲突问是一个非常常见的问题。

例如:

  • Cron 定时任务:root 用户执行
  • PHP(Nginx + PHP-FPM):www-data 或 www 用户执行
  • Apache:apache 用户执行
  • Tomcat:tomcat 用户执行

两个不同用户需要共同读写同一目录。

很多人第一反应就是:

1chmod -R 777 data/
2

虽然能解决问题,但非常不安全

Linux 提供了更好的方案——ACL(Access Control List)


一、为什么传统权限解决不了?

Linux 普通权限只有三类:

1Owner(所有者)
2
3Group(所属组)
4
5Others(其他人)
6

例如

1-rw-r--r--
2

表示

1Owner  rw-
2Group  r--
3Other  r--
4

假设:

1root      (定时任务)
2
3www       (PHP)
4
5

目录

1/data/report/
2

权限

1drwxr-x---
2root root
3

那么:

root 可以

1
2
3删除
4创建
5

而 www:

1没有权限
2

如果改成

1775
2

那么要求:

1www 必须属于 root 
2

现实中通常不是。

如果改成

1777
2

任何用户都能写。

安全性很差。


二、ACL 是什么?

ACL(Access Control List)

就是:

给某一个指定用户,单独赋予权限。

例如:

1目录属于 root
2
3但是允许 www 
4

无需:

1修改 owner
2
3修改 group
4
5修改 777
6

ACL 就像:

1普通权限:
2
3Owner
4Group
5Other
6
7ACL:
8
9Owner
10Group
11Other
12+
13www
14+
15mysql
16+
17backup
18+
19...
20

因此更加灵活。


三、查看系统是否支持 ACL

Ubuntu:

1which setfacl
2
3which getfacl
4

如果没有:

Ubuntu

1sudo apt install acl
2

CentOS

1yum install acl
2

查看文件系统

1mount
2

例如:

1/dev/sda1 on /
2type ext4
3

现在:

Linux 大多数:

1ext4
2
3xfs
4
5btrfs
6

默认都支持 ACL。


四、ACL 常用命令

查看 ACL

1getfacl 文件
2

例如

1getfacl report
2

输出

1# file: report
2# owner: root
3# group: root
4
5user::rwx
6user:www:rwx
7
8group::r-x
9
10mask::rwx
11
12other::---
13

说明:

1www
2
3拥有 rwx
4

设置 ACL

给 www 权限

1setfacl -m u:www:rwx report
2

解释:

1-m
2
3modify
4
5u
6
7user
8
9www
10
11用户名
12
13rwx
14
15权限
16

再查看

1getfacl report
2

会看到:

1user:www:rwx
2

说明成功。


五、解决 root 与 www 冲突

假设:

1/var/www/project/storage
2

root 定时写:

1cron
2
3shell
4

PHP:

1www
2

需要共同写。

设置:

1sudo setfacl -R -m u:www:rwx /var/www/project/storage
2

以后:

1root
2
3www
4
5都可以写
6

无需:

1777
2

六、递归设置

整个目录

1setfacl -R -m u:www:rwx data
2

查看

1getfacl data
2

如果目录很多:

1全部都会拥有 ACL
2

七、新建文件为什么又没权限?

很多人做到这里发现:

已有文件可以。

但是:

1root 新建文件
2
3www 又打不开。
4

为什么?

因为:

ACL 默认不会继承

例如

1data/
2
3

里面:

1旧文件
2
3 ACL
4

后来 root:

1touch test.txt
2

结果:

1test.txt
2
3没有 ACL
4

这也是很多人踩坑的地方。


八、默认 ACL(Default ACL)

Linux 可以设置:

1以后新建文件
2
3自动继承 ACL
4

命令:

1setfacl -R -d -m u:www:rwx data
2

这里:

1-d
2
3default
4

查看:

1getfacl data
2

会看到:

1default:user:www:rwx
2

以后:

1mkdir
2
3touch
4
5cp
6

都会自动继承。

例如:

root

1touch data/a.txt
2

查看:

1getfacl data/a.txt
2

里面:

1user:www:rwx
2

已经自动存在。


九、同时给多个用户

例如:

1root
2
3www
4
5backup
6

都需要。

1setfacl -m u:www:rwx data
2

再:

1setfacl -m u:backup:r-x data
2

查看:

1user:www:rwx
2
3user:backup:r-x
4

互不影响。


十、给整个用户组

例如:

1group:www
2
1setfacl -m g:www:rwx data
2

查看:

1group:www:rwx
2

十一、删除 ACL

删除某用户

1setfacl -x u:www data
2

删除组

1setfacl -x g:www data
2

删除全部 ACL

1setfacl -b data
2

十二、mask 是什么?

查看 ACL:

1user::rwx
2user:www:rwx
3
4group::rwx
5
6mask::r-x
7
8other::---
9

很多人疑惑:

1www  rwx
2
3为什么不能写?
4

因为:

1mask
2
3限制了 ACL 最大权限。
4

真正权限:

1user:www:rwx
2
3AND
4
5mask:r-x
6
7=
8
9r-x
10

所以:

1没有写权限。
2

修改:

1setfacl -m m:rwx data
2

或者:

1setfacl -m mask:rwx data
2

十三、实际生产环境案例

假设目录:

1/var/www/project/storage
2

需求:

  • root(cron)可以读写
  • www(PHP)可以读写
  • 其他用户不能访问
  • 新建文件自动继承权限

推荐方案:

1#  www 设置 ACL
2sudo setfacl -R -m u:www:rwx /var/www/project/storage
3
4# 设置默认 ACL,确保新文件继承
5sudo setfacl -R -d -m u:www:rwx /var/www/project/storage
6
7# 如有需要,调整 ACL mask
8sudo setfacl -R -m m:rwx /var/www/project/storage
9sudo setfacl -R -d -m m:rwx /var/www/project/storage
10

然后验证:

1getfacl /var/www/project/storage
2

应看到类似输出:

1user::rwx
2user:www:rwx
3group::r-x
4mask::rwx
5other::---
6default:user::rwx
7default:user:www:rwx
8default:group::r-x
9default:mask::rwx
10default:other::---
11

这样,root 的 Cron 任务和 **Web 服务(www 用户)**即可安全地共享该目录,而无需将权限放宽到 777

十四、ACL 与 chmod/chown 对比

方案灵活性安全性是否推荐
chmod 777很低❌ 极低不推荐
chown www:www一般中等仅适用于 Web 独占目录
chgrp + 775较高较高同组协作时推荐
ACL (setfacl)最高⭐ 多用户协作场景首选


定时任务(root)与 Web(www)权限冲突问题——使用 ACL 彻底解决》 是转载文章,点击查看原文


相关推荐


MySQL 8.0 实现 JSON 字段全文检索 | ngram 分词支持单字/字母/中英文混合搜索
勿忘初心12212026/6/23

MySQL 8.0 实现 JSON 字段全文检索 | ngram 分词支持单字/字母/中英文混合搜索 前言一、业务场景二、技术痛点三、概念解释3.1 ngram 中日韩分词器3.2 生成列(Generated Column)3.3 全文索引(FULLTEXT INDEX)3.4 停用词表3.5 BOOLEAN MODE(布尔检索模式) 四、环境五、MySQL 全局配置(my.cnf / my.ini)5.1 完整配置文件5.2 重启 MySQL 服务5.3 验证配置是否生效 六、创


Claude Codde 入门教程—— 从零到独立完成项目
fa_lsyk2026/6/15

Claude Code 入门教程 适合人群:技术小白、编程初学者、对 AI 编程感兴趣的所有人 学习目标:读完本文后,你能够独立使用 Claude Code 完成一个完整的 OCP 项目 阅读时间:约 45-60 分钟 难度等级:★☆☆☆☆(零基础友好) 目录 前言:你即将拥有的"超能力"什么是 Claude Code?—— 你的 AI 编程伙伴安装 Claude Code —— 3 步搞定第一次对话 —— 跟 AI 说"你好"核心概念:理解 Claude Code 的"


HDFS 频繁进入安全模式的原因及解决方案
数据小羊2026/6/8

你是否遇到过 HDFS 集群时不时进入安全模式(Safe Mode)的问题?这不仅会影响数据的读写,还可能导致整个 Hadoop 生态系统的应用出现异常。本文将深入分析 HDFS 安全模式的触发机制,以及如何有效解决这个棘手问题。 什么是 HDFS 安全模式? HDFS 安全模式是一种保护机制,在这种状态下,文件系统只允许读操作,不允许任何修改文件系统的操作。通常在 NameNode 启动时会进入安全模式,以确保文件系统的元数据和数据块信息的一致性。 为什么 HDFS 会频繁进入安全模


【Redis】网络高并发模型
步十人2026/6/1

目录 一、 核心场景:百万并发下的秒杀大考1. 传统多线程服务器会怎么样?2. Redis 凭什么能抗住?第一步:建立连接(非阻塞 + epoll)第二步:读取请求(非阻塞 I/O)第三步:执行命令(单线程串行,纯内存操作)第四步:返回结果(非阻塞写) 二、 深度对比:多线程阻塞 vs 单线程非阻塞三、 演进:Redis 6.0+ 的多线程 I/O 革命四、 微观视角:一个秒杀请求的时间线拆解五、 致命死穴:如果某个命令很慢怎么办?本篇总结 一、 核心场景:百万并发


你写的代码没有测试,就像出门不锁门——Jest + Testing Library 从入门到不慌
kyriewen2026/5/11

你改了一行代码,手动点了一遍页面,觉得没问题就上线了。结果用户反馈“登录按钮点不动了”。你心里咯噔:我根本没改登录相关代码啊。今天我们来给你的代码装一把“智能门锁”——单元测试。用 Jest + Testing Library,把常见 Bug 锁在门外,让你改代码时不再心惊胆战。 前言 很多前端对测试的态度是:项目那么赶,哪有时间写测试?结果修 Bug 的时间比写代码还多。你花 20 分钟写的测试,可能帮你省掉 2 小时的通宵排查。 测试不是“额外工作”,而是安全网。当你需要重构、升级依赖、添


Git Worktree: AI 编程 Agent 并行开发的秘密武器
陈佬昔编程人生2026/5/1

你在 AI 编程工具里开发一个新功能,突然产品过来让修复一个紧急 bug。于是你开了两个 AI Agent: Agent A:在 feature/new-dashboard 上写新功能 Agent B:在 fix/login-bug 上修一个登录 Bug 你心想:"两个 Agent 同时干活,效率翻倍。" 但三分钟后你回到编辑器,看到的是一幅这样的画面: app/ ├── dashboard.tsx ← Agent A 刚改了这里,但没写完 ├── login.tsx ←


我把 Hermes 里的模型几乎测了一遍,得出一个很扎心的结论:越贵的,往往越强
孟健AI编程2026/4/23

大家好,我是孟健。 这几周我在 Hermes 里来回切了很多模型。真跑下来,我越来越确认一件事:模型的水平,很多时候早就写在价格里了。把性价比榜倒过来看,八九不离十就是质量排行。 这不是 benchmark 结论。 是我把 Hermes 当生产底座,拿它去跑多 Agent、长流程、代码任务、资料整理之后,交出来的体感排序。 01 先给排序:贵,很多时候不是乱贵 先看这张图。 图里是按价格排的:便宜的在前,贵的在后。 但我这轮实际测下来,如果你把它倒过来看,它反而更像质量榜。 我的主观体感


c++从入门到跑路——string类
小肝一下2026/4/14

c++从入门到跑路——string类 1.为什么学习string类? 1.1 C语言中的字符串 C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户 自己管理,稍不留神可能还会越界访问。 1.2 两个面试题(暂不做讲解) 把字符串转换成整数_牛客题霸_牛客网 415. 字符串相加 - 力扣(LeetCode) 在OJ中,有关字符串的题目基本以stri


火爆全网的Seedance2.0 十万人排队,我2分钟就用上了
AI袋鼠帝2026/4/6

大家好,我是袋鼠帝。 之前我在B站看到一位AI视频创作者分享他的工作流。不可否认,那套流程做出来的视频确实很专业,画面精美,运镜流畅。但是,看完我只觉得头皮发麻。 原文档找不到了,我记得他先是用Gemini写剧本,接着用NanoBanana跑画面,然后再去另外的配音平台搞音频,中间穿插着使用ComfyUI来控制视频、图片生成。 ComfyUI这玩意儿我以前也折腾过几次,连线复杂就算了,每个节点的各种配置参数直接给我整懵逼了,我感觉比当初学敲代码还难,后面就再也没碰过了。 然后整个流程的最后一步,


Vue项目打包为WAR文件部署Tomcat完整指南
蒙眼过河2026/3/28

Vue项目打包为WAR文件部署Tomcat完整指南 前言 在Vue项目开发完成后,通常我们会将打包后的静态文件部署到Nginx等静态服务器上。但在某些企业环境中,我们需要将Vue项目部署到Tomcat这样的Java应用服务器中。本文将详细介绍如何将Vue项目的打包文件转换为标准的WAR包,以便部署到Tomcat服务器。 为什么需要将Vue打包为WAR包? 企业规范要求:很多企业使用统一的Tomcat应用服务器集群统一管理:便于与后端Java应用统一部署和管理历史遗留系统:部分老系统架构需

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读