在CentOS系统上查看用户登录记录的方法
保留、维护和分析日志(如某个特定时期内发生过的,或正在发生的帐号事件),是Linux系统管理员最基础和最重要的任务之一。对于用户管理,检查用户的登入和登出日志(不管是失败的,还是成功的)可以让我们对任何潜在的安全隐患或未经授权使用系统的情况保持警惕。例如,工作时间之外或放假期间的来自未知IP地址或帐号的远程登录应当发出红色警报。在CentOS系统上,用户登录历史存储在以下这些文件中:
/var/run/utmp(用于记录当前打开的会话)被who和w工具用来记录当前有谁登录以及他们正在做什么,而uptime用来记录系统启动时间。
/var/log/wtmp (用于存储系统连接历史记录)被last工具用来记录最后登录的用户的列表。
/var/log/btmp(记录失败的登录尝试)被lastb工具用来记录最后失败的登录尝试的列表。
在本文中,我将介绍如何使用utmpdump,这个小程序来自sysvinit-tools包,可以用于转储二进制日志文件到文本格式的文件以便检查。此工具默认在CentOS 6和7系列上可用。utmpdump收集到的信息比先前提到过的工具的输出要更全面,这让它成为一个胜任该工作的很不错的工具。除此之外,utmpdump可以用于修改utmp或wtmp。如果你想要修复二进制日志中的任何损坏条目,它会很有用(LCTT 译注:我怎么觉得这像是做坏事的前奏?)。
Utmpdump的使用及其输出说明
正如我们之前提到的,这些日志文件,与我们大多数人熟悉的其它日志相比(如/var/log/messages,/var/log/cron,/var/log/maillog),是以二进制格式存储的,因而我们不能使用像less或more这样的文件命令来查看它们的内容。所以,utmpdump的出现拯救了世界。
为了要显示/var/run/utmp的内容,请运行以下命令:
代码如下:
# utmpdump /var/run/utmp
同样要显示/var/log/wtmp的内容:
代码如下:
# utmpdump /var/log/wtmp | tail -15[code]
最后,对于/var/log/btmp:
[code]# utmpdump /var/log/btmp
正如你所能看到的,三种情况下的输出结果是一样的,除了utmp和btmp的记录是按时间排序,而wtmp的顺序是颠倒的这个原因外(LCTT 译注:此处原文有误,实际上都是按照时间顺序排列的)。
每个日志行格式化成了多列,说明如下。第一个字段显示了会话识别符,而第二个字段则是PID。第三个字段可以是以下值:--(表示运行等级改变或系统重启),bw(启动守候进程),数字(表示TTY编号),或者字符和数字(表示伪终端)。第四个字段可以为空或用户名、重启或运行级别。第五个字段是主TTY或PTY(伪终端),如果此信息可获得的话。第六个字段是远程主机名(如果是本地登录,该字段为空,运行级别信息除外,它会返回内核版本)。第七个字段是远程系统的IP地址(如果是本地登录,该字段为0.0.0.0)。如果没有提供DNS解析,第六和第七字段会显示相同的信息(远程系统的IP地址)。最后一个(第八)字段指明了该记录创建的日期和时间。
Utmpdump使用样例
下面提供了一些utmpdump的简单使用情况。
1、 检查8月18日到9月17日之间某个特定用户(如gacanepa)的登录次数。
代码如下:
# utmpdump /var/log/wtmp | grep gacanepa
如果你需要回顾先前日期的登录信息,你可以检查/var/log下的wtmp-YYYYMMDD(或wtmp.[1...N])和btmp-YYYYMMDD(或btmp.[1...N])文件,这些是由logrotate生成的旧wtmp和btmp的归档文件。
2、 统计来自IP地址192.168.0.101的登录次数。
代码如下:
# utmpdump /var/log/wtmp | grep 192.168.0.101
3、 显示失败的登录尝试。
代码如下:
# utmpdump /var/log/btmp
在/var/log/btmp输出中,每个日志行都与一个失败的登录尝试相关(如使用不正确的密码,或者一个不存在的用户ID)。上面图片中高亮部分显示了使用不存在的用户ID登录,这警告你有人尝试猜测常用帐号名来闯入系统。这在使用tty1的情况下是个极其严重的问题,因为这意味着某人对你机器上的终端具有访问权限(该检查一下谁拿到了进入你数据中心的钥匙了,也许吧?)
4、 显示每个用户会话的登入和登出信息
代码如下:
# utmpdump /var/log/wtmp
在/var/logwtmp中,一次新的登录事件的特征是,第一个字段为‘7’,第三个字段是一个终端编号(或伪终端id),第四个字段为用户名。相关的登出事件会在第一个字段显示‘8’,第二个字段显示与登录一样的PID,而终端编号字段空白。例如,仔细观察上面图片中PID 1463的行。
在 [Fri Sep 19 11:57:40 2014 ART],TTY1上显示登录提示符。
在 [Fri Sep 19 12:04:21 2014 ART],用户 root 登入。
在 [Fri Sep 19 12:07:24 2014 ART],用户 root 登出。
旁注:第四个字段的LOGIN意味着出现了一次登录到第五字段指定的终端的提示。
到目前为止,我介绍一些有点琐碎的例子。你可以将utmpdump和其它一些文本处理工具,如awk、sed、grep或cut组合,来产生过滤和加强的输出。
例如,你可以使用以下命令来列出某个特定用户(如gacanepa)的所有登录事件,并发送输出结果到.csv文件,它可以用像LibreOffice Calc或Microsoft Excel之类的文字或工作簿应用程序打开查看。让我们只显示PID、用户名、IP地址和时间戳:
代码如下:
# utmpdump /var/log/wtmp | grep -E "/[7].*gacanepa" | awk -v OFS="," 'BEGIN {FS="] "}; {print $2,$4,$7,$8}' | sed -e 's//[//g' -e 's//]//g'
就像上面图片中三个高亮区域描绘的那样,过滤逻辑操作是由三个管道步骤组成的。第一步用于查找由用户gacanepa触发的登录事件([7]);第二步和第三部用于选择期望的字段,移除utmpdump输出的方括号并设置输出字段分隔符为逗号。
当然,如果你想要在以后打开来看,你需要重定向上面的命令输出到文件(添加“[文件名].csv”到命令后面)。
在更为复杂的例子中,如果你想要知道在特定时间内哪些用户(在/etc/passwd中列出)没有登录,你可以从/etc/passwd中提取用户名,然后运行grep命令来获取/var/log/wtmp输出中对应用户的列表。就像你看到的那样,有着无限可能。
在进行总结之前,让我们简要地展示一下utmpdump的另外一种使用情况:修改utmp或wtmp。由于这些都是二进制日志文件,你不能像编辑文件一样来编辑它们。取而代之是,你可以将其内容输出成为文本格式,并修改文本输出内容,然后将修改后的内容导入回二进制日志中。如下:
代码如下:
# utmpdump /var/log/utmp tmp_output
使用文本编辑器修改 tmp_output
# utmpdump -r tmp_output /var/log/utmp
这在你想要移除或修复二进制日志中的任何伪造条目时很有用。
下面小结一下,utmpdump从utmp、wtmp和btmp日志文件或轮循的旧归档文件来读取详细的登录事件,来补充如who,w,uptime,last,lastb之类的标准工具的不足,这也使得它成为一个很棒的工具。
绛旓細2. 浣跨敤 `who` 鍛戒护鏌ョ湅鐧诲綍鐢ㄦ埛淇℃伅 `who` 鍛戒护鍒楀嚭褰撳墠鐧诲綍绯荤粺鐨勭敤鎴峰悕绉般佺櫥褰曠殑缁堢锛坱ty锛夈佹棩鏈熸椂闂翠互鍙婁富鏈哄湴鍧銆傝嫢鎯充粎鍒楀嚭鐢ㄦ埛鍚嶏紝鍙互浣跨敤 `cut` 鍛戒护缁撳悎 `who` 鍛戒护銆傜ず渚嬭緭鍑猴細```john jason ramesh ```3. 浣跨敤 `whoami` 鍛戒护鏌ョ湅褰撳墠鐧诲綍鐢ㄦ埛 `whoami` 鍛戒护鏄剧ず褰撳墠鐧诲綍鐨勭敤鎴峰悕锛...
绛旓細渚嬪锛屼綘鍙互浣跨敤浠ヤ笅鍛戒护鏉ュ垪鍑烘煇涓壒瀹鐢ㄦ埛(濡俫acanepa)鐨勬墍鏈夌櫥褰曚簨浠讹紝骞跺彂閫佽緭鍑虹粨鏋滃埌.csv鏂囦欢锛屽畠鍙互鐢ㄥ儚LibreOffice Calc鎴朚icrosoft Excel涔嬬被鐨勬枃瀛楁垨宸ヤ綔绨垮簲鐢ㄧ▼搴忔墦寮鏌ョ湅銆傝鎴戜滑鍙樉绀篜ID銆佺敤鎴峰悕銆両P鍦板潃鍜屾椂闂存埑锛氫唬鐮佸涓:utmpdump /var/log/wtmp | grep -E "/[7].*gacanepa...
绛旓細鏌ョ湅鐢ㄦ埛鐧诲綍璁板綍鐨勬柟娉曟湁寰堝锛屾瘡绉嶆柟娉曟槸浠庝笉鍚岃搴︽潵灞曠ず鐧诲綍淇℃伅鐨勩傝繖閲屼粙缁嶄笁绉嶏細lastlog鍛戒护锛屾煡鐪嬫墍鏈夌敤鎴凤紙鍖呮嫭绯荤粺鐢ㄦ埛锛夋渶鍚庝竴娆$櫥褰曟椂闂銆傛紨绀哄鍥撅細last鍛戒护鏌ョ湅鐢ㄦ埛鏈杩戠櫥褰曘侀鍑虹瓑鎿嶄綔鐨勫叿浣撴椂闂淬傛紨绀哄鍥撅細who鍛戒护鏌ョ湅褰撳墠鍦ㄧ嚎鐢ㄦ埛锛屼笂娆$櫥闄嗘椂闂淬傛紨绀哄鍥撅細
绛旓細鐢╨ast鍛戒护 CentOS绯荤粺涓璴ast鍛戒护鐨勪綔鐢ㄦ槸鏄剧ず杩戞湡鐢ㄦ埛鎴栫粓绔殑鐧诲綍鎯呭喌锛屽畠鐨勪娇鐢ㄦ潈闄愭槸鎵鏈夌敤鎴銆傞氳繃last鍛戒护鏌ョ湅璇ョ▼搴忕殑log锛岀鐞嗗憳鍙互鑾风煡璋佹浘缁忔垨浼佸浘杩炴帴绯荤粺銆傚懡浠ゆ牸寮忓涓嬶細last [鈥擱] [鈥攏][锛峟 file][锛峵 tty] [鈥攈 鑺傜偣][锛岻 鈥擨P][鈥1][锛峺][ID]
绛旓細杩欎釜鍛戒护鏄痩ast銆傚畠瀵逛簬杩借釜闈炲父鏈夌敤銆俓x0d\x0a\x0d\x0alast鏄剧ず鐨勬槸鑷/var/log/wtmp鏂囦欢鍒涘缓璧锋墍鏈夌櫥褰(鍜岀櫥鍑)鐨鐢ㄦ埛銆傝繖涓枃浠舵槸浜岃繘鍒舵枃浠讹紝瀹冧笉鑳借鏂囨湰缂栬緫鍣ㄦ祻瑙堬紝姣斿vi銆丣oe鎴栬呭叾浠栬蒋浠躲傝繖鏄潪甯告湁鐢ㄧ殑锛屽洜涓虹敤鎴(鎴栬卹oot)涓嶈兘鍍忎粬浠笇鏈涚殑閭f牱淇敼杩欎釜鏂囦欢銆俓x0d\x0alast浼氱粰鍑...
绛旓細1.鏌ョ湅鏃ュ織鏂囦欢 Linux鏌ョ湅/var/log/wtmp鏂囦欢鏌ョ湅鍙枒IP鐧婚檰 last -f /var/log/wtmp 璇ユ棩蹇楁枃浠舵案涔呰褰曟瘡涓敤鎴风櫥褰曘佹敞閿鍙婄郴缁熺殑鍚姩銆佸仠鏈虹殑浜嬩欢銆傚洜姝ら殢鐫绯荤粺姝e父杩愯鏃堕棿鐨勫鍔狅紝璇ユ枃浠剁殑澶у皬涔熶細瓒婃潵瓒婂ぇ锛屽鍔犵殑閫熷害鍙栧喅浜绯荤粺鐢ㄦ埛鐧诲綍鐨勬鏁般傝鏃ュ織鏂囦欢鍙互鐢ㄦ潵鏌ョ湅鐢ㄦ埛鐨勭櫥褰曡褰曪紝last鍛戒护灏...
绛旓細鐢ㄦ埛鍒楄〃鏂囦欢锛/etc/passwd 鐢ㄦ埛缁勫垪琛ㄦ枃浠讹細/etc/group 鏌ョ湅绯荤粺涓湁鍝簺鐢ㄦ埛锛歝ut -d : -f 1 /etc/passwd 鏌ョ湅鍙互鐧诲綍绯荤粺鐨勭敤鎴凤細cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1 鏌ョ湅鐢ㄦ埛鎿嶄綔锛歸鍛戒护(闇瑕乺oot鏉冮檺)鏌ョ湅鏌愪竴鐢ㄦ埛锛歸 鐢ㄦ埛鍚 鏌ョ湅鐧诲綍鐢ㄦ埛锛歸ho 鏌ョ湅鐢ㄦ埛鐧...
绛旓細1鎵ц鍛戒护 last 2鏌ョ湅鏃ュ織 vim /var/log/secure
绛旓細涓婇潰鐨勬搷浣滃彲浠鐪嬪埌,user1鐨勫熀鏈粍涓簎ser1,闄勫姞缁勪负stu,閭d箞鐜板湪鍙兘鍒犻櫎stu,鑰屼笉鑳界洿鎺ュ垹闄ょ粍user1,鍥犱负user1缁勬槸涓涓熀鏈粍,瑕佹兂鍒犻櫎user1,蹇呴』鍏堝垹闄ser1鐢ㄦ埛,鍐嶅垹闄ser1缁,鑰宻tu缁勪笉鏄竴涓熀鏈粍,鍙槸user1鍜寀ser2鐨勯檮鍔犵粍,鎵浠ュ彲浠ョ洿鎺ュ垹闄ゃ [root@localhost~]#groupdeluser1//灏濊瘯鍒犻櫎user1鐢ㄦ埛缁,...
绛旓細涓锛岃繘鍏centos 6.6绯荤粺锛屼緷娆$偣鍑汇愮郴缁熴-銆愬叧浜庢湰璁$畻鏈恒戯紝鏌ョ湅褰撳墠绯荤粺鐨勭増鏈備簩锛岄紶鏍囩Щ鍔ㄥ埌妗岄潰鍙充笂瑙掞紝鐐瑰嚮鐢ㄦ埛鍚嶏紙鎴戠殑鐢ㄦ埛鍚嶏細qiangge锛夛紝鍐嶇偣鍑汇愬垏鎹㈢敤鎴枫戙備笁锛屽嚭鐜板垏鎹㈢敤鎴风晫闈紝閫変腑銆愬叾浠栥戙傚洓锛岀劧鍚庤緭鍏ョ敤鎴峰悕銆恟oot銆戯紝骞剁偣鍑汇愮櫥褰曘戞寜閽備簲锛岃緭鍏ョ敤鎴穜oot鐨勫瘑鐮侊紝鐐瑰嚮銆愮櫥褰曘...