Casvisor
访问控制

权限

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

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

字段

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

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

动作

动作允许什么
Connect(连接)在工作台里看到这个资产并建立会话,不论在浏览器里还是经由SSH网关。没有它,其他动作都没有意义。
Copy(复制)RDP和VNC:远端剪贴板里的文字能传到用户的浏览器。
Paste(粘贴)RDP和VNC:用户剪贴板里的文字能传到远端。
Upload(上传)往SSH或RDP资产传文件,以及在上面新建、重命名、删除文件:通过文件面板、SFTP、scp、rsync,或RDP会话里重定向的磁盘。见文件传输。
Download(下载)用同样的方式从SSH或RDP资产取文件。要浏览文件,也得有上传或下载其中之一。
Forward(端口转发)经由SSH网关做端口转发(ssh -L),VS Code Remote需要它。

复制和粘贴在哪里执行,见协议:RDP由服务端执行,VNC由前端执行。SSH和Telnet终端用的是浏览器自己的复制粘贴,这两个动作限制不了。

多条权限怎么叠加

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

几个例子:

目标用户 / 用户组资产 / 资产标签动作来源IP时间
运维组从办公网访问所有Linux服务器用户组ops标签linuxConnect、Copy、Paste198.51.100.0/24
开发人员在测试服务器上用VS Code Remote和传文件用户组dev标签testConnect、Upload、Download、Forward
外包人员访问两台服务器一周,不能用剪贴板用户aliceweb-01、web-02Connect2026-11-01至2026-11-08
所有人都能用跳板桌面,能往里粘贴、不能往外复制*jump-desktopConnect、Paste

什么时候检查

Casvisor在列出用户工作台里的资产时、建立会话时、打开会话的WebSocket时,以及SSH网关选定资产时都会检查权限;文件操作逐个检查。所以改动对下一次连接立刻生效。

已经打开的会话也会重新检查:修改或删除权限、资产之后立刻检查一次,另外每30秒检查一次,权限到了结束时间就是这样生效的。不再被允许的会话会被断开,见权限收回即断开。

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

客户端IP

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

SSH网关没有这个头:比较的是SSH连接的来源地址。

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上编辑

本页内容