说到系统目前最为流行的操作系统有很多:windows、linux、unix、ibm的专属操作系统等。同样在对应系统上运行的服务的安全性来说也相当重要,一般企业对linux上运行的服务会设置不同用户的操作权限,这样也能降低服务的风险,如果要对你用户在服务器上的操作做log查询也可以,可以使用系统再带的history进行操作记录查询,当然这个也是有一个局限性的,为什么这么说,因为通过history只能查看到用户在某个时间通过vim命令编辑过某个文件,对于编辑的文件内容确看不到,那有没有什么办法可以看见呢,答案是一定的,具体怎么实现呢?在这个时候我们就可以借助脚本来实现对用户的登陆及操作做记录操作,这样就当用户登陆及对服务的操作过程全部做一个监控,就类似现在的监控录像一样,当然脚本最后也会通过一定的设置来对登陆的用户进行强制断开,保证服务的安全性。具体操作见下:今天我们使用的是centos7来完成测试的,此次演示的过程中忽略的了centos7的安装步骤。
首先运行该命令
1
|
Vim /etc/profile
|
然后添加以下脚本内容
1
2
3
4
5
6
7
8
9
|
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
|
1
|
cd /var/
log
/
|
进入var/log指定目录
1
|
mkdir .hist
|
创建目录.hist
1
|
chmod 777 .hist
|
赋予最大权限
1
|
cd /var/
log
/.hist/
|
进入日志目录
ls 查看目录文件
1
|
cd root_2015-06-08_11h00m59sxxxxxxx
|
生成的日志文件目录
进入日志目录后运行ls此时会多出两个文件
1
|
timing.
log
output.session
|
运行脚本查看操作内容
1
|
scriptreplay timing.
log
output.session
|
注以上操作需要用户操作完后通过exit退出后才会生成log,所以我们还需要对用户的登陆进行控制,通过任务计划对登陆的用户进行强制断开
1
2
3
4
5
6
7
8
|
Yum install -y git
Cd myscripts/
Ls
rm -rf update
Make ttyecho
Yum install gcc,gcc-c++
Cp ttyecho /sbin/
Cd myscript/
|
1
|
Vim kinallon.sh
|
添加以下代码
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/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
|
1
2
|
Chmod +x kinallon.shconn.sh
Cat kinallon.sh
|
1
|
Vim /usr/sbin/kinalloconal.sh
|
添加的代码跟上面一样
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/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
|
如果要断开用户其实按照下面脚本
1
|
Vim /etc/sbin/kiikcon.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/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
|
1
2
|
Cp killnnn.sh /user/sbin
Crontab -e
|
15:05执行一次
1
|
Crontal -l
|
查看任务计划
等任务计划执行后,用户的ssh登陆及本地回话都会终端,我们再次登陆后可以查看log;
查看log需要我们进入
1
|
cd /var/
log
/.hist/
|
然后cd root_2015….xxx.xxx.x.x日期的log目录
1
|
criptreplay timing.
log
output.session
|
这样就回放用户的操作整个过程了。所以使用起来还是比较方便的
最后我们再说说任务计划
任务执行时间的格式为:分 时 日 月 周;所以我们可以定义为以下格式
1
|
*/5 * * * * /usr/sbin/killallconn.sh >/root/kill.
log
2>&1
|
每5分钟运行一次(取值范围0-59)
1
|
0 */1 * * * /usr/sbin/killallconn.sh >/root/kill.
log
2>&1
|
每1小时运行一次(取值范围1-23)
1
|
0 0 */1 * * /usr/sbin/killallconn.sh >/root/kill.
log
2>&1
|
每1天运行一次(取值范围1-31)
1
|
0 0 0 */1 * /usr/sbin/killallconn.sh >/root/kill.
log
2>&1
|
每一个月运行一次(取值范围1-12)
1
|
0 0 0 0 */1 /usr/sbin/killallconn.sh >/root/kill.
log
2>&1
|
每一周运行一次(取值范围0-6)
本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1660850,如需转载请自行联系原作者