Centos7监控-谁动了我的服务器

说到系统目前最为流行的操作系统有很多:windows、linux、unix、ibm的专属操作系统等。同样在对应系统上运行的服务的安全性来说也相当重要,一般企业对linux上运行的服务会设置不同用户的操作权限,这样也能降低服务的风险,如果要对你用户在服务器上的操作做log查询也可以,可以使用系统再带的history进行操作记录查询,当然这个也是有一个局限性的,为什么这么说,因为通过history只能查看到用户在某个时间通过vim命令编辑过某个文件,对于编辑的文件内容确看不到,那有没有什么办法可以看见呢,答案是一定的,具体怎么实现呢?在这个时候我们就可以借助脚本来实现对用户的登陆及操作做记录操作,这样就当用户登陆及对服务的操作过程全部做一个监控,就类似现在的监控录像一样,当然脚本最后也会通过一定的设置来对登陆的用户进行强制断开,保证服务的安全性。具体操作见下:今天我们使用的是centos7来完成测试的,此次演示的过程中忽略的了centos7的安装步骤。

首先运行该命令

Vim /etc/profile

然后添加以下脚本内容

USER_IP=$(who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g')
log_dir=/var/log/.hist
if [ -z "$USER_IP" ]; then
USER_IP="localhost"
Fi
currentdir="$log_dir/$(whoami)_$USER_IP_$(date +%Y-%m-%d_%Hh%Mm%Ss)"
mkdir -p $currentdir
script -q -t 2>$currentdir/timing.log -a $currentdir/output.session
"/etc/profile" 86L, 2060C

clip_p_w_picpath002

cd /var/log/

进入var/log指定目录

mkdir .hist

创建目录.hist

chmod 777 .hist

赋予最大权限

cd /var/log/.hist/

进入日志目录

ls 查看目录文件

cd root_2015-06-08_11h00m59sxxxxxxx

生成的日志文件目录

进入日志目录后运行ls此时会多出两个文件

timing.log output.session

运行脚本查看操作内容

scriptreplay timing.log output.session

注以上操作需要用户操作完后通过exit退出后才会生成log,所以我们还需要对用户的登陆进行控制,通过任务计划对登陆的用户进行强制断开

Yum install -y git
Cd myscripts/
Ls
rm -rf update
Make ttyecho
Yum install gcc,gcc-c++
Cp ttyecho /sbin/
Cd myscript/
Vim kinallon.sh

添加以下代码

#!/bin/bash
while :
allconn=$(w | awk '{print $2}' |sed '1,2d')
do
if [ -z "$allconn" ]; then
break
fi
for conn in $allconn
do
ttyecho -n /dev/$conn exit
done
done

clip_p_w_picpath003

Chmod +x kinallon.shconn.sh
Cat kinallon.sh

clip_p_w_picpath005

Vim /usr/sbin/kinalloconal.sh

添加的代码跟上面一样

#!/bin/bash
while :
allconn=$(w | grep output | awk '{print $2}')
do
if [ -z "$allconn" ]; then
break
fi
for conn in $allconn
do
/usr/sbin/ttyecho -n /dev/$conn exit
done
done

clip_p_w_picpath007

如果要断开用户其实按照下面脚本

Vim /etc/sbin/kiikcon.sh
#!/bin/bash
while :
allconn=$(w | grep output | awk '{print $2}')
do
if [ -z "$allconn" ]; then
break
fi
for conn in $allconn
do
/usr/sbin/ttyecho -n /dev/$conn exit
done
done
while :
do
allusrconn=$(w | awk '{print $2}' | sed '1, 2d')
if [ -z "$allusrconn" ]; then
break
fi
for usr in $allusrconn
do
/usr/sbin/ttyecho -n /dev/$usr exit
done
done

clip_p_w_picpath009

Cp killnnn.sh /user/sbin
Crontab -e

15:05执行一次

clip_p_w_picpath005[1]

Crontal -l

查看任务计划

clip_p_w_picpath011

等任务计划执行后,用户的ssh登陆及本地回话都会终端,我们再次登陆后可以查看log;

查看log需要我们进入

 cd /var/log/.hist/

然后cd root_2015….xxx.xxx.x.x日期的log目录

clip_p_w_picpath013

clip_p_w_picpath014

criptreplay timing.log output.session

这样就回放用户的操作整个过程了。所以使用起来还是比较方便的

最后我们再说说任务计划

clip_p_w_picpath016

任务执行时间的格式为:分 时 日 月 周;所以我们可以定义为以下格式

*/5 * * * * /usr/sbin/killallconn.sh >/root/kill.log 2>&1

每5分钟运行一次(取值范围0-59)

0 */1 * * * /usr/sbin/killallconn.sh >/root/kill.log 2>&1

每1小时运行一次(取值范围1-23)

0 0 */1 * * /usr/sbin/killallconn.sh >/root/kill.log 2>&1

每1天运行一次(取值范围1-31)

0 0 0 */1 * /usr/sbin/killallconn.sh >/root/kill.log 2>&1

每一个月运行一次(取值范围1-12)

0 0 0 0 */1 /usr/sbin/killallconn.sh >/root/kill.log 2>&1

每一周运行一次(取值范围0-6)

clip_p_w_picpath018