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 不是 ...
随机推荐
- Linux自动人机交互expect
exp_test.sh文件 #!/bin/bash/expect ## exp_test.sh set timeout -; spawn ssh localhost; expect { "( ...
- [Linux]PHP-FPM与NGINX的两种通讯方式
一.通过监听TCP端口通讯 php-fpm.d/www.conf ; The address on which to accept FastCGI requests. ; Valid syntaxes ...
- Windows服务启动进程----Cjwdev.WindowsApi.dll
windows服务下无法启动外部程序 做一个windows服务监听服务,涉及到windows服务启动外部程序的一个过程,但是调试测试发现,无法简单的用process.start()这种方法, 原因是在 ...
- Oauth2.0 QQ&微信&微博实现第三方登陆
一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...
- Oracle中如何查询CLOB字段类型的内容
注:本文来源于:<Oracle中如何查询CLOB字段类型的内容> 语法 select * from table_name where dbms_lob.instr(字段名(clod类型), ...
- python垃圾回收机制:引用计数 VS js垃圾回收机制:标记清除
js垃圾回收机制:标记清除 Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理 当变量进入环境时,将这个变量标记为"进入 ...
- SpringCloud路由(网关)
springcloud网关接口就类似于转发 搭建路由网关项目(ZuulDemo) 1.创建pom.xml <project xmlns="http://maven.apache.org ...
- 《剑指offer》 二进制中1的个数
本题来自<剑指offer> 二进制中1的个数 题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: 两种思路: 第一种:对n进行左移,检测最后一位是否为1,但考 ...
- noip 初赛复习重点知识点
一.进制转化 将k进制数转化为十进制数: 设k进制数为(abcd)k,则对应十进制数为 (小数同理,乘k的负幂次) 将十进制数转成k进制数: 设十进制数为x: t1=x/k,t2=x mod k t1 ...
- CentOS7+mysql(yum)
1.现在centos上默认是没有yum源的,yum安装的是 MariaDB.所以我们需要自己先配置yum源.配置yum源步骤如下: 下载yum源:wget 'https://dev.mysql.com ...