普通用户执行ps兼容sudo和非sudo场景
前面有一篇文章《Linux隐藏进程的 PID 信息》,讲的是在做了相关安全加固之后,ps查看进程信息,只能看到普通用户自己的。
那么,当我们需要使用ps命令获取所有进程信息的时候,就需要sudo授权。
所以呢?我这边的所有检查脚本的ps命令前都加了sudo关键字。但是,万万没想到,有些现场不想授权ps的sudu权限给检查用户。
理由是:1、现场不存在hidepid加固的情况,所有机器上,普通用户均可以查看所有进程信息;2、用户没时间执行授权操作。
要求:去掉ps前的sudo关键字。
这不就尬了吗?其他省份需要sudo,另外一些省份不需要。然而,我们产品不可能为每个省单独维护一份检查脚本。
综合评估下来:
带sudo:1、现场只需要授权ps的sudo即可;2、当然也可以修改脚本
不带sudo:现场出现需要sudo的情况,只能改脚本
所以,还是带的好!!!但是,实在难以说服现场同事。非要去掉sudo,坚持不授权(用户不理会);也很是理解现场同事的处境,想想办法吧!!!看看能不能兼顾一下。
于是乎,有了第一版方案:
编写一个函数封装判断逻辑,然后使用函数名替换原有的sudo ps -ef命令:
get_proc() {local raw=$(ps -ef)local is_full=$(echo "$raw"|grep -E '^[[:space:]]*root'|wc -l)if [ -n "$is_full" ] && [ $is_full -ge 1 ];thenecho "$raw"elsesudo ps -effi
}
get_proc
效果达到了,但是呢感觉还是有点臃肿了,能否一行搞定呢?遇事不决问AI
通过AI给的答复,灵感一闪:
(ps -ef | grep -qE '^[[:space:]]*root' && ps -ef || sudo ps -ef)
使用上面的代码替换sudo ps -ef;使用修改后的脚本扔给现场执行,解决了两难的情况