loginfailed 子例程
用途
记录不成功的登录尝试。
库
安全性库 (libc.a)
语法
#include <usersec.h>
int loginfailed ( User, Host, Tty, Reason)
char *User;
char *Host;
char *Tty;
国际 原因;
int loginfailed ( User, Host, Tty, Reason)
char *User;
char *Host;
char *Tty;
国际 原因;
注: 此子例程不是线程安全的。
描述
登录失败 子例程在登录尝试失败时执行必需的处理。 如果指定的用户名无效,那么会将 UNKNOWN_USER 值替换为该用户名。 此替换将阻止作为用户名输入的密码显示在屏幕上。
如果用户名有效,那么将为指定用户更新 /etc/security/lastlog 文件中的以下属性:
| 项 | 描述 |
|---|---|
| time_last_unsuccessful_login | 包含当前时间。 |
| tty_last_unsuccessful_login | 包含由 蒂 参数指定的值。 |
| host_last_unsuccessful_login | 包含由 主机 参数指定的值,或者如果 主机 参数为空值,那么包含本地主机名。 |
| unsuccessful_login_count | 指示失败的登录尝试次数。 对于每次失败的尝试, 登录失败 子例程将此属性递增 1。 |
将剪切登录失败审计记录以指示发生了不成功的登录尝试。 utmp 条目将追加到 /etc/security/failedlogin 文件中,该文件将跟踪所有失败的登录尝试。
如果当前不成功登录和先前记录的不成功登录在过长的时间段 (由 登录禁用 和 登录时间间隔 端口属性指定) 内构成过多的不成功登录尝试,那么将锁定该端口。 当端口被锁定时,将写入 PORT_Locked 审计记录以通知系统管理员该端口已被锁定。
如果启用了登录重试延迟 (由 洛金代莱 端口属性指定) ,那么在此子例程返回之前将发生休眠。 休眠的长度 (以秒计) 由 洛金代莱 值乘以此进程中发生的不成功登录尝试次数确定。
参数
| 项 | 描述 |
|---|---|
| 用户 | 指定尝试登录不成功的用户的登录名。 |
| 主机 | 指定用户尝试从其登录的主机的名称。 如果 主机 参数为 NULL ,那么将使用本地主机的名称。 |
| TTY | 指定用户尝试在其上登录的终端的名称。 |
| 原因 | 指定用于登录失败的原因码。 有效值为 AUDIT_FAIL 和在 sys/audit.h 文件中定义的 AUDIT_FAIL_AUTH。 |
安全性
访问控制: 调用过程必须有权访问用户数据库中的帐户信息和端口数据库中的端口信息。
访问的文件:
| 方式 | 文件 |
|---|---|
| R | /etc/security/user |
| rw | /etc/security/lastlog |
| R | /etc/security/login.cfg |
| rw | /etc/security/portlog |
| w | /etc/security/failedlogin |
审计事件:
| 事件 | 信息 |
|---|---|
| USER_Login | 用户名 |
| PORT_Locked | portname |
返回值
成功完成后, 登录失败 子例程将返回值 0。 如果发生错误,则返回值为-1并设置 errno 以指示错误。
错误代码
如果以下一个或多个值为 true ,那么 登录失败 子例程失败:
| 项 | 描述 |
|---|---|
| EACCES | 当前进程没有对用户或端口数据库的访问权。 |
| EPERM | 当前进程不具有写入审计记录的许可权。 |