跳转至主要内容

最近有报告称,在使用SSH时,新注册的用户登录出现了问题。SysAdmin注册了Alice,然后让Alice尝试通过SSH登录。Alice报告了一个验证错误。

syserr_log信息似乎表明Alice没有注册。

05:04:02 创建了进程 1111812D,root.root (sshd)。 
05:04:02 root (sshd) : [AUTH] [INFO] sshd [PID=0x1111812D]。 无效用户alice
+ 来自127.0.0.1 
05:04:02 root (sshd) : [AUTH] [INFO] sshd [PID=0x1111812D]: input_userauth_req 
+西非。 无效用户alice
05:04:02 root (sshd) : [AUTH] [INFO] sshd [PID=0x1111812D]:Failed none for in 
+有效用户alice来自127.0.0.1端口54869 ssh2。 
05:04:06 root (sshd) : [AUTH] [ERR] sshd [PID=0x1111812D]: 错误。錯誤:無法取得 
+t NOUSER的影子信息 
05:04:06 root (sshd) : [AUTH] [INFO] sshd [PID=0x1111812D]:密码失败 
+r invalid user alice from 127.0.0.1 port 54869 ssh2

 

但如果Alice使用Telnet客户端而不是SSH客户端,她可以顺利登录。

05:04:23 进程1111812E,PreLogin.System(预登录),创建。 
05:04:38 进程 1111812E, PreLogin.System(预登录),创建。 换成了alice.CAC(登录)。

 

此外,如果在注册后,爱丽丝不尝试立即登录,而是等待几分钟,她可以顺利登录。

05:12:51 创建了进程 11118130,root.root (sshd)。 
05:12:55 root (sshd) : [AUTH] [INFO] sshd [PID=0x11118130]。 接受的密码 
+为Alice从 127.0.0.1 端口 54909 发来的 ssh2 
05:12:55 进程 11118131, root.root (sshd), 创建。 
05:12:55 进程 11118131, root.root (sshd),创建。 转为alice.CAC登录)。

 

真正令人沮丧的是,有时第一个新注册的用户用SSH认证没有问题,但第二个用户却有问题。

那到底是怎么回事呢?

让POSIX程序(如SSH)直接引用注册数据库有一定的问题,他们的认证调用由posix_regdb_server进程服务。他们的认证调用由 posix_regdb_server 进程提供服务。posix_regdb_server进程维护着注册数据库的副本,它引用数据库来确定用户是否有效。每当 posix_regdb_server 查询一个用户 ID 的时候,它都会将当前时间和上次读取注册数据库的时间进行比较,如果这个时间超过了 5 分钟,它就会重新读取数据库。因此,一个新注册的用户有可能需要等待5分钟才能使用SSH登录。

对于第一个新注册的用户没有问题,但第二个用户出现问题的情况,发生的情况是SysAdmin注册Bob并让Bob尝试登录。由于距离上次认证请求已经超过5分钟,posix_regdb_server刷新了它的数据库副本,将Bob视为有效用户,Bob可以登录。现在SysAdmin注册了Alice,并让Alice尝试登录。然而,由于Bob登录后只过了一两分钟,posix_regdb_service没有刷新它的数据库副本,也没有找到Alice,所以不允许登录。

没有办法改变5分钟的窗口。如果你停止 posix_regdb_server 进程,它将在重新启动时刷新其注册数据库的副本。通常情况下,它会在一分钟内自动重启,但它可能需要2分钟,所以虽然你可以加快事情的速度,但不能加快很多。

一个更好的策略是在尝试任何一个新用户之前,同时注册所有的新用户,同时在没有人尝试通过SSH登录的时候注册他们。同时在没有人试图通过SSH登录的时候注册他们,这样当第一个新用户试图登录时,posix_regdb_server会刷新数据库,并同时获得所有新用户。

当然找一个没有人试图通过SSH登录的时间可能会很困难,所以最好的策略是同时注册所有的新用户,然后去喝杯咖啡再告诉他们可以登录。

 

© 2024Stratus Technologies.