Linux 命令行输入了密码等信息,清理Linux痕迹方法指南

**暴力省事直接删除** 首先是比较暴力省事的操作,直接清除当前用户bash历史记录,可以直接echo空进去。 ``` echo "" > ~/.bash_history ``` 然后history的话,可以通过c参数直接删除。 ``` history -c ``` **设置bashrc,命令前加空格运行则不记录** 再有就是设置不记录,给bashrc设置ignoreboth,则命令前加空格不会被记录,且不影响运行。 ``` echo HISTCONTROL=ignorespace >> ~/.bashrc source ~/.bashrc ``` **手动删除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 ``` **通过history删除部分记录** history可以通过d参数删除单条记录,具体删除哪行,写哪行的行号就可以。 ``` history -d 10 ``` 注意history删除的话也是删除的缓存内容,所以并不会同步到bash_history,如果要同步,需要通过w参数进行写入。 ``` history -w ``` 所以不管是编辑bash_history文件删除了部分命令,还是说通过history -c删除了部分命令,都一定要进行同步处理,保证删除干净。 **通过set +-o来禁用history** 通过+o参数可以禁用history记录功能,-o取消禁用,中间命令不会记录,如果ignoreboth开启的话,set前也可以加空格,否则set +o这条会被记录。 ``` set +o history whoami set -o history ``` **设置HISTSIZE=0 && HISTFILESIZE=0** 还有一种就是设置HISTSIZE环境变量,可以通过echo $HISTSIZE查看值,意思是bash最多会在内存中保留多少条,0就是0条,也就是不记录,HISTFILESIZE表示当历史记录达到XXX条时,会将最早的记录写入 .bash_history文件,并从内存中删除。 直接运行以下命令即可,注意运行后history没有记录了,但是不会影响bash_history。 ``` HISTSIZE=0 && HISTFILESIZE=0 ``` 该命令只会对当前终端生效,如果想每次打开命令行都设置为0不记录,可以把它们添加到bashrc中。 **直接杀掉当前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 [email protected] /bin/bash ``` 也可以通过T参数来指定不分配伪终端,提高连接传输效率,通过i来返回交互式shell。 ``` ssh -T [email protected] /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/2192.168.1.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 "2024-02-02 11:10:20.000235123" test.txt touch -m -d "2024-02-02 12:10:20.010242137" test.txt ``` d参数指定你要修改的时间,点后面是时间戳,随意输入就可以,不要为一串零,容易引起怀疑。 至于那个不能修改的改动时间,非要改动,思路就是先改动系统时间,然后修改目标文件,最后再恢复系统时间即可。 ``` # date修改系统时间,s参数指定时间 date -s "20240201 16:43:53" # touch还是用来修改文件时间,r是指定参考文件(任意指定就可以),意思是把指定的参考文件时间赋给目标文件 touch -r ~/.bashrc test.txt # hwclock是指的硬件中的时间,hctosys意思是把硬件时间同步给系统 hwclock --hctosys ``` **文件擦除** 比如机器已经上线,木马文件不需要了,想要删除,但是担心目标利用一些恢复软件来进行恢复,则可以去彻底删除一个文件,所谓彻底删除,也就是通过多次对一个文件进行写入擦除操作,导致无法还原已有的内容。 shred示例如下: ``` shred -f -u -z -v -n 8 test.txt ``` f是强制的意思,即使文件只读没权限也会进行覆盖。u在覆盖完成后进行删除。z是覆盖完成后进行一次填充操作,避免文件存在信息泄露。v是显示执行的详细信息。n指覆盖次数,上面例子是8次。
我的笔记