内容纲要
ACL LOG
命令详解
ACL LOG
命令用于查看 Redis 实例的 ACL 安全事件日志,包括认证失败、命令拒绝和键访问拒绝等事件。该命令帮助管理员监控 ACL 规则的执行情况,及时发现潜在的安全问题。
语法:
ACL LOG [count | RESET]
count
:可选参数,指定要返回的日志条目数量。默认为 10 条。RESET
:清空 ACL 日志。
主要功能:
- 显示 ACL 安全事件:该命令会显示最近的 ACL 安全事件,帮助管理员审计权限访问情况。事件可以包括认证失败、命令被拒绝或键访问被拒绝等。
- 按需返回日志条目:可以指定要返回的日志条目数量(默认为 10 条),用于查看最近的安全事件。
- 清空日志:使用
RESET
参数可以清除日志中的所有记录。
返回值:
-
数组回复(Array reply):返回一个包含安全事件信息的数组。每个事件条目是一个包含多个字段的子数组,字段说明如下:
- count:在 60 秒内检测到的安全事件数量。
- reason:记录的原因,例如
auth
(认证失败)、command
(命令被拒绝)、key
(键访问被拒绝)等。 - context:事件发生的上下文,如
toplevel
(顶级命令)、multi
(事务)、lua
(Lua 脚本)、module
(模块)。 - object:用户没有足够权限访问的资源,认证失败时为
auth
。 - username:执行导致安全事件的用户名,或因认证失败的用户名。
- age-seconds:日志条目的年龄(秒)。
- client-info:导致事件的客户端信息。
- entry-id:日志条目的序列号(从 0 开始)。
- timestamp-created:条目创建时的 UNIX 时间戳(毫秒)。
- timestamp-last-updated:条目最后更新时间的 UNIX 时间戳(毫秒)。
-
简单字符串回复(Simple string reply):当使用
RESET
参数时,返回"OK"
,表示日志已清空。
时间复杂度:
- O(N):时间复杂度与日志条目数量成正比。
ACL 分类:
- 该命令属于
@admin
、@slow
和@dangerous
分类。
示例:
-
查看最近的 ACL 安全事件(默认为 10 条)
ACL LOG
返回结果示例:
1) 1) "count" 2) (integer) 1 3) "reason" 4) "auth" 5) "context" 6) "toplevel" 7) "object" 8) "AUTH" 9) "username" 10) "someuser" 11) "age-seconds" 12) "8.038" 13) "client-info" 14) "id=3 addr=127.0.0.1:57275 laddr=127.0.0.1:6379 fd=8 name= age=16 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=48 qbuf-free=16842 argv-mem=25 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=18737 events=r cmd=auth user=default redir=-1 resp=2" 15) "entry-id" 16) (integer) 0 17) "timestamp-created" 18) (integer) 1675361492408 19) "timestamp-last-updated" 20) (integer) 1675361492408
解释:
- count:在过去 60 秒内检测到的 1 次认证失败。
- reason:认证失败(
auth
)。 - context:事件发生在顶级命令(
toplevel
)上。 - username:
someuser
尝试执行AUTH
命令时发生失败。 - client-info:显示了导致事件的客户端信息,包括客户端地址、ID 等。
- entry-id:该条目的序列号(0)。
- timestamp-created 和 timestamp-last-updated:记录的时间戳。
-
查看指定数量的 ACL 安全事件
假设你只想查看最近的 1 条事件:
ACL LOG 1
返回结果会显示 1 条事件,如上所示。
-
清空 ACL 日志
如果你希望清空当前的 ACL 安全事件日志,可以使用
RESET
参数:ACL LOG RESET
返回结果:
OK
总结:
ACL LOG
命令为 Redis 管理员提供了对 ACL 安全事件的监控功能。通过此命令,你可以查看因权限问题导致的安全事件,包括认证失败和命令被拒绝等。通过 count
参数,你可以控制返回的日志条目数,而使用 RESET
参数则可以清空日志,帮助你保持对 ACL 操作的有效监控。