这种方法适用于修改个别时间戳,对于隐藏服务器上的操作痕迹,这个方法不太奏效,可以使用 shell 脚本将该过程自动化。
步骤二:组织 Shell 脚本
在开始编写脚本之前需要考虑清楚需要执行哪些过程。为了在服务器上隐藏痕迹,攻击者需要将文件夹的原始时间戳写入一个文件,同时能够在我们进行任何修改设置之后还能回到原始文件。
这两个不同的功能会根据用户的输入或者参数的不同而触发,脚本会根据这些参数执行相应的功能,同时我们需要有一种方法来处理错误。根据用户的输入将会进行三种可能的操作:
没有参数——返回错误消息;
保存时间戳标记——将时间戳保存到文件中;
恢复时间戳标记——根据保存列表恢复文件的时间戳。
我们可以使用嵌套语句 if/or 语句来创建脚本,也可以根据条件将每个函数分配给自己的 “if” 语句,可选择在文本编辑器或者 nano 中开始编写脚本。
步骤三:开始脚本
从命令行启动 nano 并创建一个名为 “timestamps.sh” 的脚本,命令如下:
nano timestamps.sh
然后进行下列命令:
#!/bin/bash if [$# -eq 0];then echo “Use asave (-s) or restore (-r) parameter.” exit 1 i
在 nano 中按下 Ctrl O 保存这个文件,通过 chmod 命令将它标记为可运行的脚本。
chmod x timestamps.sh
然后运行脚本,测试无参数时返回错误信息的功能。如果脚本返回我们的 echo 语句,我们就可以继续下一个条件了。
./timestamps.sh
步骤四:将时间戳写入文件
定义 if 语句的条件,“-s” 表示执行保存功能:
if [$1 ="-s"] ; then fi
当然,需要检查计划保存的时间戳文件是否存在,如果存在,我们可以删除它(名为 timestamps 的文件),避免重复或错误的输入,使用下面的命令:
rm -f timestamps;
然后使用 “ls” 命令列出所有文件和它的修改时间,可将其输出到另一个程序,如 sed,以帮助我们稍后清理这个输入。
ls –l
通常会出现下面的显示结果:
-rw-r--r-- 1 user user 0 Jan 1 2017 file
为了保存时间戳,我们只需要年、月、日及文件名,下面命令可以清除 “Jan” 之前的信息:
ls -l file | sed 's/^.*Jan/Jan/p'
这样显示的就是我们程序需要的信息,只是需要修改月份格式为数字格式:
ls -l file | sed 's/^.*Jan/01/p'
将所有月份都替换为数字:
ls -l | sed -n 's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;'
在一个文件夹中运行我们会看到如下图所示的结果:
然后将输出结果通过 “>>” 发送到名为 “timestamps” 的文件中:
do echo $x | ls -l | sed -n 's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;' >> timestamps
至此,脚本的前两个操作就完成了,显示结果如下图: