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

发布时间:2026/9/27 9:16:13

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),仅供参考
延伸阅读

更多相关文章

2026/9/27 9:11:12

解决Windows中mfc100u.dll丢失错误的专业指南

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

2026/9/27 9:11:12

谷歌展现量高却没人点:标题与意图错位排查

打开 Google Search Console,某个页面展现量三个月涨到八千,点击却只有十几次。这就是为什么谷歌展现量高但没人点最典型的信号——排名进了前十甚至前三,用户却划过去了。原因往往不是排名不够好,而是标题、描述和用户真实想找的…

2026/9/27 10:01:16

搞定wordpress分类推荐完整流程,新手避坑指南

搞定wordpress分类推荐完整流程,新手避坑指南 备案流程一头雾水?别慌,很多刚接触WordPress建站的朋友,卡在分类推荐功能上,其实不是代码难写,而是没理清 完整流程…

2026/9/27 10:01:16

WordPress主题出错修改主题,新手入门必看避坑指南

WordPress主题出错修改主题,新手入门必看避坑指南 域名解析配错了,服务器SSH进不去,这种基础操作搞不定,才是新手入门建站最头疼的拦路虎。很多人一上来就纠结代码怎么写,结果卡在环境搭建上三天三夜,最后还得花钱找外援。…

2026/9/27 10:01:16

dedecms是什么新手入门必知的安全陷阱

dedecms是什么新手入门必知的安全陷阱 网站做好了没人访问,比没做还让人心焦。刚接触建站的新手入门者,常以为选对CMS系统就能高枕无忧,结果上线没几天,后台就被植入了挖矿脚本,或者首页被篡改成了赌博广告。这种“哑巴亏”,在DedeCMS…

2026/9/27 10:01:16

宠物网站推广怎么做:小白从零搭建到引流全攻略

宠物网站推广怎么做:小白从零搭建到引流全攻略 很多刚入行的朋友,哪怕只会点鼠标,不懂一行代码,却想给自家宠物店或宠物品牌做个官网,心里往往发虚: 自己不会代码想做网站,还能不能从零搭建并搞定流量?…

2026/9/27 9:56:16

995梦幻发布介绍

1. 什么是梦幻梦幻,通常指一种超越现实、带有理想化色彩的精神体验或艺术表达。它既可以指睡眠中产生的梦境,也可以指人们对美好生活的向往与想象。在文学、影视、游戏等创作领域,梦幻常被用来营造浪漫、神秘或超脱现实的氛围。2. 梦幻的常见…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑