前言
近期和往常一样在网上逛着 Gayhub ,突然发现了一个项目可以使得 FRP 支持多用户认证(泪目啊 T_T ),往常的 FRP 使用过程中都是基于 Token 方式对用户身份鉴权的,但是这个 Token 一旦给了他人或将配置文件给了他人,也就意味着这个 Token 就泄露出去了,频繁的更换 Token 也意味着 FRP_Client 端也要频繁更新 Token 并重启,这显然不是明智之举。使用此插件可解决多用户认证的问题,为特定用户群体设置特定 Token 验证,解决了 FRP 唯一 Token 的问题,下面就说说食用方法吧。
fp-multiuser
这款插件也是 FRP 项目作者开发的,专门用于支持 FRPS 多用户鉴权的服务端插件,其项目链接如下:
fp-multiuser 会以一个单独的进程运行,并接收 FRPS 发送过来的 HTTP 请求。
需要 FRP 版本 >= v0.31.0
食用示例
将 fp-multiuser 下载到相关目录下,在该目录下创建一个文本文件,以
tokens
文件为例(文件名可自定义),内容为所有支持的用户名和 Token:user1=123 user2=abc
每一个用户占一行,用户名和 token 之间以
=
号分隔。运行 fp-multiuser,指定监听地址以及 Token 存储文件路径:
./fp-multiuser -l 127.0.0.1:7200 -f ./tokens
在 frps 的配置文件中注册插件,并启动:
# frps.ini [common] bind_port = 7000 [plugin.multiuser] addr = 127.0.0.1:7200 path = /handler ops = Login
在 frpc 中指定用户名,在 meta 中指定 Token,用户名以及
meta_token
的内容需要和之前创建的 Token 文件匹配:user1 的配置:
# frpc.ini [common] server_addr = x.x.x.x server_port = 7000 user = user1 meta_token = 123 [ssh] type = tcp local_port = 22 remote_port = 6000
user2 的配置:
# frpc.ini [common] server_addr = x.x.x.x server_port = 7000 user = user2 meta_token = abc [ssh] type = tcp local_port = 22 remote_port = 6000
- 启动 frps ,再运行 frpc ,此时即可食用不同用户和 Token 对其鉴权,例如在渗透测试中,可以使用临时 Token 去使用 socks 代理而不再担心唯一 Token 泄露了,使用完后可删除该 Token,较为完善的解决了 frps 唯一 Token 鉴权的问题。
注:食用该方法,原先的在 frps 中配置的 token 字段需删除或注释掉,否则仍优先 Token 鉴权,此方法将失效(应该未兼容~)。
开机自启动
为保证 fp-multiuser 服务能够开机自启动,故需要设置一下,写入的命令如下:
[root@tx3_yang ~]# vim /usr/lib/systemd/system/fp-multiuser.service
[Unit]
Description=A frp server plugin to support multiple users for frp
After=network.target
[Service]
Type=simple
User=nobody
Group=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/fp-multiuser/fp-multiuser -l 127.0.0.1:7200 -f ./tokens
WorkingDirectory=/usr/local/fp-multiuser/
[Install]
WantedBy=multi-user.target
[root@tx3_yang ~]#
其中,根据自己的设置可修改的字段如下:
ExecStart
:启动的命令参数。User
:指定守护运行的用户,上述用户为nobody
用户 ;若fp-multiuser
服务指定的启动端口在 1024 以下,则必须为 root 用户,字段注释或删除则默认 root 守护程序运行。Group
:指定守护运行的用户组。WorkingDirectory
:指定插件所工作的目录,指定后可使用相对路径参数;否则,需使用绝对路径参数。
设置完后,先设置目录的用户与用户组权限:
chown -R nobody:nobody /usr/local/fp-multiuser
再 daemon-reload
重载配置一下:
systemctl daemon-reload
再设置开机自启:
systemctl enable fp-multiuser.service
启动 fp-multiuser
:
systemctl start fp-multiuser.service
其余操作命令如下:
# 停止运行
systemctl stop fp-multiuser.service
# 查看状态
systemctl status fp-multiuser.service