### Please make sure of the following things - [x] I have read the [documentation](https://alistgo.com). 我已经阅读了[文档](https://alistgo.com)。 - [x] I'm sure there are no duplicate issues or discussions. 我确定没有重复的issue或讨论。 - [x] I'm sure it's due to `AList` and not something else(such as [Network](https://alistgo.com/faq/howto.html#tls-handshake-timeout-read-connection-reset-by-peer-dns-lookup-failed-connect-connection-refused-client-timeout-exceeded-while-awaiting-headers-no-such-host) ,`Dependencies` or `Operational`). 我确定是`AList`的问题,而不是其他原因(例如[网络](https://alistgo.com/zh/faq/howto.html#tls-handshake-timeout-read-connection-reset-by-peer-dns-lookup-failed-connect-connection-refused-client-timeout-exceeded-while-awaiting-headers-no-such-host),`依赖`或`操作`)。 - [x] I'm sure this issue is not fixed in the latest version. 我确定这个问题在最新版本中没有被修复。 ### AList Version / AList 版本 v3.62.0 ### Driver used / 使用的存储驱动 ilanzou ### Describe the bug / 问题描述 alist版本号为v3.62.0,部署在阿里云ubuntu24,通过cloudflare tunnel将端口映射到netdisk.zhtianqi.cn。 guest用户配置项:{"密码":"无";"基本路径":"/public";"权限":"无"}。 "/public"挂载为蓝奏云优享版的"我的文件/public"。 直接在文件夹/文件右键确实只有分享/下载/复制链接,但是点击右下角的更多时可以直接通过那里的工具进行创建文件夹/创建文件/上传文件,guest无任何权限应当只能访问并下载,不应该能执行写入,疑似重大bug。 ### Reproduction / 复现链接 netdisk.zhtianqi.cn ### Config / 配置 [config.json](https://github.com/user-attachments/files/30672463/config.json) ### Logs / 日志 [log.log](https://github.com/user-attachments/files/30672465/log.log)
Activity
okatu-loli commentedon Aug 4, 2026
已排查完成,你遇到的写入不是权限绕过,而是元信息(meta)的「写入」开关在起作用;但排查过程中发现了另一个真实的安全回归,已单独修复。
一、你的 guest 能上传的原因
AList 的写入判定是「角色权限位 或 元信息写入开关」二选一(
server/middlewares/fsup.go):你的实例上:
{path: /public, permission: 2},bit1 是「免密访问」,不含写入位 — 这部分是对的;/public的元信息开启了「写入」。证据:guest 身份请求/api/fs/list返回"write": true,而该字段的来源正是HasPermission(perm, PermWrite) || CanWrite(meta, reqPath);Overwrite: false,权限若通过会在写入前短路):解决办法:管理后台 → 元信息 →
/public→ 关闭「写入」(以及「写入应用到子目录」)。前端右下角工具栏正是依据接口返回的write字段显示的,关闭后按钮也会消失。元信息的写入开关设计上就是「不给账号权限也能让访客上传」的匿名投递功能,优先级高于角色权限位,配置时容易误开,请检查一下是不是设置 readme/header 时一并打开了。
二、排查中发现的真实 Bug(已修:#9601)
utils.JoinBasePath中有一个提前返回,导致用户的「基本路径」从未生效:后果:被基本路径限制的用户实际没有被限制住。内置 guest/general 角色的权限作用域是
/,而CanReadPathByRole对作用域下的任意路径放行 — 所以一个限制在/public的 guest,只要直接请求其他存储的绝对路径就能列目录和下载。本地复现(guest,基本路径/lanzou,无写权限):这同时解释了你实例上的另一个现象:guest 点进子文件夹会报 403 — 因为
/ilanzou没有被拼接成/public/ilanzou,而是打到了真实根目录。修复后这个问题也会一并解决。回归引入自 6b2d81e (#9249),修复 PR:#9601。
请注意:在 #9601 合并发布前,你的实例上任何靠「基本路径」做隔离的用户都是不可靠的,建议临时改用角色权限作用域(把 guest 角色的 scope 限定为
/public,你已经是这样配置的,所以你的实例目前没有越权读取风险)。okatu-loli commentedon Aug 6, 2026
已修复,请更新3.63.0版本