/var/log/auth.log文件不存在

分享于:2019-01-29 11:38:18

引言

The Authorization Log tracks usage of authorization systems, the mechanisms for authorizing users which prompt for user passwords, such as the Pluggable Authentication Module (PAM) system, the sudo command, remote logins to sshd and so on. The Authorization Log file may be accessed at /var/log/auth.log. This log is useful for learning about user logins and usage of the sudo command.

— Ubuntu Document

从上面这段引用可以了解到,通过/var/log/auth.log文件可以查看一些关于ssh登陆、sudo命令的信息。但是,我最近遇到了一个问题,在阿里云的一些主机上没有这个文件:

# ls /var/log/
alternatives.log    apt       dmesg.0     gshell.log  mysql.log       mysql.log.3.gz  mysql.log.6.gz  repair.log
alternatives.log.1  boot.log  dpkg.log    mysql       mysql.log.1.gz  mysql.log.4.gz  mysql.log.7.gz  udev
apache2             dmesg     dpkg.log.1  mysql.err   mysql.log.2.gz  mysql.log.5.gz  ntp.log         upstart

而另一些主机上却是存在该文件。那么是什么原因导致同样是Ubuntu系统却表现不一样呢?

问题排查

首先确认rsyslog进程是否正常运行:

# ps auxf | grep syslog
syslog   22290  0.0  0.1 190516  1160 ?        Ssl  20:08   0:00 rsyslogd
root     22517  0.0  0.0  11740   940 pts/0    S+   20:22   0:00          \_ grep --color=auto syslog

可以看到rsyslogd进程正常在后台运行。

 

紧接着排查rsyslog的配置是否正确:

// vi /etc/rsyslog.d/50-default.conf
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog

可以看到也是默认的配置,并没有做任何改动。

 

在排查的过程中,我使用了对比的方式,确认了两个服务器(一个正常,一个异常)的rsyslog的所有配置文件都是一样的(md5值相同),因为在查询资料的时候有讲到ssh配置文件的问题,我也同时比较了ssh的配置文件,两个服务器也是完全一致的。

 

在保证配置文件是一致的情况下,那就是“重启”大法了。然而,并没有什么用,重启了rsyslog、ssh,甚至是服务器,/var/log/auth.log依然是毫无踪影。

转机

我把整个排查的过程给老婆讲了以后,老婆说为何不手动创建试一下?我内心是拒绝的,但是未尝不可一试。

# touch /var/log/auth.log
# chmod 640 /var/log/auth.log 
# chown syslog.adm /var/log/auth.log 
# ls -la /var/log/auth.log 
-rw-r----- 1 syslog adm 0 Dec  4 20:29 /var/log/auth.log

我手动创建了/var/log/auth.log文件,并根据另外一台服务器中该文件的属性,修改了权限和用户组等信息。

然后我主动断开ssh连接并在此登录上去,奇迹出现了!/var/log/auth.log文件中已经正确记录了ssh断开连接和登录的信息。

这次验证说明了这样一个问题:rsyslog是正常工作的,但是却没有权限创建/var/log/auth.log文件。

 

继续排查,不过这次问题点转移到/var/log目录了,通过对比,我们发现两个服务器的/var/log用户组是不一样的:

// server not ok
# ls -l /var/ | grep log
drwxr-xr-x  6 root root  4096 Dec  4 20:29 log

// server ok
# ls -l /var/ | grep log
drwxrwxr-x 12 root syslog    4096 Dec  4 20:24 log

通过对比可以看出,有问题的服务器上/var/log的用户组是root,而正常运行的服务器上/var/log文件夹的用户组是syslog。我比较了一下我本地Ubuntu虚拟机上该文件夹的属性,发现也是syslog的用户组,看来这个问题属于阿里服务器的一个坑了,Fxxk。


把有问题的服务器上/var/log的用户组改成syslog,并赋予组权限为7(读写执行)。

总结

如果你的服务器上/var/log/auth.log文件不存在,除了要检查rsyslog的配置文件,也要检查一下/var/log目录对于rsyslog是否可操作。


来源:http://nferzhuang.com/varlogauth-log%E6%96%87%E4%BB%B6%E4%B8%8D%E5%AD%98%E5%9C%A8/