Unix系统记录用户登录及操作日志配置——Linux篇 Korn Shell
2020-5-30 09:7:36 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

Korn Shell


配置思路和之前没有什么不同,只是有以下几点不同:

  1. 不同shell环境下的语法不同,具体写的时候要注意;

  2. 文中条件分支判断使用了case语句;

  3. bash下的PROMPT_COMMAND变量在ksh下是不支持的,因此需要找到可以代替的,在这里使用了trap命令;

  4. bash下获取输入命令使用了history命令,在ksh里不用了(不确定是否能用,时间太久已忘了),使用量的内置的命令fc来获取;

最终的配置如下:

修改/etc/profile文件。 

 vi /etc/profile   

在文件最后加入以下内容,将其中的192.168.100.90替换为资源的IP。

# Add content in /etc/profile# Log ksh user login and command historycase "$0" in-ksh)      up_client_ip=`(who am i|cut -d\( -f2|cut -d\) -f1)`      if ( test -z "`echo $up_client_ip|awk '($1 ~/[0-9]+.[0-9]+.[0-9]+.[0-9]+/)'`")               then               up_client_ip=`awk'/'$up_client_ip'/ {print $1}' /etc/hosts`      fi      up_nowtime=`(date -d now +"%Y-%m-%d %T")`      logger -p user.notice -- class=\"HOST_LOGIN\"type=\"2\" time=\"$up_nowtime\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.100.90\" primary_user=\"\" secondary_user=\"$(whoami)\" operation=\"\" content=\"login successful\" authen_status=\"Success\" log_level=\"1\" session_id=\"$$\" 2>/dev/null;      trap 'command=`(fc -ln -0)`;logger -p user.notice --class=\"HOST_COMMAND\" type=\"3\" time=\"$(date -d now+"%Y-%m-%d %T")\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.100.90\" primary_user=\"\" secondary_user=\"$(whoami)\" operation=\"$command\" content=\"command\" authen_status=\"\" log_level=\"1\" sessionid=\"$$\" 2>/dev/null' DEBUG;      readonly up_client_ip      readonly up_nowtime    ;;*)    ;;esac

其中操作日志的记录配置如下:

trap 'command=`(fc -ln -0)`;logger -p user.notice --class=\"HOST_COMMAND\" type=\"3\" time=\"$(date -d now+"%Y-%m-%d %T")\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.100.90\" primary_user=\"\" secondary_user=\"$(whoami)\" operation=\"$command\" content=\"command\" authen_status=\"\" log_level=\"1\" sessionid=\"$$\" 2>/dev/null' DEBUG;

trap命令


对于trap命令,官方释义如下:


语法格式如下:

格式:trap "commands" signals

当shell接收到signals指定的信号时,执行commands命令。

我们需要在用户输入命令回车后执行commands,trap提供了一种信号DEBUG,可以在脚本执行时打印调试信息,正好符合我们的需求。我们的commands内容即为:

'command=`(fc -ln -0)`;logger -p user.notice --class=\"HOST_COMMAND\" type=\"3\" time=\"$(date -d now+"%Y-%m-%d %T")\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.100.90\" primary_user=\"\" secondary_user=\"$(whoami)\" operation=\"$command\" content=\"command\" authen_status=\"\" log_level=\"1\" sessionid=\"$$\" 2>/dev/null'

其中command=`(fc -ln -0)`;获取了命令值;然后使用logger产生日志,其中引用了command变量值。

fc命令


/usr/bin/fc

fc 实用程序用于列出、编辑或重新执行之前输入到交互式 sh 的命令。
注:
  1. 同登录日志一样,操作日志也需要考虑执行shell命令、su、su -切换后操作日志是否能记录的情况,Linux篇结束后统一发布测试的结果;

  2. 本文中我们选择了配置/etc/profile文件,bash中我们选择了/etc/bashrc文件,每个选择都是有理由的;

文章来源: https://mp.weixin.qq.com/s?__biz=MzI5NzAzMDg0NA==&mid=2650697976&idx=1&sn=077284556fe00b52f5ec9db55456b529&chksm=f4b1952bc3c61c3d0477d53d4e83173275dedce062ed8162cca69ac72a10bd21e0afbdc5a1f5&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh