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

使用sudo执行Logrotate仍提示Permission Denied的原因排查

使用sudo执行Logrotate仍提示Permission Denied的原因排查

我来帮你拆解这个权限问题的核心原因——问题出在你logrotate配置里的**su www-data www-data**这一行!

你可能会疑惑:我明明用sudo启动了logrotate,进程应该是root权限啊?没错,logrotate确实是以root身份启动的,但su指令会强制logrotate切换到www-data用户去执行实际的日志重命名、轮转操作,这才是权限拒绝的根源。

具体分析

  1. 目录权限≠文件权限:虽然/var/log目录是root所有且给了组读写权限,但单个日志文件/var/log/myapp-stdout.log的所有者可能是root或者其他用户,www-data没有修改/重命名它的权限。
  2. 用户组限制:/var/log的组是syslog,而www-data默认不在这个组里,它作为其他用户只有目录的读和执行权限,没有写入权限——而重命名文件需要目录的写入权限。

排查与验证步骤

  • 先检查目标日志文件的权限:
    ls -lah /var/log/myapp-stdout.log
    
    看看文件的所有者和组是不是www-data,如果是其他用户,那www-data自然没权限操作它。
  • 临时注释掉配置里的su www-data www-data行,再执行一次测试:
    sudo logrotate /etc/logrotate.d/myconf --verbose -f
    
    如果这次能成功轮转,就完全确认是su配置导致的权限问题。

解决办法

  • 如果业务确实需要用www-data执行轮转:
    • 把目标日志文件的所有者改成www-data:sudo chown www-data:www-data /var/log/myapp-stdout.log
    • 或者把www-data加入syslog组:sudo usermod -aG syslog www-data(需要重启logrotate或相关进程生效)
  • 如果不需要切换用户,直接删除配置里的su www-data www-data行即可——毕竟sudo已经以root身份运行,足够完成日志轮转操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:09:29