记一次服务器风波

前言

头一天晚上用VPS开Redis做一些实验,把防火墙关了,然后带有未授权,结果第二天晚上再连VPS的时候发现连不上,访问昨晚开的web页面,没了,初步怀疑服务器被日了,以前并没有怎么刻意接触一些服务器被日的应急措施,看来这次是被动学习一波了,过程中确实也学习到了很多linux的其他知识,收获还是不错的吧,这篇文章就是同步于夺回服务器的过程中写的

VPS:CentOS 8

修改ssh密码?

登进vultr后台,使用View Console连服务器,并点击send CTRL+ALT+DEL按钮,在linux中CTRL+ALT+DEL命令默认是重启操作,可以通过修改配置文件把这个命令关闭.

重启后,按ESC进入GRUB(想深入了解的可以进入https://wiki.ubuntu.org.cn/GRUB%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B学习),然后按e编辑第一个选项,找到以linux开头的内核行的ro关键字,并修改为rw init=/sysroot/bin/sh,然后点击CTRL+X就可以启动单用户模式了,接下来用chroot /sysroot就可以以root权限访问服务器了,本来到了这一步,接下来使用passwd就可以直接更改root密码,嗯…失败了,给的错误是authentication token manipulation error,此时觉得事情有些微妙,于是启动搜索引擎寻找处理方式

一种说法是这样的

1.报这样的错误是:密码:身份验证令牌操作错误,一般是密码文件的权限的问题,不过也有可能是根目录空间满。

用lsattr命令查看存放用户和密码的文件属性,发现有i选项:(i:不得任意更动文件或目录。)所以导致所有的用户都不能修改密码,因为没有权限允许。

2.我们需要用chattr命令将i权限撤销,然后再修改,就可以了

1
2
3
4
5
6
7
8
lsattr:命令用于显示文件属性
chattr:执行改变文件或目录的属性

使用 lsattr 命令来显示文件属性:
lsattr /etc/resolv.conf

用chattr命令防止系统中某个关键文件被修改:
chattr +i /etc/resolv.conf

我一开始直接用chattr命令,发现居然没有这个命令???然后yum install chattr -y一下,报错了failed to synchronize cache for repo 'AppStream',情况有点不对劲,毕竟我的ubuntu服务器和centos7虚拟机都是自带这个命令的,难道命令被删了?

那就先用lsattr看看情况,还好有这个命令,执行lsattr /etc/passwdlsattr /etc/shadow,文件属性中并没有i关键字,看来并不是这方面的问题

查询访问记录

修改密码陷入僵局,那就研究一下访问查询,看一下secure日志,emmmm不看不知道,原来几乎每秒都有人在扫我的ssh尝试连接,
以前还真没特意关注过这个文件

我开了一台配置一样的VPS,chattr命令是可以执行的,尝试直接passwd,修改密码的命令一切正常

通过查看新机的secure文件,确认了成功连接ssh的记录格式

ALWY6G87RXJ2NW51IZ2G%2P.png
但是我在老机子上搜索关键字Accepted,并没有任何的匹配,可能大概率,相关的信息都已经被删除了

查询资料后,知道了可以使用last命令,

1
2
3
4
5
6
7
last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]

  last作用是显示近期用户或终端的登录情况。通过last命令查看该程序的log,管理员可以获知谁曾经或者企图连接系统。

  执行last命令时,它会读取/var/log目录下名称为wtmp的文件,并把该文件记录的登录系统或终端的用户名单全部显示出来。默认显示wtmp的记录,btmp能显示的更详细,可以显示远程登录,例如ssh登录。

last -10 -f /var/log/btmp btmp存储的是登录错误的信息

使用last命令对比一下俩机子的情况后发现确实不太一样

看来对应的文件的相关信息也被删除了

尝试开启ssh

尝试开启ssh

89FJPMJ)G(J125EVGC1WSWT.png

失败了 换一种方式试试看

NNOEIHWD}9)MBXCQ62_9H76.png
还是不太行

直接进入/etc/ld.so.preload把那行so配置删了就没这报错了

6UIMVRKB0G6_%H@`$O1D9G.png

两种报错 尝试解决第一种

1
2
3
mknod /dev/null c 1 3

chmod 666 /dev/null

解决问题,成功启动ssh,发现还是连不上,ping一下,给了Destination Host Unreachable这个报错,这时候才反应过来,ifconfig一下,得,网卡炸了

顿悟

其实这时候我才反应过来,我一开始连接ssh失败的原因并不是密码被改了,而是22端口被关了,也确实,我从控制台登陆我的VPS的时候就发现了端口全关闭,现在想想也觉得诡异,要是真被人日了,把22端口关了那他不是自己也连接不了吗,真是后知后觉,让我一直以VPS被别人root为思路在解决问题,一开始就应该反应过来可能并不是被人日了,但是上述的一些记录的查询结果也确实奇怪

chroot

从控制台登陆,一直是以chroot的身份进行访问,虽然whoami的结果也是root,但是一些命令的使用会有一些诡异的错误,那就顺便研究一下什么是chroot吧

chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 /,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 / 位置。

chroot的好处

在经过 chroot 之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件,因此它带来的好处大致有以下3个:

增加了系统的安全性,限制了用户的权力;

在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。
建立一个与原系统隔离的系统目录结构,方便用户的开发;

使用 chroot 后,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以用来测试软件的静态编译以及一些与系统不相关的独立开发。
切换系统的根目录位置,引导 Linux 系统启动以及急救系统等。

chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。

mount

Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称之为“卸载”。

注意:“挂载点”的目录需要以下几个要求:

(1)目录事先存在,可以用mkdir命令新建目录;

(2)挂载点目录不可被其他进程使用到;

(3)挂载点下原有文件将被隐藏。

mount [-fnrsvw] [-t vfstype] [-o options] device dir

umount device

device:指明要挂载的设备;

(1) 设备文件:例如/dev/sda5

(2) 卷标:-L ‘LABEL’, 例如 -L ‘MYDATA’

(3) UUID, -U ‘UUID’:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e’

(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs

dir:挂载点

结束语

搞了半天,总之就是VPS的网卡炸了,也并没有找到原因,本来想发个邮件给vultr,但是这个vultr的发邮件功能有点毒,最后也懒得发了,弄到最后也算是半个乌龙吧,这篇文章可能内容有点杂乱,但是自己觉得整个过程还是挺有意思的,就记录下来了,不过倒确实提醒了自己,得找个时间学习一下取证和应急响应的相关知识了.至于VPS嘛,反正啥都没有,也懒得再研究了,直接销毁(

参考链接

https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/index.html

https://blog.csdn.net/daydayup654/article/details/78788310