文件权限让接口挂了

某天,测试人员在群里抛出了一个 接口500 的错误,心理OS,好好的怎么挂了,我还有其它紧急的开发任务啊,抓狂!!

没办法,要先给测试大佬解决问题,开发原则之一不能随便得罪测试。

用他的链接请求一次,是500,在换其它参数,试了几次,还是500。由于接口是基于swoole开的http服务,所以,先猜想,可能是进程挂了,毕竟是个测试机器,机器资源有限,所以顺手去jenkins上点下执行启动服务的事件钩子,这么做是为了重新启动应用。启动起来之后,在请求接口,通了!唉,还是哥哥我经验老道,然后跟测试说正常了。

原本以为这么就结束了,不一会,测试人员愤怒的说,接口又500了,收到这个消息,我想这么快又挂了,不能在故技重施,重启服务这种玩法了,只好放下开发任务,去找日志。可以看到日志里重复出现一条错误:

{"code":2,"message":"info_log(\/data\/wwwroot\/xxx\/runtime\/log\/202205\/07.log): failed to open stream: Permission denied"}

还不确定是否因为这个报错,那就用 tail -f 实时打印下输出,发现每次调用这个接口,都会打印到这个消息,也就是说接口要写日志,但是没有写权限。用 ll /data/wwwroot/xxx/runtime/log\/202205/07.log 查看,发现 -rwr--r-- root root 的信息,而应用的swoole服务是www:www的用户和组运行的,所以要写这个日志文件肯定会权限不足!

但是刚才重启服务之后,接口变正常了,这又是什么鬼!接着在故技重施,重启项目,用 ll /data/wwwroot/xxx/runtime/log\/202205/07.log 查看,发现文件信息变成了 -rwxrw-rw- www www, 猜测是启动服务的钩子做了设置,查看了下它的配置,看到:

chown -R www:www /data/wwwroot/txxx/

chmod -R 764 /data/wwwroot/xxx/

因此重启服务之后,接口没有因为写日志异常报错就不奇怪了。那就剩下最后一个疑问了,为什么运行一段时间,这个日志文件就被改变了??那就接着往下分析了,由于是变成了root:root,因此以root身份登录机器,通过 hitstory 查看相关操作,发现一组可疑的操作,拿出来执行下,这个问题就复现了:

经了解知道,是另外一个测试同志用root登录了机器,去执行了这个命令,用来测试计划任务功能!从这里也可以看出,即使不是用root干了 rm 的操作,也是可能带来灾难的。root作为系统中拥有最高权限的用户,不建议直接用或者开放出来!

由于是测试机器,所以公司在这上面就没有限制太多,最后是让测试用 sudo -u www 来执行命令,当然还可以通过 su - xx 切换用户执行,麻烦些,而且这里不一定能切换成功,比如这个www,因为它仅仅作为执行某类程序的用户,通常这类程序在后台运行,所以没有必要配置对应的交互命令行程序,查看 /etc/passwd 就能看这个用户配置了什么shell程序,如果是 /sbin/nologin、/bin/false 之类,那是不能切换的!通过 sudo 让测试操作,还是比较麻烦,还可以通过 alias 来提前配置好对应命令的别名,这样执行就更方便安全些!

 

本文作者:笑笑霸

本文链接:https://www.cnblogs.com/xiaoxiaobug/p/16406381.html

期待你的关注、收藏、评论,欢迎转载,请指明原文链接

posted @   笑笑霸  阅读(44)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起