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
Linux 记录所有用户登录和操作的详细日志的更多相关文章
- Centos记录所有用户登录和操作的详细日志
1.起因 最近Linux服务器上一些文件呗篡改,想追查已经查不到记录了,所以得想个办法记录下所有用户的操作记录. 一般大家通常会采用history来记录,但是history有个缺陷就是默认是1000行 ...
- 通过登入IP记录Linux所有用户登录所操作的日志
通过登入IP记录Linux所有用户登录所操作的日志 对于Linux用户操作记录一般通过命令history来查看历史记录,但是如果在由于误操作而删除了重要的数据的情况下,history命令就不会有什么作 ...
- linux查看ssh用户登录日志与操作日志
linux查看ssh用户登录日志与操作日志 2013-11-01转载 ssh用户登录日志 linux下登录日志在下面的目录里: 代码如下 复制代码 cd /var/log 查看ssh用户的登录日 ...
- linux 记录所有用户bash操作日志
记录所有用户登录系统的任何操作日志,以便有据可查. 1.编辑 /etc/profile文件. 1 # vim /etc/profil 2. 在其后添加如下内容 1 2 3 4 5 6 7 8 ...
- linux下MySQL安装登录及操作
linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-cl ...
- tail -fn 1000 test.log | grep '关键字' 按照时间段 sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log /var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件
Linux 6种日志查看方法,不会看日志会被鄙视的 2020-02-11阅读 7.3K0 作为一名后端程序员,和Linux打交道的地方很多,不会看Linux日志,非常容易受到来自同事和面试官的嘲讽 ...
- Linux如何设置用户登录超时(闲置时间)vi /etc/profile ... export TMOUT=900
Linux如何设置用户登录超时(闲置时间) 转载莫负寒夏ai 最后发布于2019-08-08 15:04:22 阅读数 1897 收藏 展开 1. 针对所有用户 # vi /etc/profile ...
- Ubuntu Linux启用root用户登录
Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样 ...
- MySQL 用户登录与操作执行
一个用户可以不登录进Mysql 数据库,由两方面的因数决定 1.你是谁:也就是mysql 数据库中记录的用户名和密码,在SQL Server数据库,中只要求说明你是谁就可以登录了,可是mysql 不是 ...
随机推荐
- html常用标签表单和表格等及css的简单入门
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringBoot中常见注解含义总结
@RestController @RestController被称为一个构造型(stereotype)注解.它为阅读代码的开发人员提供建议.对于Spring,该类扮演了一个特殊角色.它继承自@Cont ...
- tomcat占用cpu比较多
在Linux中当Tomcat启动后,我们只是去查看应用是否能够正常访问来判断Tomcat启动是否正常.一般情况下这样看是没有问题的,但是有时候我们会发现当Tomcat使用了一段时间后,开始出现CPU或 ...
- C#操作excel(多种方法比较)
1.用查询表的方式查询并show在数据集控件上. public static string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; D ...
- 体验go语言的风骚式编程
最近想搞搞后台开发,话说注意力就转移到了公司用的golang.用Go做微服务比较方便,或许是因为golang强悍的语法吧,看到go的语法,自己已被深深的吸引.关于学习后台如何选择可以参考<做后台 ...
- oracle导出序列的几种办法
oracle导出序列的几种办法 注:本文来源于<oracle导出序列的几种办法> 方法一: select 'create sequence ' ||sequence_name|| ' mi ...
- Ubuntu下Mongodb和Robo3T的安装与使用
Mongodb的安装:https://blog.csdn.net/Canhui_WANG/article/details/78995388 Robo3T的安装:https://www.jianshu. ...
- Cookie禁用了,Session还能用吗?原因详解
Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案.但为什么禁用Cookie就不能得到Session ...
- 补充的flask实例化参数以及信号
一.实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settin ...
- LeetCode(104):二叉树的最大深度
Easy! 题目描述: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null, ...