记一次linux权限问题排查过程

7 篇文章 0 订阅
2 篇文章 0 订阅

项目目录下,无通过php mkdir的权限

  1. 首先,创建目录|文件权限,由目录|文件所在目录w权限决定。
  2. 弄清楚哪个用户在mkdir。
    1. nginx配置里有user
    2. php-fpm配置里有user
    3. 显然,nginx配置的用户,一般对项目有r权限,可能还有日志所在目录|文件的w权限;而执行php函数mkdir,是php-fpm配置的用户去执行的。
  3. 通过ps aux | grep php-fpm查看php-fpm配置的用户是谁。
  4. 解决方法:可以将项目目录的owner和group改为php-fpm配置的用户对应的,也可以统一设置项目目录owner和group为nginx,nginx与php-fpm配置的用户均改为nginx。
  5. 引入新问题,phpmyadmin无法访问,报session权限问题

phpmyadmin session权限问题无法正常访问

  1. 刚开始不太理解报错的问题,期望通过日志获得更详细报错信息。

    学会看日志——linux那套潜规则

    ps aux | grep 服务 一般可查看到服务(或进程)的配置文件

    1. nginx日志:

      • access_log
      • error_log
    2. php-fpm日志

      • /etc/php-fpm.conf配置
      • /etc/php-fpm.d/www.conf配置
      • /etc/php.ini配置
  2. 先梳理整体流程,理解期望获得的错误日志记录在哪里。

    1. nginx服务监听到http请求,匹配,当是.php结尾的url,就call本地(127.0.0.1:9000)的服务。(这是nginx配置文件代码的意图)。
    2. 127.0.0.1:9000端口的服务是php-fpm。
  3. nginx日志:把错误日志等级开到info

    vim /etc/nginx/nginx.conf
    ## 修改
    error_log /var/log/nginx/error.log info;
    

    没有得到详细的报错信息,说明不是nginx相关错误,并且php-fpm没有报错误报给nginx,nginx就当正常返回了。

  4. php-fpm日志:

    1. 首先将php.ini,php-fpm配置的记录日志相关控制都打开。

      vim /etc/php.ini
      
      error_reporting = E_ALL & ~E_DEPRECATED
      display_errors = On
      display_startup_errors = On
      log_errors = On
      track_errors = On
      html_errors = On
      
      vim /etc/php-fpm.conf
      log_level = debug
      
      vim /etc/php-fpm.d/www.conf
      catch_workers_output = yes
      
    2. 发现即使访问一个php语法有错误的页面,仍没有记录日志。上网查得是因为修改了php-fpm的用户为nginx,而php-fpm日志目录的owner为apache。

    3. 修改owner为nginx后,访问php语法错误页面有日志。但访问phpmyadmin仍没记录日志,理解可以是phpmyadmin捕获了异常,自定义处理了,没继续抛给php。

    4. 最后还是上网查得,php-fpm修改后的用户nginx没有创建,写入session文件的权限

      1. phpmyadmin需要用到session,即要在指定目录(/etc/php-fpm.d/www.conf定义了session.save_path),创建session文件,并写入内容
      2. 而目前session.save_path的owner是apache的
  5. 最终解决:把session.save_path指定目录的owner改为nginx。

总结

  1. 优先通过查看错误日志找问题
    1. 把记录日志控制开关打开,并逐步调高日志等级。
    2. 梳理整个操作流程,确定报错应该记录在谁的错误日志。
  2. linux里权限问题优先考虑对某目录|文件执行操作的用户是否有该目录|文件的对应操作权限,即:
    1. 执行操作的用户是谁?ps aux | grep php-fpm一般可查看到
    2. 操作对象在哪?除项目目录外,可考虑ps aux | grep php-fpm一般可看到配置文件,再看配置文件制定的目录,可能是日志,session
    3. 操作所属权限是r还是w或x?
      1. 对文件,很好理解
      2. 对目录:
        1. r -> ls
        2. w -> 创建,修改文件
        3. x -> cd
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于Linux共享内存通信失败的问题,可以尝试以下排查步骤: 1. 检查共享内存的创建和附加过程: - 确保共享内存的创建者和用户进程都使用相同的key和权限。 - 检查共享内存的创建代码,确认是否正确设置了共享内存的大小和标志。 - 确保共享内存的创建者成功创建了共享内存并返回了有效的共享内存标识符。 - 检查用户进程是否成功调用了共享内存的附加函数,并返回了有效的共享内存地址。 2. 检查进程间通信的同步机制: - 在读写共享内存之前,确保进程间已经正确进行了同步,避免竞争条件。 - 使用信号量、互斥锁或其他同步机制进行进程间同步。 3. 检查共享内存的权限和访问控制: - 确保创建共享内存的进程和用户进程都具有足够的权限访问共享内存。 - 检查文件系统或操作系统的限制,确保没有禁止或限制对共享内存的访问。 4. 检查共享内存的清理和销毁: - 确保在不再使用共享内存时,及时进行清理和销毁,避免资源泄漏。 - 在共享内存不再需要时,调用相应的函数进行释放和销毁。 5. 检查错误处理和日志录: - 检查代码中是否正确处理了共享内存操作的错误情况。 - 在代码中添加适当的错误处理和日志录,以便排查问题时能够获取相关信息。 希望以上提供的步骤能够帮助你解决Linux共享内存通信失败的问题。如果还有其他疑问,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值