长亭百川云 - 文章详情

Unix系统记录用户登录及操作日志配置——Linux篇 Korn Shell

安全实践

49

2024-07-13

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 history``case "$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文件,每个选择都是有理由的;

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2