zoukankan      html  css  js  c++  java
  • Linux 记录所有用户登录和操作的详细日志

    1、起因

    最近Linux服务器上一些文件呗篡改,想追查已经查不到记录了,所以得想个办法记录下所有用户的操作记录。

     

    一般大家通常会采用history来记录,但是history有个缺陷就是默认是1000行,当然你也可以vim /etc/profile将1000修改成1000000行,但是这只是比较笼统的做法,看不到详细的用户来源已经操作记录,比如来源ip地址、操作时间、操作用户等。

     

    所以我们不得不自己写代码来实现这样的功能。

    2、自动记录脚本

    编写脚本如下:

    history

    USER=`whoami`

    USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`

    if [ "$USER_IP" = "" ]; then

    USER_IP=`hostname`

    fi

    if [ ! -d /var/log/history ]; then

    mkdir /var/log/history

    chmod 777 /var/log/history

    fi

    if [ ! -d /var/log/history/${LOGNAME} ]; then

    mkdir /var/log/history/${LOGNAME}

    chmod 300 /var/log/history/${LOGNAME}

    fi

    export HISTSIZE=4096

    DT=`date +"%Y%m%d_%H:%M:%S"`

    export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"

    chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

    这个脚本需要放在/etc/profile文件的末尾。这里默认写了记录日志文件的根目录是:/var/log/history,这个目录需要初始化建立,然后通过“exportHISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"

    ”可以看到记录日志的路径是/var/log/history/${LOGNAME},所以这个目录也需要事先建立,有多少个用户,就要建立多少个目录,而且要把目录的使用权限赋予相对应的用户。

     

    而每次用户登录到退出都会产生以用户名、登录ip地址、操作时间为文件名的文件,文件里面包含本次用户的所有操作记录。

    3、建立初始化目录

    先去/home查看有多少个用户

    [root@azure_test_static1_11_35 history]# ll

    total 28

    drwxr-xr-x 2 adminuser adminuser 4096 Nov 17 21:53 adminuser

    drwxr-xr-x 2 fastdfs   fastdfs   4096 Nov 17 21:53 fastdfs

    drwxr-xr-x 2 loguser   loguser   4096 Nov 17 19:43 loguser

    drwxr-xr-x 2 nginx     nginx     4096 Nov 17 20:54 nginx

    d-wx------ 2 root      root      4096 Nov 17 21:53 root

    drwxr-xr-x 2 tomcat    tomcat    4096 Nov 17 19:42 tomcat

    drwxr-xr-x 2 zabbix    zabbix    4096 Nov 17 19:42 zabbix

    [root@azure_test_static1_11_35 history]#

    然后开始建立初始化目录

    [root@azure_test_static1_11_35 log]# mkdir /var/log/history/fastdfs

    [root@azure_test_static1_11_35 history]# chown fastdfs:fastdfs fastdfs -R

    [root@azure_test_static1_11_35 log]# mkdir /var/log/history/tomcat

    [root@azure_test_static1_11_35 log]# chown -R tomcat:tomcat /var/log/history/tomcat

    [root@azure_test_static1_11_35 log]# mkdir /var/log/history/zabbix

    [root@azure_test_static1_11_35 log]# chown -R zabbix:zabbix /var/log/history/zabbix

    [root@azure_test_static1_11_35 log]# mkdir /var/log/history/loguser

    [root@azure_test_static1_11_35 log]# chown -R loguser:loguser /var/log/history/loguser

    [root@azure_test_static1_11_35 log]# mkdir /var/log/history/adminuser

    [root@azure_test_static1_11_35 log]# chown -R adminuser:adminuser /var/log/history/adminuser

    4、用户登录验证

    用其中一个用户fastdfs登录进程操作

    [adminuser@azure_test_static1_11_35 ~]$ sudo -i

    [sudo] password for adminuser:

    [root@azure_test_static1_11_35 ~]# su - fastdfs

    [fastdfs@azure_test_static1_11_35 ~]$ cp test1.log test3.log

    [fastdfs@azure_test_static1_11_35 ~]$ echo "test 1"> test3.log

    [fastdfs@azure_test_static1_11_35 ~]$ echo "1" >> test3.log

    [fastdfs@azure_test_static1_11_35 ~]$ echo "2" >> test3.log

    [fastdfs@azure_test_static1_11_35 ~]$ echo "3" >> test3.log

    [fastdfs@azure_test_static1_11_35 ~]$ more test3.log

    test 1

    1

    2

    3

    [fastdfs@azure_test_static1_11_35 ~]$

    然后退出用户,重新登录进去日志目录/var/log/history/fastdfs/查看有最新的记录,一次用户登录到退出就会保存成一个日志文件记录:

    # 进入日志目录

    [root@azure_test_static1_11_35 fastdfs]# cd /var/log/history/fastdfs/

    # 查看有2个操作日志记录

    [root@azure_test_static1_11_35 fastdfs]# ll

    total 8

    -rw------- 1 fastdfs fastdfs  83 Nov 17 21:53 fastdfs@192.168.120.103_20161117_21:53:16

    -rw------- 1 fastdfs fastdfs 139 Nov 17 21:59 fastdfs@192.168.120.103_20161117_21:56:47

    # 打开当前的操作记录日志

    [root@azure_test_static1_11_35 fastdfs]# more fastdfs@192.168.120.103_20161117_21:56:47

    cp test1.log test3.log

    echo "test 1"> test3.log

    echo "1" >> test3.log

    echo "2" >> test3.log

    echo "3" >> test3.log

    more test3.log

    exit

    [root@azure_test_static1_11_35 fastdfs]#

    PS:可以看到记录的日志和我们的实际操作保持一致。证明我们要的功能实现了。

    参考文章:http://www.heminjie.com/system/linux/412.html

     

  • 相关阅读:
    双循环解决添加列表问题
    贪心算法
    隔板法发红包
    python小兵之时间模块
    开发规范
    python 小兵(12)模块1
    Linux系统
    刷题
    Socket
    栈和队列
  • 原文地址:https://www.cnblogs.com/augusite/p/10001446.html
Copyright © 2011-2022 走看看