新闻详情

新闻详情

首页 / 资讯中心 / 详情

Ajenti 核心插件(core)深度解析:认证、会话、资源交付与插件服务基座

发布时间:2026/9/27 9:16:18来源:尧图网络
Ajenti 核心插件(core)深度解析:认证、会话、资源交付与插件服务基座
后端运维【免费下载链接】ajentiAjenti Core and stock plugins项目地址https://gitcode.com/gh_mirrors/aj/ajenti点击查看免费下载导读core 插件是 Ajenti 控制面板的主插件main plugin承担着整个平台的骨架职责从用户登录认证、会话与用户环境管理到前端 CSS/JS 资源的统一交付、主模板渲染、侧边栏构建、错误处理、密码重置乃至全局配置读写全部由它完成。同时它也是其他所有功能插件赖以运行的公共设施层——任务tasks、推送push、热键hotkeys、对话框dialogs、消息框messagebox、导航框navbox等通用组件均由 core 插件提供。读完本文你将掌握 core 插件的模块边界、核心 API 路由、配置项含义以及它如何通过 jadi 的 component/service/interface 机制向其余插件提供可复用能力。core 插件的定位Ajenti 的中枢层在 Ajenti 中各功能插件如filemanager、packages、network负责各自的业务而 core 插件负责所有插件共同的运行环境。其清单文件 plugins/core/plugin.yml 定义了插件元数据与前端资源name: core、version: 0.115、title: Core、icon: linkdependencies: []无第三方插件依赖它处于最底层通过resources字段一次性加载整个前端技术栈jQuery、AngularJS 全家桶angular、angular-route、angular-animate、angular-touch、angular-socket-io、angular-bootstrap、angular-gettext、ngStorage、fastclick、mobile-detect、toaster 通知组件与 loading-bar 进度条等声明ng:core与ng:core.templates两个 Angular 模块前端控制器、指令、服务均由 plugins/core/resources/js/core/ 下的*.es文件定义。从源码结构看core 插件内部又分为两大块api/目录存放可被其他插件复用的纯 Python 服务/接口sidebar、tasks、push、navboxviews/目录存放它自己暴露的 HTTP 端点认证、配置、资源、模板等。这正是下文两条主线的划分依据。认证过程登录、提权与双因素认证core 插件暴露了完整的认证 API集中在 plugins/core/views/api.pyPOST /api/core/auth接收mode参数支持三种模式normal常规用户名/密码登录调用AuthenticationService.check_password若用户绑定了 TOTP则先生成一次性totp_random返回前端进入第二步验证登录失败时记录日志供 fail2ban 等使用并通过gevent.sleep(3)人为延迟 3 秒抑制暴力破解sudo权限提升模式校验 sudo 密码后终止当前 worker 并切换至root身份依赖 ajenti-panel/config.yml 中auth.allow_sudo: truetotp双因素验证码确认验证通过后建立会话。POST /api/core/logout调用认证提供者的signout()并终止对应 worker彻底清理会话GET /api/core/session-time前端活跃时周期性调用用于刷新会话存活时间会话最长时长由配置session_max_time决定默认 3600 秒配合max_sessions控制并发会话上限默认 9。登录页面对应前端控制器 plugins/core/resources/js/core/controllers/login.controller.es登录界面如下文档原图双因素认证TOTP的配套端点还包括GET/POST /api/core/totps增删用户 TOTP 记录、POST /api/core/totps/qr生成二维码与POST /api/core/totps/verify校验验证码底层使用 aj/security/totp.py 中的TOTP类实现标准时间基一次性密码。用户环境与身份信息登录后前端需要知道我是谁、机器是什么、能否提权对应GET /api/core/identity端点plugins/core/views/api.py返回当前用户名、uid/effective真实/有效用户 ID、elevation_allowed是否允许 sudo 提权、认证提供者给出的用户档案profile机器信息包括配置中的name与socket.gethostname()主机名该端点同时生成 PWA 所需的web-manifestGET /api/core/web-manifest提供应用名、启动 URL 与图标。用户环境设置的另一半是配置的隔离每个用户拥有独立的用户配置user config由 aj/config.py 中的UserConfigService管理API 层面对应GET/POST /api/core/user-configplugins/core/views/config.py前端通过 config.service.es 消费。会话管理core 插件维护全部会话状态GET /api/core/session-time的实现在 plugins/core/views/api.py 中会先调用worker.update_sessionlist()刷新会话表再读取aj.sessions中当前会话的时间戳计算剩余存活时间。会话相关配置集中在 ajenti-panel/config.ymlsession_max_time: 3600单会话最长存活秒数超时自动登出max_sessions: 9系统允许的最大并发会话数。多会话的审计与展示由session_list插件负责但其状态数据正是由 core 插件维护并推送的。资源交付CSS、JS 与模板的统一管线core 插件负责资源的交付方式实现位于 plugins/core/views/resource_server.py这是前端加载的核心机制GET /resources/all.(js|css|vendor.js|vendor.css|init.js|locale.js|partials.js)聚合所有插件在构建阶段生成的resources/build/all.*文件并一次性下发JS 文件会被__wrap_js包裹 try/catch单个插件加载出错不会拖垮整个控制台只在控制台输出警告init.js汇总所有插件声明的 Angular 模块ng:前缀资源注入window.__ngModuleslocale.js按?lang参数汇总各插件locale/lang/LC_MESSAGES/app.js的翻译键值支撑 gettext 国际化partials.js把各插件的 HTML 模板写入 Angular$templateCache避免页面切换时的重复请求响应统一经http_context.gzip()压缩并按group设置正确的Content-Type缓存策略值得注意缓存键只取已验证的 URL 前缀 locale不包含客户端 IP/UA注释中明确说明这是为了反向代理共享缓存不被击穿缓存内容超过 1 小时会被清理。GET /resources/plugin/path按插件名取任意静态文件并对路径中的..做了 404 拦截防止目录穿越。各插件的 CSS 也在此管线内core 通过 plugin.yml 的 resources 声明加载 bootstrap.less、app.less、responsive.less、colors.less 等样式源构建后统一输出。主模板与主样式GET /view/.*与GET /两个路由plugins/core/views/main.py负责主页面渲染未登录访问/会重定向到/view/login/normal已登录则重定向到/view/这是认证流程的第一道闸门handle_view读取配置view.plugin与view.filepath指定的模板文件默认回退到 core 的content/pages/index.html并用 Python 字符串格式化注入prefix、插件清单、非敏感配置、版本号、平台信息、devMode、pwReset认证提供者是否支持密码重置、bootstrapColor主题色等变量开发模式aj.dev下每次刷新页面都会调用ajenti-dev-multitool --build或带Cache-Control: no-cache时的--rebuild重新编译插件资源实现 F5 即生效的开发体验该逻辑要求以 root 运行。主样式则通过config.yml中的color字段控制如bluegrey前端根控制器 root.controller.es 会在启动时应用主题色。侧边栏条目接口、构建与权限过滤侧边栏是 Ajenti 的导航主干core 插件定义了标准接口SidebarItemProviderplugins/core/api/sidebar.py任何插件实现该接口即可向侧边栏贡献条目条目格式为{ id: optional-id, attach: category:general, # 挂载点 idNone 表示顶层 name: Dashboard, icon: bar-chart, url: /view/dashboard, children: [...], }Sidebar.build()会遍历所有提供者对每个带url的条目先执行authorize(sidebar:view:url)权限校验无权限的条目被静默跳过再递归查找attach指定的挂载点挂载最终产出一棵完整侧边栏树。core 插件自己提供的条目在 plugins/core/main.py 中General、Tools、Software、System、Other五个空分类挂载点供各功能插件挂靠同时它实现PermissionProvider自动为每个侧边栏条目生成sidebar:view:url权限并声明core:config:read/core:config:write两个配置读写权限。GET /api/core/sidebar与GET /api/core/permissions端点plugins/core/views/api.py分别向前端输出构建好的侧边栏与全部权限清单。错误处理core 插件为整个前端提供统一的错误兜底路由未命中时回落到404页面对应资源 plugins/core/resources/partial/404.html 与前端控制器 error.controller.es后端异常通过serverErrorMessage.html模板与 toaster 通知呈现资源加载失败在前端被 try/catch 包裹并降级见上文__wrap_js模板缺失或插件不存在时handle_view会记录 error 日志并回退到默认index.html保证界面始终可用。密码重置core 插件将密码重置能力做成可选特性handle_view渲染模板时注入的pwReset标志来自当前认证提供者如os提供者是否实现了pw_reset参见 aj/security/pwreset.py。若支持登录页可进入发送重置邮件/重设密码流程对应前端页面 reset_password_send.html 与 reset_password.html以及控制器 pwreset.controller.es重设密码前还会调用POST /api/core/check_password_complexity校验密码复杂度plugins/core/views/api.py。邮件发送依赖 SMTP 配置见下文。密码重置流程界面如下文档原图配置管理系统配置、用户配置与 SMTP/TFAcore 插件是配置的读写中枢全部端点位于 plugins/core/views/config.pyGET/POST /api/core/config读写全局 Ajenti 配置要求进程以 root 运行os.getuid() ! 0直接返回 403并校验core:config:read/core:config:write权限保存后调用worker.reload_master_config()使改动即时生效GET/POST /api/core/user-config读写当前登录用户的私有配置GET/POST /api/core/smtp-config读写 SMTP 配置读写均隐藏密码字段用于密码重置邮件与通知GET/POST /api/core/tfa-config读写双因素认证配置删除用户的 TOTP 记录。全局配置的实际形态可参考 ajenti-panel/config.yml常用键说明如下配置键含义示例/默认auth.allow_sudo是否允许 sudo 提权trueauth.provider认证提供者如ososauth.users内置用户与密码哈希、uidroot: {...}bind.host/bind.port/bind.mode监听地址、端口与模式0.0.0.0/8000/tcpcolor界面主题色bluegreylanguage默认语言rumax_sessions最大并发会话数9session_max_time单会话最长存活秒数3600trusted_domains/trusted_proxies信任域名与反向代理影响登录失败日志的 IP 解析[]name服务器显示名Test Boxrestricted_user受限用户nobodyssl证书路径、客户端证书认证等/etc/ajenti/ajenti.pememail.smtpSMTP 服务器、端口、用户、密码默认关闭为其他插件提供的公共服务原文档列出的第二组能力——core 插件交付给其他插件的工具、服务与组件均有对应的源码实现tasks任务核心抽象类Task与TasksService位于 plugins/core/api/tasks.py。每个任务是独立的gipc子进程通过管道上报progressmessage/done/total、done、exception三种消息任务内部还可调用push()与send_log_event()向前端推送消息和日志。HTTP 层由 plugins/core/views/tasks.py 提供POST /api/core/tasks/start只允许启动ALLOWED_TASK_CLASSES白名单中的任务类如插件安装、文件传输、包管理更新等与GET /api/core/tasks/request-update前端由 tasks.service.es 轮询展示进度。push推送Push服务plugins/core/api/push.py基于BroadcastQueue实现一对多的广播前端通过 SocketIO 订阅服务端 views/push.py 中的PushSocket端点以pluginmessage的结构把消息推送给所有在线会话。navbox导航框api/navbox.py 的Navbox.search()遍历所有侧边栏条目按id/name模糊匹配供全局搜索对应GET /api/core/navbox/query。hotkeys热键前端 hotkeys.service.es 提供全局快捷键注册。dialogs / progress spinner / messagebox / smartprogress分别对应前端指令与服务 dialog.es、progressSpinner.es、smartProgress.es、messagebox.service.es是其他插件界面交互的通用组件。customization定制customization.service.es 允许插件对既有模板做覆盖plugin.yml 资源中的overrides字段即服务于$templateCache.put的模板替换见partials.js生成逻辑。gettext 翻译前端 gettext.service.es 配合locale.js聚合的翻译表后端插件源码直接使用_()标记可翻译字符串各插件locale/lang/LC_MESSAGES/app.po提供 50 语言的翻译。notifications通知由 toaster 组件与 notify.service.es 实现界面通知服务端日志还可通过任务的send_log_event转发到前端。socketiosocket基础设施由 socket.service.es 封装所有 push 消息都经由它传输。这些服务让功能插件得以专注于自身业务例如packages插件启动包列表更新任务filesystem插件做文件传输二者都只是实现Task.run() 调用TasksService.start()其余进度展示、异常上报、并发管理全部由 core 复用。小结core 插件是 Ajenti 的操作系统内核对外它一手包办了认证、会话、身份、密码重置与配置管理对内它提供了侧边栏接口、任务/推送/导航等公共组件并以统一管线交付全部前端资源。理解 plugins/core/views/ 与 plugins/core/api/ 的职责划分是读懂 Ajenti 任何插件的第一步——新插件的开发本质上是实现 core 定义的接口、复用 core 提供的服务。赞分享后端运维【免费下载链接】ajentiAjenti Core and stock plugins项目地址https://gitcode.com/gh_mirrors/aj/ajenti点击查看免费下载相关推荐Ajenti 核心插件core源码级解析默认模板、认证会话、配置管理与资源管线Ajenti 核心插件core源码级解析默认模板、认证会话、配置管理与资源管线 导读 Ajenti 是一个基于插件体系构建的 Linux 服务器管理面板后端运维深入解析 Tabby 的 tabby-core 插件七项核心服务与插件扩展 API深入解析 Tabby 的 tabby core 插件七项核心服务与插件扩展 API 本文围绕 tabby core/README.md https://lin桌面应用网络通信Ajenti auth_users 插件 API 深度解析基于配置文件的用户认证与权限管理Ajenti auth_users 插件 API 深度解析基于配置文件的用户认证与权限管理 Ajenti 的 auth_users 插件提供了一套完全独立于操后端运维上一篇Visual Syslog Server打造你的Windows系统日志管理中心下一篇学术文档排版终极指南从零开始打造专业论文创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

TypeScript 对象类型(Object Types)完全指南:interface、type 别名与匿名类型的实战运用 2026/9/27 10:10:35

TypeScript 对象类型(Object Types)完全指南:interface、type 别名与匿名类型的实战运用

文档教程 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source. 项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book 点击查看 免费下载 本篇技术指南以《T…

阅读更多 →
Next.js 错误处理全指南:Error Boundaries、Server Actions 导航陷阱与优雅降级(preguntas-entrevista-react 项目实践) 2026/9/27 10:10:28

Next.js 错误处理全指南:Error Boundaries、Server Actions 导航陷阱与优雅降级(preguntas-entrevista-react 项目实践)

前端教程 【免费下载链接】preguntas-entrevista-react Preguntas tpicas sobre React para entrevistas de trabajo ⚛️ 项目地址: https://gitcode.com/gh_mirrors/pr/preguntas-entrevista-react 点击查看 免费下载 导读 本文围绕 .agents/skills/next-best-p…

阅读更多 →
HMI触摸屏画面设计:从变量规划到现场排障的工程要点 2026/9/27 10:10:28

HMI触摸屏画面设计:从变量规划到现场排障的工程要点

一块触摸屏画面做得顺不顺手,往往决定了客户对整台设备的评价,甚至直接影响下一台设备的复购。别人搞研发,我搞设备,这行干久了我发现一个规律:客户车间里那台设备的操作工,每天上班盯得最多的,…

阅读更多 →
2026最新三合一网站管理系统实操指南:告别没人访问的尴尬 2026/9/27 10:10:28

2026最新三合一网站管理系统实操指南:告别没人访问的尴尬

2026最新三合一网站管理系统实操指南:告别没人访问的尴尬 网站上线三个月,百度收录量只有两位数,后台数据显示日均UV不足5个。这种“建好即沉默”的痛点,在2026年的数字营销环境中愈发刺眼。很多站长以为流量低是内容问题,实则根源往往出在底…

阅读更多 →
PythonStock V2 全栈股票系统实战指南:基于 akshare、pandas 与 Tornado 的数据抓取、指标计算与可视化部署 2026/9/27 10:10:28

PythonStock V2 全栈股票系统实战指南:基于 akshare、pandas 与 Tornado 的数据抓取、指标计算与可视化部署

后端数据分析数据可视化金融科技 【免费下载链接】stock stock,股票系统。使用python进行开发。 项目地址: https://gitcode.com/gh_mirrors/st/stock 点击查看 免费下载 导读 本文以 PythonStock V2(下称 stock 项目)为核心&am…

阅读更多 →
Read the Docs 的 llms.txt 支持:为 AI 代理提供结构化文档入口的完整指南 2026/9/27 10:10:28

Read the Docs 的 llms.txt 支持:为 AI 代理提供结构化文档入口的完整指南

后端文档 【免费下载链接】readthedocs.org The source code that powers readthedocs.org 项目地址: https://gitcode.com/gh_mirrors/re/readthedocs.org 点击查看 免费下载 Read the Docs 原生支持在项目域名的顶层路径(/llms.txt 与 /llms-full.txt…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉