EC2 AMI实例日志文件夹权限每日自动重置,如何永久设置权限?
永久解决EC2上/var/www/app/logs/权限每日重置的问题
我之前在EC2部署PHP应用时也碰到过一模一样的权限自动重置问题,大概率是后台有定时任务、日志管理工具或者部署脚本在悄悄修改目录权限。咱们一步步来排查和彻底解决:
1. 先揪出“搞事情”的进程
要解决问题,得先知道是谁在改权限,这里推荐用inotifywait来实时监控目录变化:
- 先安装监控工具:
如果你用的是Amazon Linux/RHEL/CentOS:sudo yum install inotify-tools
如果你用的是Ubuntu/Debian:sudo apt-get install inotify-tools - 运行监控命令,让它整夜跑着:
这个命令会输出任何修改该目录属性(包括权限)的操作,第二天看输出就能找到对应的进程ID和触发源。sudo inotifywait -m -e attrib /var/www/app/logs/
另外,也可以先检查常见的“嫌疑犯”:
- 查看所有定时任务:
- 当前用户的cron:
crontab -l - 系统级cron:
sudo cat /etc/crontab和sudo ls -la /etc/cron.d/
- 当前用户的cron:
- 检查logrotate配置(日志轮转工具经常会重置权限):
- 主配置:
sudo cat /etc/logrotate.conf - 应用专属配置:
sudo ls -la /etc/logrotate.d/,看看有没有针对你的PHP日志的配置项,里面的create参数可能指定了默认权限。
- 主配置:
2. 针对性解决权限问题
找到原因后,对应处理:
如果是logrotate搞的鬼
打开对应的logrotate配置文件(比如/etc/logrotate.d/your-php-app),找到create行,把它改成PHP应用运行用户对应的权限。比如你的PHP进程以apache用户运行,就改成:
create 0775 apache apache
这样logrotate轮转日志后,会自动设置正确的权限,不会再乱重置。
如果是定时任务/部署脚本导致的
找到对应的cron任务或者脚本,删除里面修改/var/www/app/logs/权限的命令,或者把权限改成更合理的设置(别用7777,太不安全了)。
给目录设置安全且持久的所有权和权限
首先说句题外话:7777权限极度危险,任何用户都能读写执行这个目录,建议换成更安全的配置:
- 把目录所有者改成PHP应用运行的用户(比如
apache或者www-data,根据你的服务器环境):sudo chown -R apache:apache /var/www/app/logs/ - 设置目录权限,让所有者有读写执行权限,组用户可写:
sudo chmod -R 0775 /var/www/app/logs/ - 给目录设置SetGID位,让新创建的日志文件自动继承目录的组权限:
sudo chmod g+s /var/www/app/logs/
这样后续生成的日志文件也会拥有正确的权限,不用每天手动改。
3. 终极方案:用ACL强制锁定权限
如果上面的方法还是挡不住权限被重置,可以用文件ACL来设置持久化的权限:
- 先安装ACL工具:
# Amazon Linux/RHEL/CentOS sudo yum install acl # Ubuntu/Debian sudo apt-get install acl - 给PHP运行用户设置该目录的永久读写执行权限:
sudo setfacl -R -m u:apache:rwx /var/www/app/logs/ - 让新创建的文件自动继承这个ACL规则:
sudo setfacl -R -d -m u:apache:rwx /var/www/app/logs/
这样就算目录权限被其他进程修改,ACL的规则依然会生效,PHP用户还是能正常读写日志。
内容的提问来源于stack exchange,提问作者manix
相关产品推荐
相关产品推荐

