监控该用户 执行了 哪些指令 。 管理员能够看到 用户 所有的 操作指令。--------通过 -------》 .bash_history
history 命令记录的机制:
.bash_history --》 内存
|
新的运行指令------》 内存添加 -----》 history -c history -a
|
logout 退出
|
内存的修改 同步 到磁盘
示例 :zhang3
添加过程 :============
1、 test -f /home/zhang3/.bash_profile
echo 'PROMPT_COMMAND="history -a;readonly PROMPT_COMMAND" ; export PROMPT_COMMAND' >> /home/zhang3/.bash_profile
2、 chattr +i /home/zhang3/.bash_profile
3、 touch /home/zhang3/.bash_history
4、 chown zhang3 /home/zhang3/.bash_history
6、 charrt +a /home/zhang3/.bash_history
撤销 过程 :============
chattr -a /home/zhang3/.bash_history
chattr -i /home/zhang3/.bash_profile
sed -i '/PROMPT_COMMAND/{d}' /home/zhang3/.bash_profile
sed '/\<karl99\>/{d}' -i /root/user.list
降低脚本冗余度过程 ============
sed -i '{s#/home/\$name/\.bash_history#\$his#g}' /test/mon-user.sh
sed -i '{s#/home/\$name/\.bash_profile#\$pro#g}' /test/mon-user.sh
整理结构的过程 :=============
用 函数 来实现 某个 具体的 功能。
[function] fun1(){
cmd1
cmd2
[return 整数信号]
}
fun1
#调用函数 , 调用后 $? 取什么值
# 如何判定该函数是否执行成功? 如何取得函数的返回值。
# 如果没有专门 自定义 return ,则会将 函数的 最后一条执行 语句 的 $? 作为返回值。
成品参考 ========================================
[root@server-18 ~ ]# cat /test/mon-user.sh
#!/bin/bash
read -p "请输入要操作的用户名:" name
id $name >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "您输入的用户不存在..."
exit 1
fi
list=/root/user.list
his="/home/$name/.bash_history"
pro="/home/$name/.bash_profile"
touch $list
add(){
count=`grep "^\<$name\>$" $list | wc -l`
if [ $count -ne 0 ]
then
echo "$name 已经处于监控状态,不做任何操作..."
exit 2
fi
echo "正在实施监控..."
echo 'PROMPT_COMMAND="history -a;readonly PROMPT_COMMAND" ; export PROMPT_COMMAND' >> $pro
chattr +i $pro
test -f $his || touch $his
chown $name $his
chattr +a $his
echo "$name" >> $list
echo "$name 监控实施完成!"
}
del(){
count2=`grep "^\<$name\>$" $list | wc -l`
if [ $count2 -eq 0 ]
then
echo "$name 未处于监控状态,不做任何操作..."
exit 2
fi
echo "正在取消监控..."
chattr -a $his
chattr -i $pro
sed -i '/PROMPT_COMMAND/{d}' $pro
sed -i '/\<'$name'\>/{d}' $list
echo "$name 监控取消完成..."
}
read -p "添加监控请输入 [y] 取消监控请输入 [n] :" ans
if [ "$ans" == "y" ]
then
add
elif [ "$ans" == "n" ]
then
del
else
echo "请输入正确字符 y / n"
exit 1
fi