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 不是 ...
随机推荐
- MySQL--表操作(innodb表字段数据类型、约束条件)、sql_mode操作
一.创建表的完整语法 #[]内的可有可无,即创建表时字段名和类型是必须填写的,宽度与约束条件是可选择填写的.create table 表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度 ...
- web缓存服务器varnish-4.1.6的部署及配置详解
web缓存服务器varnish-4.1.6的部署及配置详解 1.安装varnish4.1.6安装依赖 yum install -y autoconf automake jemalloc-devel l ...
- nginx 403 forbidden
2018年3月9日14:11:59 总结一下: 1. 查看目录或者文件是否是可读可执行 2. 查看nginx配置的server -> location -> index指令, 看其列出的入 ...
- Razor视图基本语法
<!--Razor C#--> @for (int i = 0; i < 10; i++) { <baobao>good</baobao> } < ...
- unit test
1) State vs Behaviour Verificationhttps://manas.tech/blog/2009/04/30/state-vs-behaviour-verification ...
- ASP.NET Core之NLog使用
1.新建ASP.NET Core项目 1.1选择项目 1.2选择.Net版本 2. 添加NLog插件 2.1 通过Nuget安装 2.2下载相关的插件 3.修改NLog配置文件 3.1添加NLog配置 ...
- HTTP连接池
<context:property-placeholder location="classpath:conf/framework/httpclient.properties" ...
- jqGrid后台交互样例
schoolManageGrid = $("#jqGrid").jqGrid({ url : ctx.path+"/api/school/querySchools&quo ...
- 初学python之路-day14
一.带参装饰器 # 通常,装饰器为被装饰的函数添加新功能,需要外界的参数 # -- outer参数固定一个,就是func # -- inner参数固定同被装饰的函数,也不能添加新参数 # -- 可以借 ...
- iOS 横屏模态进入下一级界面, 竖屏退出
首先 Deployment Info 设置 除了 Upside Down 都勾选 然后,在AppDelegate.h 文件中 添加属性 @property(nonatomic,assign)NSI ...