使用$remote_user字段记录访问NGINX的用户
文章发布较早,内容可能过时,阅读注意甄别。
有时候我们会给一些没有集成权限认证系统的页面加一层认证,以提高安全性,但是针对一些涉及到线上生产的一些界面,如果使用 NGINX 统一认证的账号,那么如果某个时刻被改坏了,想要确认是谁都很难。
NGINX 在打印日志的时候,事实上是有 $remote_user
这一参数的,只不过常规使用的时候,无法获取到值,需要在基于认证规则的时候,才能够生效,大多时候我们使用htpasswd
来做的认证,这样会比较麻烦,所以优雅的方案应该是结合 ldap 认证的模块,来实现认证系统,然后在日志格式化中添加用户字段:
log_format json escape=json '{ "remote_addr": "$remote_addr",'
'"@timestamp":"$time_iso8601",'
'"request_uri": "$request_uri",'
'"remote_user": "$remote_user",'# 写入之后,就能记录访问的用户了
'"verb": "$request_method",'
'"httpversion": "$server_protocol",'
'"response": "$status", '
'"body_bytes_sent": "$body_bytes_sent", '
'"referrer": "$http_referer", '
'"user_agent": "$http_user_agent", '
'"server_name": "$host",'
'"request_time": "$request_time",'
'"upstream_response_time": "$upstream_response_time",'
'"realpath_root": "$realpath_root",'
'"cookie": "$http_cookie",'
'"request_body": "$request_body",'
'"nginx_version": "$nginx_version",'
'"scheme": "$scheme"}';
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
然后添加 ldap 的配置,这里不再赘述,参考这里:https://wiki.eryajf.net/pages/3416.html#_6-nginx
最后模拟访问一下,看看日志中是否记录到了对应用户:
{ "remote_addr": "127.0.0.1","@timestamp":"2019-11-15T16:57:29+08:00","request_uri": "/","remote_user": "eryajf","verb": "GET","httpversion": "HTTP/1.1","response": "200", "body_bytes_sent": "3", "referrer": "", "user_agent": "ELinks/0.12pre6 (textmode; Linux; 89x44-2)", "server_name": "127.0.0.1","request_time": "0.002","upstream_response_time": "","realpath_root": "/usr/share/nginx/html","cookie": "","request_body": "","nginx_version": "1.14.0","scheme": "http"}
1
就能看到了在对应时间点中,eryajf 这个用户登陆了本系统,以后若有什么问题,就能更容易锁定目标了。
上次更新: 2024/11/19, 23:11:42