Linux下巧用chattr、watch命令的实例

一、起因

前些日子,张戈在日志备份服务器加入了日志压缩的计划任务(详见服务器日志备份超节省空间的思路),结果发现监控总是发来 tar 的报警,提示存在 tar 进程。仔细检查 history 后发现是公司总部那边做的监控:

每 20 分钟执行一个监控脚本,然后删除。

分析下这样做的好处:①、不留痕迹;②、把 history 塞满,让其他操作无迹可寻(感觉有点蛋疼)。

二、擒获

每次执行后立马删除了,得想个办法把这脚本“擒获”!

于是我写了一个简单的脚本 catch.sh:

#!/bin/bash
test -f /tmp/hdd.sh && echo Catch it! && exit
test -f /home/suxirong/hdd.sh && cp /home/suxirong/hdd.sh /tmp

ps:如果发现 hdd.sh 就把它复制一份到 tmp 目录,如果 tmp 目录发现存在 hdd.sh 则打印 Catch it,结束脚本。

然后使用 watch 来执行它:

watch -n 0.1 /tmp/catch.sh

ps:每隔 0.1 秒执行上面的脚本,应该可以在删除之前获取脚本。

等了一段时间,看了下终端:

还真抓住了!

编辑 hdd.sh,发现了 tar 进程监控语句:

...略...
######################Mysql-TAR-Mon###################
for a in tar zip;do
       common=`ps -ef|egrep -v "grep|start"|grep -w "$a"`
       if [ -n "$common" ];then
          echo -e "%%%%\tTAR\t$ATIME\t$LanIp\t$a\tAlarm"
       fi
done
...略...

三、计策

一抓到“真凶”了,但是又不能处以“死刑”,因为还有“利用价值”,所以这是一个很棘手的事。

思考了下,有 2 种方案:

①、实时监控 hdd.sh 文件的出现,一出现就立即用 sed 干掉 tar 进程监控那一段代码;

②、固定 hdd.sh,让其无法删除和替换,然后删除 tar 监控代码;

进一步思考发现,方案①不可行,先不说这实时监控会占资源,就是如何在执行之前把内容给修改了,都是一个头疼的问题,毕竟 shell 都是写入内存再执行代码的。等你删除 tar 监控代码了,对执行也没任何影响。

于是准备实施方案②。

四、实施

1、修改 hdd.sh,屏蔽 tar 报警消息:

...略...
######################Mysql-TAR-Mon###################
for a in tar zip;do
       common=`ps -ef|egrep -v "grep|start"|grep -w "$a"`
       if [ -n "$common" ];then
          #echo -e "%%%%\tTAR\t$ATIME\t$LanIp\t$a\tAlarm"  屏蔽此代码
       fi
done
...略...

2、锁定 hdd.sh,让监控端无法替换或删除

①、如何让 suxirong 家目录下面的 hdd.sh 文件,无法修改和替换,首先想到的就是去掉所有权及写入权限:

chown root:root /home/suxirong/hdd.sh
chmod -w /home/suxirong/hdd.sh

结果,切换到 suxirong 账号,居然还是可以删除或替换。。。

②、突然想起 Linux 还有一个-i 的文件属性可以锁定文件不被修改,于是执行如下语句:

#还原初始属性
chown suxirong:users /home/suxirong/hdd.sh
chmod +w /home/suxirong/hdd.sh
#锁定文件
chattr +i /home/suxirong/hdd.sh

用 suxirong 账号试下效果:

所有者是 suxirong,也有可写权限,可就是无法修改,有种偷笑的赶脚:

suxirong@linux-mfb5:~> ll | grep hdd.sh
-rwxr-xr-x 1 suxirong users     4927 Jul 23 14:40 hdd.sh
suxirong@linux-mfb5:~>
suxirong@linux-mfb5:~>
suxirong@linux-mfb5:~> mv hdd.sh hdd
mv: cannot move `hdd.sh' to `hdd': Operation not permitted

好了,目的达到,现在就算是 root 都无法修改了!具体效果只要等明天日志压缩计划任务运行的时候就知道了。

五、写在最后

其实,chattr 和 lsattr 在张戈博客早期文章:Linux 基础知识之文件隐藏属性 一文中就已经提到过。这次主要分享一下我在工作中正好用到 chattr 的实例,另外就是利用 watch 命令持续间隔执行某脚本的方法,特殊场景使用会有奇效,完毕!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang之chan/goroutine

最近在team内部培训golang,目标是看看golang能否被C工程师快速掌握。我定了个一个月,共计20小时的培训计划,首先花10个小时(两周,每天1小时)让...

40170
来自专栏数据和云

诊断案例:Oracle的Mutex机制和Cursor Pin S竞争分析

SQL的软解析也会带来性能问题么?我们都知道使用绑定变量,让SQL实现软解析是Oracle的最佳实践。那么大量的软解析会否带来负面的性能影响呢? 在以下数据库的...

39050
来自专栏为数不多的Android技巧

让Alfred支持拼音搜索

Alfred是个好东西,不过检索程序的时候不支持拼音搜索;我在论坛看到有人给作者反馈过,无奈作者说支持中文,他不知道拼音是什么,于是就不了了之了。举个例子:我想...

39710
来自专栏Golang语言社区

跳出Go module的泥潭

Go 1.11 前天已经正式发布了,这个版本包含了两个最重要的feature就是 module和web assembly。虽然也有一些简单的教程介绍了go mo...

53230
来自专栏用户2442861的专栏

python项目打包部署

作者:张博 链接:https://www.zhihu.com/question/38081354/answer/81829426 来源:知乎 著作权归作者...

5.1K10
来自专栏Netkiller

网络设备配置管理与版本控制

网络设备配置管理与版本控制 摘要 2014-12-25 我的系列文档 Netkiller Architect 手札 Netkiller Developer ...

506110
来自专栏编程

年底总结一下Python WEB最好用的几个框架,让你有一个系统的了解

2017年就要过完了,我们来总结一下2017年最好用的17个Python Web框架 群内不定时分享干货,包括2017最新的python企业案例学习资料和零基础...

99980
来自专栏信安之路

Pentester Lab SQL to shell

首先先介绍一款工具,个人觉得老牛逼——Netdiscover,之前我询问一哥们arp扫描工具时他推荐的。

11100
来自专栏walterlv - 吕毅的博客

PasswordVault —— 在 UWP 应用中安全地保存密码

2018-06-15 13:43

12130
来自专栏Android's Track

当我们按下电源键,Android 究竟做了些什么?

我们会否好奇过,如此复杂的 Android 究竟是怎么运作起来的呢?

1.4K140

扫码关注云+社区

领取腾讯云代金券