Linux清理痕迹的一些方法

1,暴力省事直接删除

首先是比较暴力省事的操作,直接清除当前用户bash历史记录,可以直接echo空进去。

echo "" > ~/.bash_history

然后history的话,可以通过c参数直接删除。

history -c

2,设置bashrc,命令前加空格运行则不记录

再有就是设置不记录,给bashrc设置ignoreboth,则命令前加空格不会被记录,且不影响运行。

echo HISTCONTROL=ignorespace >> ~/.bashrc
source ~/.bashrc

3,手动删除bash_history的部分记录

如果想把修改bashrc的命令也删除,或者删除history中的部分命令,则可以修改.bash_history文件,该文件记录了命令内容,history实际上就是读取的该文件。

vim ~/.bash_histroy

vim编辑后history显示的内容不会变,因为有缓存存在,bash_history的内容已经缓存到了当前命令行,所以删除bash_history并不会影响当前history的结果,如果想同步,这里需要运行两个命令,先运行c清除当前缓存,然后再运行r把文件内容追加到当前缓存中,注意查看文档,r参数是追加的意思,所以直接r不c的情况下是不行的。

history -c
history -r

4,通过history删除部分记录

history可以通过d参数删除单条记录,具体删除哪行,写哪行的行号就可以。

history -d 10

注意history删除的话也是删除的缓存内容,所以并不会同步到bash_history,如果要同步,需要通过w参数进行写入。

history -w

所以不管是编辑bash_history文件删除了部分命令,还是说通过history -c删除了部分命令,都一定要进行同步处理,保证删除干净。

5,通过set +-o来禁用history

通过+o参数可以禁用history记录功能,-o取消禁用,中间命令不会记录,如果ignoreboth开启的话,set前也可以加空格,否则set +o这条会被记录。

set +o history
whoami
set -o history

6,设置HISTSIZE=0 && HISTFILESIZE=0

还有一种就是设置HISTSIZE环境变量,可以通过echo $HISTSIZE查看值,意思是bash最多会在内存中保留多少条,0就是0条,也就是不记录,HISTFILESIZE表示当历史记录达到XXX条时,会将最早的记录写入 .bash_history文件,并从内存中删除。

直接运行以下命令即可,注意运行后history没有记录了,但是不会影响bash_history。

HISTSIZE=0 && HISTFILESIZE=0

该命令只会对当前终端生效,如果想每次打开命令行都设置为0不记录,可以把它们添加到bashrc中。

8,直接杀掉当前shell进程

连接会话以进程存在,可以直接杀掉,不会留下相关记录。

kill -9 $$

$$表示的是当前shell的PID。

相关日志记录

/var/log/btmp:记录了所有用户登录失败的记录,lastb命令就是查看的该内容,只不过这个btmp是个二进制文件,所以不能直接vim修改。
/var/log/lastlog:记录了所有用户最后一次登录系统的记录,lastlog命令就是查看的该内容,也是二进制文件,不能直接修改。
/var/log/wtmp:记录所有用户的登录和注销信息,使用last命令查看,也不能直接修改。
/var/log/utmp:记录当前已经登录的用户信息,w、who、users命令都可以查看,这个文件可能不存在,这些命令的结果可能存wtmp中获取,各系统间不一样。
/var/log/secure:记录与安全相关的日志信息,很多种,比如su、sudo的运行,ssh登录的,认证授权的,防火墙或安全规则的修改都会记录。
/var/log/message:记录系统启动后的信息和错误日志。

1,还是直接暴力省事的方法,直接置空。

不论是二进制文件,还是普通的日志文件,都可以echo空进去来达到删除的目的。

echo "" > /var/log/xxxx

2,对于secure,message日志文件,我们可以进行删除部分记录也可以替换掉我们的IP。

例如我们的IP是x.x.x.x,匹配我们的IP,把有关我们的IP记录删除掉:

sed  -i '/x.x.x.x/'d  /var/log/secure
sed  -i '/x.x.x.x/'d  /var/log/messages

例如我们的IP是x.x.x.x,替换我们的IP:


sed -i 's/x.x.x.x/192.168.1.1/g' /var/log/secure
sed -i 's/x.x.x.x/192.168.1.1/g' /var/log/message

3,对于btmp、wtmp那些二进制文件,会相对麻烦点,需要先把二进制转为普通文件,然后修改,修改后再转换为二进制,以wtmp为例。

utmpdump /var/log/wtmp > /var/log/wtmp.txt
vim /var/log/wtmp.txt
utmpdump -r < /var/log/wtmp.txt > /var/log/wtmp                                                                                                  
rm /var/log/wtmp.txt

隐藏登录日志

如果用SSH连接目标机时,默认的ssh直接连接,目标机在last或者who都可以看到记录,这里尝试如果带个终端的话,则不会有记录。


ssh test@192.168.10.10 /bin/bash

也可以通过T参数来指定不分配伪终端,提高连接传输效率,通过i来返回交互式shell。

ssh -T test@192.168.10.10 /bin/bash -i

中间件数据库日志

基本上中间件或者数据库的日志文件都会在var/log下以软件名去命名的一个文件夹下,访问日志通常叫access,错误日志通常叫error,例如常见的。

# apache
/var/log/apache2/access.log
/var/log/apache2/error.log
# nginx
/var/log/nginx/access.log
/var/log/nginx/error.log
# mysql
/var/log/mysql/error.log
# es
/var/log/elasticsearch/<cluster name>.log
# mongo
/var/log/mongodb/mongod.log
# postgresql
/var/log/postgresql/postgresql-<version>-main.log
/var/log/postgresql/postgresql-<version>-<database name>.log

还是老一套,删除、修改IP、删除部分记录,删除就不说了。

修改IP和系统日志方法类似:

sed -i 's/x.x.x.x/192.168.10.10/g' access.log

删除部分记录的话,思路是先通过grep取反把自己的敏感字剔除出去保存个新文件,然后将内容替换到日志文件中,如下示例。

cat /var/log/nginx/access.log | grep -v evil.php > tmp.log
cat tmp.log > /var/log/nginx/access.log/
rm tmp.log

时间修改

比如一些木马文件或其它文件想修改下时间,防止引起管理员注意,则可以使用touch命令修改,查看一个文件的时间可以用stat命令。

stat test.txt

这个命令会显示三个时间,一个最近访问时间,一个最近修改时间,一个最近改动时间,访问时间用a参数可以改,修改时间用m参数可以改,改动时间不可以改,因为改动时间是系统自动更新的,包含了元数据的改动。

touch -a -d "2023-02-02 11:10:20.000235123" test.txt
touch -m -d "2023-02-02 12:10:20.010242137" test.txt

d参数指定你要修改的时间,点后面是时间戳,随意输入就可以,不要为一串零,容易引起怀疑。

至于那个不能修改的改动时间,非要改动,思路就是先改动系统时间,然后修改目标文件,最后再恢复系统时间即可。

# date修改系统时间,s参数指定时间
date -s "20230201 16:43:53"
# touch还是用来修改文件时间,r是指定参考文件(任意指定就可以),意思是把指定的参考文件时间赋给目标文件
touch -r ~/.bashrc test.txt
# hwclock是指的硬件中的时间,hctosys意思是把硬件时间同步给系统
hwclock --hctosys

文件擦除

比如机器已经上线,木马文件不需要了,想要删除,但是担心目标利用一些恢复软件来进行恢复,则可以去彻底删除一个文件,所谓彻底删除,也就是通过多次对一个文件进行写入擦除操作,导致无法还原已有的内容。

相关命令很多,这里就介绍下shred吧。

shred示例如下:

shred -f -u -z -v -n 8 test.txt

f是强制的意思,即使文件只读没权限也会进行覆盖。u在覆盖完成后进行删除。z是覆盖完成后进行一次填充操作,避免文件存在信息泄露。v是显示执行的详细信息。n指覆盖次数,上面例子是8次。

posted @ 2023-07-20 15:11  寻梦99  阅读(4509)  评论(0)    收藏  举报