有人可以建议我使用任何命令来查看哪些用户在UNIX中访问了特定文件。我知道历史命令列出了先前触发的命令,但它并没有包括"谁"解雇了它,并在什么时间。
答案 0 :(得分:2)
将Linux auditd
用于特定文件
http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html
示例强>
假设我有一个文件(让它为$HOME/an_important_file.txt
),我想看一下它的所有访问。首先为它设置审核规则:
$ sudo auditctl -w $PWD/an_important_file.txt -p warx -k watch_an_important_file
并检查了审核日志:
$ sudo ausearch -k watch_an_important_file
----
time->Thu May 12 10:54:16 2016
type=CONFIG_CHANGE msg=audit(1463039656.913:278): auid=500 ses=1 subj=unconfined_u:unconfined_r:auditctl_t:s0-s0:c0.c1023 op="add rule" key="watch_an_important_file" list=4 res=1
然后我用触摸($ touch $HOME/an_important_file.txt
)修改了文件。我再次检查审核日志:
$ sudo ausearch -k watch_an_important_file
----
time->Thu May 12 10:54:16 2016
type=CONFIG_CHANGE msg=audit(1463039656.913:278): auid=500 ses=1 subj=unconfined_u:unconfined_r:auditctl_t:s0-s0:c0.c1023 op="add rule" key="watch_an_important_file" list=4 res=1
----
time->Thu May 12 10:56:42 2016
type=PATH msg=audit(1463039802.788:291): item=1 name=(null) inode=535849 dev=fd:02 mode=0100664 ouid=500 ogid=500 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0 nametype=NORMAL
type=PATH msg=audit(1463039802.788:291): item=0 name="/home/Sergey.Kurenkov/" inode=524289 dev=fd:02 mode=040700 ouid=500 ogid=500 rdev=00:00 obj=unconfined_u:object_r:user_home_dir_t:s0 nametype=PARENT
type=CWD msg=audit(1463039802.788:291): cwd="/usr"
type=SYSCALL msg=audit(1463039802.788:291): arch=c000003e syscall=2 success=yes exit=3 a0=7fff6d986060 a1=941 a2=1b6 a3=3149b8f14c items=2 ppid=4852 pid=10022 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts1 ses=1 comm="touch" exe="/bin/touch" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="watch_an_important_file"
答案 1 :(得分:1)
您可以在~/.bashrc
中添加以下这些行,以便现在history
命令
以[<user> 2016-05-11 14:04:33] <command>
格式记录命令。以下命令适用于所有打开的交互式终端。
export HISTFILESIZE=100000000
export HISTSIZE=100000000
# First two are optional, they need to be changed only if the default 500
# lines history logging needs to be changed
export HISTTIMEFORMAT="[$USER %F %T] "
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
原始answer已完成修改以存储$USER
答案 2 :(得分:0)
您可以使用stat
查找上次访问文件的时间。只有在文件系统存储{1}} inode时,才可以执行此操作。但这并没有告诉你谁访问了该文件。
您可以使用atime
列出当前使用文件的进程。但是,如果您的用户没有足够的权限,您可能看不到其他用户的进程(如果您是root用户,则可以看到所有进程)。
通常,lsof
的输出是从执行用户的历史文件生成的。因此,您可以假设由history
打印的命令全部由同一用户执行。在某些shell中,您可以设置一个选项,以便将执行时间与命令一起存储。然后你也可以用history
来得到这个时间。这可能取决于您使用的shell。
您可以阅读history
,stat
,lsof
或bash
(或者zsh
?)的手册页,以了解有关此内容的更多信息。< / p>