在Linux系统中,有三个主要的日志子系统:
连接时间日志–由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和 utmp文件,使系统管理员能够跟踪谁在何时登录到系统。进程统计–由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。
错误日志–由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。 常用的日志文件如下:
access-log 记录HTTP/web的传输
acct/pacct 记录用户命令
aculog 记录MODEM的活动
btmp 记录失败的纪录
lastlog 记录最近几次成功登录的事件和最后一次不成功的登录
messages 从syslog中记录信息(有的链接到syslog文件)
sudolog 记录使用sudo发出的命令
sulog 记录使用su命令的使用
syslog 从syslog中记录信息(通常链接到messages文件)
utmp 记录当前登录的每个用户
wtmp 一个用户每次登录进入和退出时间的永久纪录
xferlog 记录FTP会话
utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键–保持用户登录进入和退出的纪录。有关当前登录用户的信息记录在文件utmp中;登录进入和退出纪录在文件wtmp中;最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在wtmp文件中。所有的纪录都包含时间戳。这些文件(lastlog通常不大)在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长,除非定期截取。许多系统以一天或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重新命名并循环使用wtmp文件。通常,wtmp在第一天结束后命名为wtmp.1;第二天后wtmp.1变为wtmp.2等等,直到wtmp. 7。
每次有一个用户登录时,login程序在文件lastlog中察看用户的UID。如果找到了,则把用户上次登录、退出时间和主机名写到标准输出中,然后login程序在lastlog中纪录新的登录时间。在新的lastlog纪录写入后,utmp文件打开并插入用户的utmp纪录。该纪录一直用到用户登录退出时删除。utmp文件被各种命令文件使用,包括who、w、users和finger。
下一步,login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时,具有更新时间戳的同一utmp纪录附加到文件中。wtmp文件被程序last和ac使用。
[root@localhost ~]# who
root :0 2017-08-04 16:26
root pts/0 2017-08-04 13:52 (:0.0)
lockey pts/1 2017-08-04 06:32 (172.25.254.36)
第一列是用户名,
第二列是连接的终端,tty表示显示器,pts表示远程连接,
第三列是登陆时间
[root@localhost ~]# w
07:46:35 up 2 days, 15:35, 6 users, load average: 0.03, 0.07, 0.02
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root :0 Wed16 ?xdm? 35:59 0.26s /opt/gnome/bin/gnome-session
root pts/0 Thu13 21:12m 0.07s 0.49s gnome-terminal --working-direct
lockey pts/1 06:32 0.00s 0.49s 0.00s sshd: lockey [priv]
users 表示当前系统登陆用户总数为6。
LOAD AVERAGE 与后面的数字一起表示系统在过去1,5,10分钟内的负载程度,数值越小,系统负载越轻。
从第二行开始构成一个表格,共有8个栏目,分别显示各个用户正在做的事情及该用户所占用的系统资料。
USER:显示登陆用户帐号名。用户重复登陆,该帐号也会重复出现。
TTY:用户登陆所用的终端。
FROM:显示用户在何处登陆系统。
LOGIN@:是LOGIN AT的意思,表示登陆进入系统的时间。
IDLE:用户空闲时间,从用户上一次任务结束后,开始记时。
JCPU:一终端代号来区分,表示在某段时间内,所有与该终端相关的进程任务所耗费的CPU时间。
PCPU:指WHAT域的任务执行后耗费的CPU时间。
WHAT:表示当前执行的任务
当登陆系统用户很多的时候,可以在W后面加上某个用户名,则会查看该用户执行任务的情况
[root@localhost ~]# w lockey
07:40:45 up 2 days, 15:29, 6 users, load average: 0.07, 0.08, 0.02
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
lockey pts/1 06:32 0.00s 0.48s 0.00s sshd: linfengfeiye [priv]
[root@localhost ~]# last
lockey pts/1 118.113.209.13 Sat Nov 7 06:32 still logged in
root pts/1 118.113.209.13 Sat Nov 7 06:12 - 06:32 (00:20)
root pts/4 118.113.209.13 Sat Nov 7 05:15 - 06:11 (00:55)
root pts/2 118.113.209.13 Sat Nov 7 04:21 - 06:41 (02:20)
halo pts/5 222.211.247.164 Fri Nov 6 22:16 - 22:36 (00:20)
root pts/2 222.211.247.164 Fri Nov 6 21:53 - 22:36 (00:42)
root pts/4 222.211.247.164 Fri Nov 6 19:59 - 23:08 (03:08)
halo pts/8 222.211.247.164 Fri Nov 6 19:57 - 22:16 (02:18)
root pts/7 222.211.247.164 Fri Nov 6 19:42 - 22:36 (02:53)
root pts/6 222.212.68.214 Fri Nov 6 19:39 - 21:40 (02:00)
[root@localhost ~]# last halo
halo pts/5 222.211.247.164 Fri Nov 6 22:16 - 22:36 (00:20)
halo pts/8 222.211.247.164 Fri Nov 6 19:57 - 22:16 (02:18)
halo pts/6 118.113.236.146 Fri Nov 6 16:39 - 16:43 (00:03)
比如想踢除lockey这个用户和他的所有开启的程序,危险做法为:
pkill -u lockey
注意:这个命令实际上很危险,要相当小心的执行,负责可能会导致系统崩溃掉!!!
安全的做法是先查看终端号,然后查看该终端执行的所有进程,根据进程号来停止服务
安全剔除用户
ps -ef| grep pts/0
得到用户登录相应的进程号pid后执行.
kill -9 pid
如何消去一个用户或者所有用户的登录信息?
比如说你通过ssh登录了别人的系统之后不想让他查找到你的登录踪迹,那么,接下来就是重点了:
[root@foundation36 ~]#>/var/log/btmp
#清除登录失败的用户信息,这些信息在未清除前可以通过lastb命令查看
[root@foundation36 ~]#>/var/log/wtmp
#清空一个用户每次登录进入和退出时间的永久纪录的用户信息,这些信息在未清除前可以通过last命令查看
做完上边两步,你就暂时的清空了以前的所有用户登录信息,但是你下次登录之后又会被记录下来,那么怎么办呢,请往下看:
[root@foundation36 ~]# echo '12 * * * * root >/var/log/btmp' > /etc/cron.d/test
#添加定时执行清理动作,频率为每小时的12分清理一次
[root@foundation36 ~]# echo '12 * * * * root >/var/log/wtmp' > /etc/cron.d/test1
如果你想和你的朋友开个玩笑,你也可以通过修改登录信息来误导他,这个有点邪恶额。。
sed 's/lockey/halo/g' -i /var/log/wtmp(btmp)
#修改登录用户名称
sed 's/118.113.209.13/118.113.209.113/g' -i /var/log/wtmp(btmp)
#修改登录用户的ip