记录linux系统下所有用户的操作信息
在日常运维中,我们需要清楚服务器上每个用户登录后都做了哪些操作,我们需要记录下每个用户的操作命令。
下面的内容设置可以实现在Linux下所有用户,不管是远程还是本地登陆,在本机的所有操作都会记录下来,并生成包含“用户/IP/时间”的文件存放在指定位置。
PS1="`whoami`@`hostname`:"'[$PWD]'
history
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 /tmp/history ]
then
mkdir /tmp/history
chmod 777 /tmp/history
fi
if [ ! -d /tmp/history/${LOGNAME} ]
then
mkdir /tmp/history/${LOGNAME}
chmod 300 /tmp/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H%M%S"`
export HISTFILE="/tmp/history/${LOGNAME}/${USER_IP} history.$DT"
chmod 600 /tmp/history/${LOGNAME}/*history* 2>/dev/null
将上面的内容追加到/etc/profile文件里,source /etc/profile生效后。切换到一个路径后,显示的是全路径,并且终端显示中没有#符号或$符号.
root@elk-node1:[/root]cd /usr/local/src/
root@elk-node1:[/usr/local/src]
上面的显示跟默认的linux终端显示不太习惯。现在要求终端里切换路径后,只显示当前的简介路径,不显示全部路径,并且后面带上#或$符号,那么只需要将上面的第一行PS1参数后面的设置改下:
1)只显示当前简介路径,不显示全路径,显示#号
PS1="[\u@\h \W]"#
2)只显示当前简介路径,不显示全路径,显示$号
PS1="[\u@\h \W]\$"
这里,我选择第(1)种带#号显示,生效后的终端显示内容和linux默认显示的一样,如下:
[root@elk-node1]#cd /usr/local/
[root@elk-node1 local]#pwd #显示的只是当前简介路径local,而不是全路径/usr/local
/usr/local
[root@elk-node1 local]#
这样,各个用户的操作记录的日志路径如下:
[root@elk-node1 history]#pwd
/tmp/history
[root@elk-node1 history]#ll
total 4
d-wx------. 2 root root 82 Oct 21 19:44 root
d-wx------. 2 wangshibo wangshibo 4096 Oct 21 20:00 wangshibo
[root@elk-node1 history]#cd wangshibo/
[root@elk-node1 wangshibo]#ll
total 12
-rw-------. 1 wangshibo wangshibo 74 Oct 21 19:11 gateway history.20161021_190706
-rw-------. 1 wangshibo wangshibo 22 Oct 21 19:28 gateway history.20161021_192848
-rw-------. 1 wangshibo wangshibo 23 Oct 21 20:00 gateway history.20161021_200045
[root@elk-node1 wangshibo]#tail -f gateway\ history.20161021_200045
touch test
rm -f test
---------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------
还有一种方案:
这个方案会在每个用户退出登录 时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器
操作如下:
把下面内容添加到/etc/profile文件底部
[root@elk-node1 ~]# vim /etc/profile
........
#设置history格式
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| \
awk '{print $NF}'|sed -e 's/[()]//g'`] "
#登录时清空当前缓存
echo "" > .bash_history
#记录shell执行的每一条命令
export PROMPT_COMMAND='\
if [ -z "$OLD_PWD" ];then
export OLD_PWD=$PWD;
fi;
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)";
fi ;
export LAST_CMD="$(history 1)";
export OLD_PWD=$PWD;'
[root@elk-node1 ~]# sudo /etc/profile
测试:
分别使用wangshibo,guohuihui账号登陆这台服务器进行一些操作。
然后发现/var/log/message日志文件中已经记录了这两个用户的各自操作了~
[root@elk-node2 ~]# tail -20 /var/log/messages
Oct 24 14:16:04 elk-node2 root_shell_cmd: [/root] 321 [2016-10-24 14:16:04] [gateway] tail -100 /var/log/messages
Oct 24 14:19:09 elk-node2 root_shell_cmd: [/root] 322 [2016-10-24 14:18:51] [gateway] vim /etc/profile
Oct 24 14:19:12 elk-node2 su: (to wangshibo) root on pts/0
Oct 24 14:19:25 elk-node2 root_shell_cmd: [/root] 315 [2016-10-24 14:19:23] [gateway] tail -f /var/log/messages
Oct 24 14:19:40 elk-node2 wangshibo_shell_cmd: [/home/wangshibo] 2 [2016-10-24 14:19:40] [gateway] echo "123456" > test
Oct 24 14:19:43 elk-node2 wangshibo_shell_cmd: [/home/wangshibo] 3 [2016-10-24 14:19:43] [gateway] uptime
Oct 24 14:19:45 elk-node2 wangshibo_shell_cmd: [/home/wangshibo] 4 [2016-10-24 14:19:45] [gateway] who
Oct 24 14:19:47 elk-node2 wangshibo_shell_cmd: [/home/wangshibo] 5 [2016-10-24 14:19:47] [gateway] last
Oct 24 14:19:48 elk-node2 root_shell_cmd: [/root] 323 [2016-10-24 14:19:12] [gateway] su - wangshibo
Oct 24 14:19:52 elk-node2 su: (to guohuihui) root on pts/0
Oct 24 14:20:00 elk-node2 guohuihui_shell_cmd: [/usr/local/src] 2 [2016-10-24 14:20:00] [gateway] ls
Oct 24 14:20:03 elk-node2 guohuihui_shell_cmd: [/usr/local/src] 3 [2016-10-24 14:20:03] [gateway] date
Oct 24 14:20:11 elk-node2 guohuihui_shell_cmd: [/usr/local/src] 4 [2016-10-24 14:20:11] [gateway] free -m
Oct 24 14:20:12 elk-node2 root_shell_cmd: [/root] 324 [2016-10-24 14:19:52] [gateway] su - guohuihui
Oct 24 14:20:23 elk-node2 root_shell_cmd: [/root] 316 [2016-10-24 14:20:18] [gateway] tail -f /etc/sudoers
Oct 24 14:20:30 elk-node2 root_shell_cmd: [/root] 317 [2016-10-24 14:20:24] [gateway] tail -f /var/log/messages
Oct 24 14:20:35 elk-node2 root_shell_cmd: [/root] 318 [2016-10-24 14:20:35] [gateway] tail -100 /var/log/messages
Oct 24 14:20:46 elk-node2 su: (to wangshibo) root on pts/0
Oct 24 14:23:42 elk-node2 root_shell_cmd: [/root] 325 [2016-10-24 14:20:46] [gateway] su - wangshibo
Oct 24 14:23:45 elk-node2 root_shell_cmd: [/root] 326 [2016-10-24 14:23:45] [gateway] cat /etc/profile
记录linux系统下所有用户的操作信息的更多相关文章
- linux系统下的用户文件句柄数限制
linux系统下的用户文件句柄数限制 文章来源:企鹅号 为什么要修改用户打开的文件数 系统默认单个进程可以打开1024个文件,对于一些应用如tomcat.oracle等,运行时经常open成千上万个文 ...
- 05 Linux系统下的用户以及用户权限管理(权限管理介绍、用户管理、常见命令介绍)
这一节我们介绍Linux的用户以及权限管理的前半段,包括:1.权限管理介绍: 2.用户管理: 3.常见命令 权限管理介绍 权限管理: 为了访问计算机资源,我们需要对其进行授权才能访问,根据什么东西来进 ...
- (转)linux 系统下虚拟用户的作用
原文:http://blog.csdn.net/luoshao20120430/article/details/16900653 http://blog.csdn.net/u01 ...
- linux系统下root用户和普通用户的时区不一致
1. 发现这个问题是在root下执行 date -R 和 普通用户下执行 date -R,发现时区不一致 2. 在一些linux机器下,发现是一致的 3. 什么原因呢?找了半天,最后发现 时区一致的机 ...
- Linux系统下超级用户密码的修改
1)重启系统:在虚拟机刚启动界面,不停地按上下键,停止系统的自动引导(界面底部有提示) 2) 按 e 进入编辑模式 3) 编辑内容如下:完成后按Ctrl+x (具体编辑内容为下图:删除倒数第三行 ...
- 【Linux 命令】Linux系统下强制用户下线——who,pkill
[日期]2014年11月18日 [平台]Centos 6.5 [工具]who pkill [步骤] 1)准备工作 以root身份登录. 2)执行who命令,查看有哪些用户已登录到当前主机
- Linux系统下用户与组的管理
Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户: ...
- 如何记录linux终端下的操作日志
如何记录linux终端下的操作日志 在linux终端下,为方便检查操作中可能出现的错误,以及避免屏幕滚屏的限制,我们可以把操作日志记录下来.常用的工具有 screen,script,以及tee等,通过 ...
- Linux系统下授权MySQL账户访问指定数据库和数据库操作
Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全 ...
随机推荐
- GTD桌面2.0
在以前实践了一个GTD桌面,当时称为1.0版本,当时的效果是这样的: 2015年更换一点设备,把GTD桌面升级一下,就称为2.0吧.直接上图: 可以发现显示器由以前的1台又变回2台,原以为1台大显示器 ...
- 第一个JSP程序
本文介绍如何写出第一个JSP程序 1.配置服务器 (1)在eclipse中选择Server视图,(ps:很多童鞋说找不到Server,那是因为eclipse的版本问题,请下载JEE版本的eclipse ...
- 推导大O阶方法
用大写O()来体现算法时间复杂度的记法,我们称之为大O阶记法. O(1)叫做常数阶:O(n)叫做线性阶:O(n^2)叫做平方阶. 1.用常数1取代运行时间中的所有加法常数. 2.在修改后的运行次数函 ...
- CAS实现单点登入(sso)经典教程
本教程我已按照步骤实现,不过要深入了解单点登入还需要进一步的学习,掌握其中的精髓. 一.简介 1.cas是有耶鲁大学研发的单点登录服务器 2.本教材所用环境 Tomcat7.2 JDK6 CAS Se ...
- iOS 通过二进制判断图片类型
+ (NSString *)typeForImageData:(NSData *)data { uint8_t c; [data getBytes:&c length:1]; switch ( ...
- iOS网络-05-AFNetwoking原理及常用操作
AFN的六大模块 NSURLConnection,主要对NSURLConnection进行了进一步的封装,包含以下核心的类: AFURLConnectionOperation AFHTTPReques ...
- XCode中#pragma的使用
为了能够快速定位到代码的目标位置,可以使用#pragma:
- win7操作技巧
Q : 打开文件夹默认最大化A :随便打开一个文件夹 鼠标移动到左上角 然后点击鼠标左键 选择“最大化” 后关闭 之后每次打开就是最大化了
- js 字符串转 数字
<html> <body> <script language="javascript"> var a = "0.11"; v ...
- SpringMVC4 + Spring + MyBatis3 基于注解的最简配置
本文使用最新版本(4.1.5)的springmvc+spring+mybatis,采用最间的配置方式来进行搭建. 1. web.xml 我们知道springmvc是基于Servlet: Dispatc ...