今天我们来讲一下linux中有关用户登陆信息的一些知识。
首先我们来了解一下,一般的用户的登录信息所存放的位置。
一般来说,linux的用户登录信息存放在以下三个文件中:
utmp 详细路径 :/var/run/utmp
记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记录系统启动时间;
wtmp 详细路径:/var/log/wtmp
记录当前正在登录和历史登录系统的用户信息,默认由last命令查看;
使用last命令进行查看
btmp 详细路径:/var/log/btmp
记录失败的登录尝试信息,默认由lastb命令查看。
使用lastb进行查看
这三个文件都是二进制文件,所以使用普通的cat命令是无法查看和浏览的,只能使用固定的命令。
这三个文件的文件结构是完全相同的,都是由/usr/include/bits/utmp.h文件定义了这三个文件的结构体。
默认情况下文件的日志信息会通过logrotate日志管理工具定期清理。logrotate的配置文件是/etc/logrotate.conf,此处是logrotate的缺省设置,通常不需要对它进行修改。日志文件的轮循压缩等设置存放在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下,它会覆盖缺省设置。
介绍完文件我们现在来介绍刚刚所提及到的命令了。
这些命令是查看刚刚介绍的三个文件。
这些命令分别是:
lastlog、last、lastb、ac、who、w、users、utmpdump 。
1、lastlog
列出所有用户最近登录的信息,或者指定用户的最近登录信息。lastlog引用的是/var/log/lastlog文件中的信息,包括login-name、port、last login time
2、last
刚刚查看wtmp文件用到的指令,
列出当前和曾经登入系统的用户信息,输出的内容包括:用户名、终端位置、登录源信息、开始时间、结束时间、持续时间。注意最后一行输出的是wtmp文件起始记录的时间。
3、lastb
刚刚查看btmp文件用到的指令,
列出失败尝试的登录信息,和last命令功能完全相同。
4、ac
输出所有用户总的连接时间,默认单位是小时。由于ac是基于wtmp统计的,所以修改或者删除wtmp文件都会使ac的结果受影响。
默认系统是没有该命令的,所以需要apt-get来安装一下:
apt-get install acct
5、who
查看当前登入系统的用户信息。who命令比较强大,它既可以读取utmp文件也可以读取wtmp文件,默认没有指定FILE参数时,who查询的是utmp的内容。当然可以指定FILE参数,比如who -aH /var/log/wtmp,则此时查看的是wtmp文件。
我们通过who --help 来查看一下who的使用文档:
root@iZ2ze459u86is1pi87eprdZ:/var/log# who --help
Usage: who [OPTION]... [ FILE | ARG1 ARG2 ]
Print information about users who are currently logged in.
-a, --all same as -b -d --login -p -r -t -T -u
-b, --boot time of last system boot
-d, --dead print dead processes
-H, --heading print line of column headings
--ips print ips instead of hostnames. with --lookup,
canonicalizes based on stored IP, if available,
rather than stored hostname
-l, --login print system login processes
--lookup attempt to canonicalize hostnames via DNS
-m only hostname and user associated with stdin
-p, --process print active processes spawned by init
-q, --count all login names and number of users logged on
-r, --runlevel print current runlevel
-s, --short print only name, line, and time (default)
-t, --time print last system clock change
-T, -w, --mesg add user's message status as +, - or ?
-u, --users list users logged in
--message same as -T
--writable same as -T
--help display this help and exit
--version output version information and exit
6、w
查看当前登入系统的用户信息及用户当前的进程(而who命令只能看用户不能看进程)。该命令能查看的信息包括字系统当前时间,系统运行时间,登陆系统用户总数及系统1、5、10分钟内的平均负载信息。后面的信息是用户,终端,登录源,login time,idle time,JCPU,PCPU,当前执行的进程等。
w的信息来自两个文件:用户登录信息来自/var/run/utmp,进程信息来自/proc/.
7、users
显示当前正在登入统的用户名。语法是users [OPTION]... [FILE]。如果未指定FILE参数则默认读取的是/var/run/utmp,当然也可以指定通用相关文件/var/log/wtmp,此时输出的就不是当前用户了。
8、utmpdump
utmpdump用于转储二进制日志文件到文本格式的文件以便查看,同时也可以修改二进制文件!!包括/var/run/utmp、/var/log/wtmp、/var/log/btmp。
语法为:utmpdump [options] [filename]。修改文件实际就可以抹除系统记录,所以一定要设置好权限,防止非法入侵。
显示/var/run/utmp的内容:
utmpdump /var/run/utmp
同样要显示/var/log/wtmp的内容:
utmpdump /var/log/wtmp | tail -15
最后,对于/var/log/btmp:
utmpdump /var/log/btmp
我们还可以使用utmpdump来做一些其他的事情,比如:
检查某个特定用户(如root)的登录次数。
utmpdump /var/log/wtmp | grep root
统计来自IP地址112.64.153.121的登录次数
utmpdump /var/log/wtmp | grep112.64.153.121
今天的分享就到这里了,下期继续吧!