Casvisor
访问控制

权限

一条权限说的是:这些人,可以在这段时间里,从这些地址,对这些资产做这些事。不是管理员的用户,只有在权限允许时才能访问资产。

管理员在授权页面管理权限。

字段

字段含义
组织、名称和资产一样,权限属于一个Casdoor组织,只对这个组织的用户和资产生效。
用户按用户名填。*表示组织里的所有用户。
用户组Casdoor用户组,组里所有成员都算在内。
资产按资产名称填。*表示组织里的所有资产。
资产标签标签是其中之一的所有资产,包括以后才打上这个标签的。
动作Connect、Copy、Paste、Upload、Download中的任意几个。
来源IP用户必须从这些地址或网段连接,例如10.0.0.0/8或203.0.113.7。不填表示不限。
开始时间、结束时间权限生效的时间段。两头都可以不填,表示那一头不限。
启用关掉后这条权限不起任何作用,但不用删除。

一条权限覆盖用户里的每个人和用户组里的每个人,作用于资产里的每个资产和资产标签命中的每个资产。

动作

动作允许什么
Connect(连接)在工作台里看到这个资产并建立会话。没有它,其他动作都没有意义。
Copy(复制)远端剪贴板里的文字能传到用户的浏览器。
Paste(粘贴)用户剪贴板里的文字能传到远端。
Upload(上传)、Download(下载)为文件传输预留,界面里还没有这个功能。

复制和粘贴在哪里执行,见协议:Telnet由guacd执行,VNC由前端执行;SSH暂未限制,RDP暂时没有剪贴板。

多条权限怎么叠加

权限只有允许,没有拒绝。只要任意一条已启用、在有效期内的权限同时覆盖了这个用户(按用户名、*或用户组)、这个资产(按名称、*或标签)、这个动作和他连接时的地址,就允许。要收回某项访问,就修改或关掉给出它的那条权限。

几个例子:

目标用户 / 用户组资产 / 资产标签动作来源IP时间
运维组从办公网访问所有Linux服务器用户组ops标签linuxConnect、Copy、Paste198.51.100.0/24
外包人员访问两台服务器一周,不能用剪贴板用户aliceweb-01、web-02Connect2026-11-01至2026-11-08
所有人都能用跳板桌面*jump-desktopConnect、Paste

什么时候检查

Casvisor在列出用户工作台里的资产时、建立会话时、以及打开会话的WebSocket时都会检查权限。所以改动对下一次连接立刻生效。

已经打开的会话不会再检查,所以收回权限并不会断开此刻正连着的人。要断开他,在会话里停止他的会话。

用户组成员关系在用户登录时读取,见Casdoor里的改动什么时候生效。

客户端IP

和来源IP比较的,是连接的来源地址。如果连接来自本机或内网地址(反向代理和Casvisor在同一个网络时就是这样),Casvisor改用X-Forwarded-For的最后一项,也就是你的代理看到的地址。请确保代理设置了这个头,见放在反向代理后面。

Casbin模型

对每个请求,Casvisor把组织里已启用的权限转成Casbin策略,用这个模型判断:

[request_definition]
r = sub, obj, act, ip

[policy_definition]
p = sub, obj, act, ip

[role_definition]
g = _, _
g2 = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && g2(r.obj, p.obj) && r.act == p.act && ipAllowed(r.ip, p.ip)

g把用户归入user:*和他的每个用户组,g2把每个资产归入asset:*和它的标签,ipAllowed判断地址是否等于某个IP或落在某个网段里。每条权限按“用户或用户组 × 资产或标签 × 动作 × 地址段”展开成多行策略。

*在用户和资产里有效。在用户组和资产标签里它暂时没有特殊含义;要覆盖所有人或所有资产,请在用户或资产里填*。

在GitHub上编辑

本页内容