做技术不容得半点含糊,近来发现都对linux三个time不是很清楚,于是写篇简单的blog备忘。是基本得不能 再基本的东西了,所以一定要搞清楚。
atime access time :访问时间,文件被读取或执行时会改变
mtime modify time :修改时间,文件本身内容被修改时会改变
ctime change time :更改时间,文件的属性被修改时会改变,如修改文件的权限,文件属组,+ia属性等等。一般mtime改变了ctime就会同时改变(inode更改相关)。
注意ctime
ctime不是 create time 创建时间,linux不像windows下会保留文件被创建的时间,所以一个文件被修改后它的创建时间就没有了。
注意几处地方:
1.解压一个打包的文件,解压出来的文件的mtime是文件最后被修改的time,这个时候ctime却能表示这个文件被解包的时间,也就是在本机上被创建的时间(前提ctime没有被修改过),所以会看到mtime和ctime相差很大。
使用cp命令会修改源文件的三个time,想要保留原文件的时间属性可以使用-p选项,但是只能保留atime和mtime,ctime是一样会被改变的。
文件夹的三个time
经自己实践测试:文件夹的三个time取决与文件夹里面文件的三个time。任何一个文件的atime,mtime,ctime的改变都直接导致文件夹相应a、m、c time的改变。所以通过看用户home文件夹的time来判断用户的创建时间是不准确的。一个用户的登录,在home目录创建文件,和退出登录等动作都是会改变home目录的三个time的。
总结下linux没有办法能确定一个文件的创建时间,只能通过各种间接的办法去推测大概的时间。
linux推测用户创建时间的方法:(都是不准确)
同样的一个用户的创建时间也没有办法确定。可以用以下办法去推敲大概时间
0.查看/home/用户 目录的mtime(这个基本不靠谱,只有用户没有在自己主目录下创建过任何文件,和对/home/用户 下的任何文件做过更改时才行)
1.查看/etc/shadow文件中第三列,用户上次更改密码的时间,貌似是一个时间戳,要换算。(本人没有测试过,这个也只是能确定到用户上次更改密码的时间,当然大部分用户会在被创建是修改,之后不再修改。)
2.可以cat /var/log/secure 会有类似:Feb 10 10:53:06 dev useradd[3344]: new group: name=xxx, GID=503
日志看到(本人RHEL6.0测试是没有的,或许低版本有)
3.把系统的home目录挂载到ntfs的系统上查看创建时间(这个真不知道可行否,未测试)
以上讨论的是系统默认情况下的时候的办法,如果是出于安全审计加固的做法,完全可以以下办法来控制,比如
1.用户被创建的时候都需要从/Etc/skel/下复制文件,可以在这个文件下建一个我们自定义的隐藏文件,通常情况下这个文件不会再被修改,可以靠看这个文件的mtime来确定用户的创建时间
2.通过脚本审计/etc/passwd文件的行数来实现,只要passwd文件增加了行数就自己记录并mail管理员。
等其他办法。
阅读(1401) | 评论(1) | 转发(0) |