Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189589
  • 博文数量: 77
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-25 10:50
文章分类

全部博文(77)

文章存档

2018年(1)

2017年(3)

2016年(4)

2015年(4)

2014年(16)

2013年(7)

2012年(20)

2011年(22)

分类: LINUX

2012-09-19 17:51:09

为了防止用户滥用root等敏感帐号,并且便于管理上追踪相应的sudo活动造成的问题。简单的根据/etc/bashrc的功能实现了帐号活动记录和存档的功能。下面列出一些实现的主要步骤:
  • 首先,设置/etc/bashrc,在文件最后添加下列语句,用以建立帐号活动记录
    1. mkdir -p $HOME/.audit &>/dev/null
    2. export AUDIT_FILE=$HOME/.audit/$(who am i|awk '{printf("%s_%s_%s_%s.aud",$1,$2,$3,$4)}'|tr '/:' '-') &>/dev/null
    3. export PROMPT_COMMAND='(ts=`date "+[%Y%m%d %H:%M:%S]"` && cmd=$(echo ">>`history 1|{ read y x; echo -e "$x";}`<<@`who am i |awk \"{print \\$5}\"`") && lst_cmd=`tail -10 $AUDIT_FILE|grep "]"|tail -1|cut -d "]" -f 2-` && [[ "$lst_cmd" != "$cmd" ]] && echo "$ts$cmd") >> "$AUDIT_FILE"'
  • 然后,创建目录/usr/local/admin/,创建如下脚本audit.sh
    1. #!/bin/bash

    2. ################################################################################
    3. # Note:
    4. # Please add below lines into /etc/bashrc first
    5. # mkdir -p $HOME/.audit &>/dev/null
    6. # export AUDIT_FILE=$HOME/.audit/$(who am i|awk '{printf("%s_%s_%s_%s.aud",$1,$2,$3,$4)}'|tr '/:' '-') &>/dev/null
    7. # export PROMPT_COMMAND='(ts=`date "+[%Y%m%d %H:%M:%S]"` && cmd=$(echo ">>`history 1|{ read y x; echo -e "$x";}`<<@`who am i |awk \"{print \\$5}\"`") && lst_cmd=`tail -10 $AUDIT_FILE|grep "]"|tail -1|cut -d "]" -f 2-` && [[ "$lst_cmd" != "$cmd" ]] && echo "$ts$cmd") >> "$AUDIT_FILE"'
    8. ################################################################################

    9. ################################################################################
    10. #  Function Name:    HELP_USAGE
    11. #  Description:        Function to display the usage of the script
    12. #  Parameters:         None
    13. #  Return:            Help messages
    14. #  Called By:        Script Main Loop->Script Parameters' Handler
    15. #  History:            2012-SEP-17    Initial Edition                        DAMCOOL
    16. ################################################################################
    17. function help_usage(){
    18. cat <
    19. Usage: $PROGNAME [OPTION]
    20. Audit files maintenance functions according to /etc/bashrc settings

    21.   -a, --archive    Archive the audit logging files older than 7 days and compress
    22.                   the archive file of last month as well as delete the archive
    23.                   over a year 365 days.
    24.   -h, --help   Show current help message of the script usages

    25. Notes:

    26. Please Report Script Bugs to $AUTHOR_MAIL


    27. EOF
    28. exit 1
    29. }

    30. ################################################################################
    31. #  Function Name:    ARCHIVE_LOGGING
    32. #  Description:        Function to archive the audit logging files
    33. #  Parameters:         None
    34. #  Return:            None
    35. #  Called By:        Script Main Loop->Script Parameters' Handler
    36. #  History:            2012-SEP-17    Initial Edition                        DAMCOOL
    37. ################################################################################
    38. function archive_logging(){
    39.     local pwd_line
    40.     local user_id
    41.     local home_dir
    42.     local tar_files
    43.     local tar_file
    44.     for pwd_line in $(cat /etc/passwd); do
    45.         user_id=$(echo $pwd_line|awk -F ":" '{print $1}')
    46.         home_dir=$(echo $pwd_line|awk -F ":" '{print $6}')
    47.         if [ -d "$home_dir/.audit" ]; then
    48.             cd $home_dir/.audit
    49.             for tar_files in $(find -type f -name "*aud" -mtime +7 -exec basename {} \;); do
    50.                 tar_file="audit_"$(echo $tar_files|awk -F "_" '{print $3}'|cut -d "-" -f 1-2)".tar"
    51.                 [ -f "$tar_file" ] && tar -rf "$tar_file" $tar_files || tar -cf "$tar_file" $tar_files
    52.                 rm -f $tar_files &>/dev/null
    53.             done
    54.    
    55.             find -type f -name "*tar" -mtime +31 | xargs -i basename {} | xargs -i bzip2 -zq9 {} &>/dev/null
    56.            
    57.             find -type f -name "*bz2" -mtime +365 | xargs -i basename {} | xargs -i rm -f {} &>/dev/null
    58.            
    59.             chown $user_id.$user_id * &>/dev/null
    60.             chmod 644 * &>/dev/null
    61.         fi
    62.     done   
    63. }

    64. ################################################################################
    65. #  Function Name:    Script Main Loop
    66. #  History:            2012-SEP-16    Initial Edition                        DAMCOOL
    67. ################################################################################
    68. BASE_DIR=$(cd "$(dirname "$0")" && pwd)
    69. PROGNAME=$(basename "$0")
    70. AUTHOR_MAIL="xxxx@gmail.com"
    71. ACRCHIVE=0
    72. HELP=0
    73. [ $# -eq 0 ] && help_usage
    74. while [ $# -gt 0 ]
    75. do
    76.     case "$1" in
    77.     (-a)        ACRCHIVE=1;shift;break;;
    78.     (-h)        HELP=1;shift;break;;
    79.     (--archive)    ACRCHIVE=1;shift;break;;
    80.     (--help)    HELP=1;shift;break;;
    81.     (*)            echo "$PROGNAME: error - unrecognized option or parameter $1" 1>&2; HELP=1;break;;
    82.     esac
    83.     shift
    84. done
    85. [ $# -gt 0 ] && HELP=1
    86. [ $HELP -eq 1 ] && help_usage
    87. [ $ACRCHIVE -eq 1 ] && archive_logging && exit 0
  • 最后,创建如下cron job负责定期归档审计记录文件
    1. 0 0 * * * sh /usr/local/admin/audit.sh --archive

本文转载自:

阅读(892) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~