线上事故-sudo环境变量

线上事故-sudo环境变量

项目部署

项目部署的时候,为了控制权限. 会为项目单独创建一个用户, 来运行项目.
并且会该用户添加某些权限, 如sudo

事故内容

最近做了项目迁移, 用户、代码、环境都是整体迁移的。 没有遗漏。
但是突然发现某个业务的数据没有走系统的自动处理脚本。
于是开始定位问题, 查看代码git历史, 测试代码功能。 发现都是没有问题的。

事故原因

最后,突然想到,项目的配置文件, 是通过某一个自定义环境变量来选择的。
如开发环境、测试环境、正式环境。
于是就在线上的脚本,打印了一下, 获取的环境变量。
哎~~ 问题出来了,环境变量获取失败, 程序默认当前为测试环境,走的测试环境配置。
所以导致脚本执行无效。

那为什么会导致这个问题呢?
于是写了简单的测试脚本, 获取环境变量并打印。
刚开始, 直接执行脚本, 发现是正常的, 问题并没有复现。
于是各种测试,各种修改, 还是没有复现。
偶然的一次执行, 带上了sudo。
问题复现了。 于是确定就是sudo导致的, 环境变量读取不到。

最后在网上找到这么一个解释:
Linux为了保证安全,sudo 执行时, 会创建一个小的执行环境。
在这个执行环境中, 只保留了, 一些必要的环境变量。
所以就导致,sudo中获取自定义环境变量失败。

事故解决方案

解决方案:
1. 编辑文件 /etc/sudousers
修改 Default env_resetDefault !env_reset
这个意思就是, 生成sudo执行环境时,将用户当前环境变量保留, 不进行重置
缺点 : 个人认为, 这个方案, 违背了用户权限控制的初衷。 由于对Linux不是很熟悉, 所以暂时没想到很好的例子
2. 编辑文件 /etc/sudousers
添加 Defaults env_keep += '你的环境变量名称'
如, 我在/etc/profile 里面配置了一个环境变量 export test_env='cwx_test'
你需要添加的内容为: Defaults env_keep+='test_env'
> 多个环境变量之间, 用空格分隔
个人认为, 这个方案比较好,针对性的进行设置环境变量,延续了控制用户权限的初衷。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落笔成名

客官,辛苦则个

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值