Linux记录用户操作记录

如下方法在centos5.x系统中通过.

在/etc/profile文件里加入如下语句:
1)使用script记录UID大于500的用户的所有操作,类似屏幕截图 

    1. if [ $UID -gt 500 ]
    2. then
    3.     exec /usr/bin/script -t 2>/tmp/$USER-$UID-$(date +%Y%m%d%H%M).date -a -f -q /tmp/$USER-$UID-$(date +%Y%m%d%H%M).log
    4. fi
    script 可以把当前用户的所有键盘操作、屏幕输出以及错误信息等等保存到一个文件中;
    使用exec可以防止用户自行退出script,当输入exit退出时,会连当前的终端一起关掉;exec还有执行完当前命令就退出当前shell的特性,也就是说,要把exec命令放在profile最后一行执行,因为exec后面的命令都执行不到。
    为什么执行了上边的命令没有退出当前shell呢,因为script命令一直在持续运行,也就是说在持续记录用户的操作,并不是说执行一次马上就结束了。
    -a  用append的形式在文件中追加,若不适用此参数,同名的记录文件会被覆盖,而且没有提示;
    -f Flush output after each write;
    -q be quiet
    -t 生成时间文件,有了这个文件,可以使用  scriptreplay 命令回放;
    如: scriptreplay username-500-201111262310.date username-500-20111126231.log
       要注意“时间文件”和“记录文件”的顺序,不要颠倒了;
    要保证该文件当前登录用户可写,不然无法正常记录!
    因为文件是实时更新的,如果tail、more自己的记录文件,会形成很有意思的无限循环。

2)使用环境变量记录用户操作
在/etc/profile和/etc/bashrc中添加以下命令,并 source 一次
  1. export PROMPT_COMMAND='{ date "+[ %Y%m%d %H:%M:%S `whoami` ] `history 1 | { read x cmd; echo "$cmd"; }`"; } >> /var/log/command.log'
这条命令会把登录用户所有按回车输入的内容都记录到command.log文件中去,即使是敲错的命令也一样;
要保证command.log文件所有用户都可写,使用chattr命令防止用户自行修改记录,
  1. chattr +a /var/log/command.log
再配合logrotate定期进行log轮替。
  1. /var/log/command.log{

  2.  prerotate
  3.        /usr/bin/chattr -a /var/log/command.log
  4.  endscript
  5.     compress
  6.     delaycompress
  7.     notifempty
  8.     rotate 1000
  9.     size 10M
  10.  postrotate
  11.         /usr/bin/chattr +a /var/log/command.log
  12.  endscript
  13. }
解释一下PROMPT_COMMAND环境变量,这个变量会优先于 PS1 变量执行,屏幕上 显示完PROMPT_COMMAND定义的内容后,才会显示 PS1 提示符的内容;也就是说,按回车后,先输出 PROMPT_COMMAND 的内容到屏幕上,然后才输出 PS1 ;上边给出的命令因为做了重定向,所以不会输出到屏幕上,而是command.log文件中。

注:在 /etc/bashrc 文件中有对 PROMPT_COMMAND 变量进行赋值, 会把/etc/profile中添加的PROMPT_COMMAND 变量值覆盖掉(为什么会覆盖掉请参考我以前的一篇文章 《bash中profile等配置文件执行顺序”》), 所以要在 /etc/bashrc 中的最后也添加以上命令。因为在  ~/.bashrc 中有一个判断并调用/etc/bashrc的内容,为了保证肯定能够执行到这个命令,要在/etc/profile和/etc/bashrc中都添加以上命令。

3)其实可以根据自己的需要输出不同的内容,比如下边的命令,记录了更加详细的信息。自己编写时,需要注意命令中的单双引号嵌套,很容易因为引号的配对问题出现命令不能通过的问题。
  1. export PROMPT_COMMAND='{ date +"%Y%m%d %H:%M:%S [$(who am i | tr -s [[:blank:]] | cut -d" " -f1,2,5)-> ${USER}] $( history 1 | { read num cmd; echo ${cmd}; })" ; } >> /var/log/command.log'

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux可以通过以下几种方式查看操作记录: 1. 使用命令history查看当前用户的历史命令记录。 2. 使用命令last查看系统登录和注销记录。 3. 使用命令lastlog查看系统所有用户的最近登录记录。 4. 使用命令w查看当前登录用户信息和活动情况。 5. 使用命令who查看当前登录系统的用户信息。 6. 使用命令ps查看系统进程信息,包括进程的启动时间和运行时间。 7. 使用命令top查看系统资源使用情况,包括CPU、内存、磁盘等。 以上是Linux查看操作记录的几种常用方式,可以根据需要选择相应的命令进行查看。 ### 回答2: 在Linux操作系统中,查看操作记录可以通过多种方式实现,这里主要介绍以下几种方法: 1. last 命令 last 命令可以查看最近登录者的记录,包括登录时间、注销时间、登录IP等信息。命令格式为: last 输出结果如下示例: root pts/0 192.168.1.1 Mon Sep 20 10:23 still logged in root pts/0 192.168.1.2 Fri Sep 17 16:17 - 16:35 (00:18) root tty1 Fri Sep 17 15:30 - 16:37 (01:07) reboot system boot 5.10.0-8-amd64 Fri Sep 17 15:29 still running 2. lastlog 命令 lastlog 命令可以查看所有用户上一次登录的时间和登录IP,命令格式为: lastlog 输出结果如下示例: Username Port From Latest root **Never logged in** daemon **Never logged in** bin **Never logged in** sys **Never logged in** sync **Never logged in** games **Never logged in** man **Never logged in** lp **Never logged in** mail **Never logged in** news **Never logged in** 3. history 命令 history 命令可以查看当前用户的所有命令执行记录,命令格式为: history 输出结果如下示例: 1. ls 2. cd / 3. vi test.txt 4. kill -9 12345 5. shutdown -h now 4. 查看日志文件 Linux系统记录所有系统操作和各应用程序的日志,可以通过查看日志文件的方式来查看操作记录。日志文件一般存储在 /var/log 目录下,常见的日志文件有: /var/log/messages:所有系统消息,包括系统启动、关闭、应用程序日志等。 /var/log/auth.log:所有认证(登录认证、权限认证)相关的消息。 /var/log/syslog:通用的系统日志,记录操作系统级别的信息。 /var/log/secure:包括认证信息和所有与安全相关的记录。 以上是几种常用的查看操作记录的方法,用户可以根据需要选择合适的方式进行操作记录查看。 ### 回答3: Linux系统提供了多种方式来查看操作记录,主要包括以下几种方式: 1. command命令:command命令可以记录历史命令的时间、用户和命令内容等信息,在Linux系统上使用非常广泛。命令如下: ```bash history ``` 这个命令将显示当前用户的历史命令记录,可以使用grep命令按关键字查询相关命令记录。 2. wtmp和btmp日志文件:wtmp和btmp日志文件分别记录用户登录和登出的信息,可以使用命令last和lastb查看。 ```bash last ``` 这个命令将显示所有用户的登录记录,可以使用选项-u和-t来查询特定用户和时间范围内的登录记录。 3. /var/log/auth.log文件:auth.log文件包含了与系统身份验证相关的信息,包括SSH登录和su切换等信息。 ```bash cat /var/log/auth.log | grep "SSH" ``` 这个命令将显示所有SSH登录的记录,可以使用grep命令按关键字查询相关记录。 4. auditd服务:auditd是Linux系统上的一个进程,可以记录所有特定系统调用的操作、文件访问和进程创建等事件,并将其记录到系统的audit日志文件中。 ```bash auditctl -a exit,always -F arch=b64 -S execve ``` 这个命令将启动一个规则,记录所有的execve系统调用,并将相关记录写入audit日志文件中。 以上是几种常用的Linux查看操作记录的方式,选择哪种方式取决于具体的需求。如果需要更详细的操作记录,可以考虑使用日志管理工具或监控软件来实时监控系统的操作行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值