OJ在线评测系统 后端判题机架构搭建 使用原生实现Java安全管理器环境隔离

原生实现安全管理器环境隔离

限制用户的操作权限 文件 网络 执行

Java安全管理器

SecurityManager 来实现更严格的限制

是 Java 提供的保护 JVM Java安全的机制 可以实现更严格的资源和操作限制

编写安全管理器 只需要继承 SecurityManager类

我们可以从这个参数perm参数拿到数据

package work.bigdata1421.dduojcodesandbox.security;import java.security.Permission;/*** 默认的安全管理器*/
public class DefaultSecurityManager extends SecurityManager{// 检查所有的权限@Overridepublic void checkPermission(Permission perm) {System.out.println("默认不做任何限制");super.checkPermission(perm);}}

接下来我们去使用这个原生的资源管理器

写一个能抛异常的

package work.bigdata1421.dduojcodesandbox.security;import java.security.Permission;/*** 禁止所有的权限安全管理器*/
public class DenySecurityManager extends SecurityManager{// 检查所有的权限@Overridepublic void checkPermission(Permission perm) {throw new SecurityException("权限异常"+perm.getActions());}}

我们去尝试下怎么样让有些权限生效 有些程序不生效

这边进行了报错

实现MySecurityManager

package work.bigdata1421.dduojcodesandbox.security;import java.security.Permission;public class MySecurityManager extends SecurityManager {// 检查所有的权限@Overridepublic void checkPermission(Permission perm) {
//        super.checkPermission(perm);}// 检测程序是否可执行文件@Overridepublic void checkExec(String cmd) {throw new SecurityException("checkExec 权限异常:" + cmd);}// 检测程序是否允许读文件@Overridepublic void checkRead(String file) {System.out.println(file);if (file.contains("C:\\code\\yuoj-code-sandbox")) {return;}
//        throw new SecurityException("checkRead 权限异常:" + file);}// 检测程序是否允许写文件@Overridepublic void checkWrite(String file) {
//        throw new SecurityException("checkWrite 权限异常:" + file);}// 检测程序是否允许删除文件@Overridepublic void checkDelete(String file) {
//        throw new SecurityException("checkDelete 权限异常:" + file);}// 检测程序是否允许连接网络@Overridepublic void checkConnect(String host, int port) {
//        throw new SecurityException("checkConnect 权限异常:" + host + ":" + port);}
}

做一个测试

package work.bigdata1421.dduojcodesandbox.security;import cn.hutool.core.io.FileUtil;import java.nio.charset.Charset;/*** 测试安全管理器*/
public class TestSecurityManager {public static void main(String[] args) {System.setSecurityManager(new MySecurityManager());FileUtil.writeString("aa", "aaa", Charset.defaultCharset());}
}

看到了哪些内容是可以读的

这边只要使用了资源管理器 默认是把所有权限都禁用的

所有权限拒绝

实际情况下 我们只需要限制子程序的权限即可

没必要限制开发者自己写的程序

在运行java程序时 指定安全管理器

String runCmd = String.format("java -Xmx256m -Djava.security.manager=MySecurityManager %s Main ", userCodeParentPath, inputArgs);

我们改造成一个单独的东西

在 Java 中,配置类通常用于集中管理应用程序的配置信息。配置类可以从外部文件(如 XML、properties 文件)或其他来源读取设置。以下是几种常见的方法来加载和使用配置类:

定义一个常量

把路径指定进来

编写安全管理器

编译安全管理器

javac -encoding utf-8 .\MySecurityManager.java

首先运行java程序的时候 指定安全管理器 路径 名称

缺点

如果要做的比较严格的权限限制 需要自己去判断哪些文件 包名需要读写 粒度太细了

安全管理器本身也是Java代码 也可能存在漏洞

还是程序上的控制 没有到系统层面进行控制

Java9 后被取代

优点

权限控制灵活 实现简单

运行环境隔离

系统层面上 把用户程序封装到沙箱里

和宿主机 我们的电脑 服务器 隔离开

Docker 容器技术能够实现 cgroup namespace

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548656.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Study--Oracle-09--部署Openfiler存储服务器

一、安装Oracle RAC需要存储,为此搭建安装openfiler用于模拟存储。 openfiler相关镜像包可从官网下载:Downloads | Openfiler 当前最新版本如下(该笔记也是基于如下版本) 二、安装步骤 https://zhuanlan.zhihu.com/p/519819303…

趋势外推法

趋势外推法主要利用图形识别法和差分法计算,进行模型的基本选择。 一、图形识别法。 这种方法是通过绘制散点图来进行的,即将时间序列的数据绘制成以时间 t 为横轴、时序观察值为纵轴的图形,观察并将其变化曲线与各类函数曲线模型的图形进行…

媒界:吉利星瑞百炼成钢,持续引领中国汽车价值向上

秋风送爽绘秋色,出行良辰恰逢时。9月28日至9月29日,2024安行中国汽车安全科技公益巡展迎来尾声,安行中国携手吉利汽车,步履轻盈地踏入苏州星湖天街,共同呈献一场融合环保科技前沿、安全驾驶理念与深厚文化底蕴的48小时…

设备管理系统-TPM(PC+APP/PDA全流程)高保真Axure原型 源文件分享

随着科技的不断发展,企业对于设备管理的需求也日益增强。为了满足企业在设备管理方面的各种需求,站长为大家整理了一套设备管理系统TPM(PCAPP/PDA全流程)高保真Axure原型,通过这套原型,企业能够实现对设备的…

Xinstall助力广告主实现精准投放,提升App广告效果!

随着移动互联网的快速发展,App广告投放已成为品牌推广的重要手段。然而,广告投放的效果如何,是否达到了预期的目标,这些问题一直困扰着广告主。今天,我们就来聊聊App广告投放数据统计的痛点,以及Xinstall如…

HBase DML操作代码汇总(表格数据的CRUD操作)

HBase DML操作 DML操作主要是关于对表格内部数据的增删改查。 HbaseDML package org.hbase;import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.CompareOperator; import org.apache.hadoop.hbase.TableName; i…

性能测试:性能测试计划

性能测试计划是在进行软件或系统的性能测试之前制定的详细计划和指导文件。它描述了所需性能测试的目标、范围、测试环境、资源需求、测试策略、测试用例、时间表等重要信息。 为什么要制定性能测试计划 制定性能测试计划的主要目的是确保性能测试的有效性和可靠性。以下是制…

通过OpenScada在ARMxy边缘计算网关上实现数字化转型

随着工业4.0概念的普及,数字化转型已成为制造业升级的关键路径之一。在此背景下,边缘计算技术因其能够有效处理大量数据、减少延迟并提高系统响应速度而受到广泛关注。ARMxy边缘计算网关,特别是BL340系列,凭借其强大的性能和灵活的…

大联大友尚集团推出基于炬芯科技产品的蓝牙音箱方案

大联大控股宣布,其旗下友尚推出基于炬芯科技(Actions)ATS2835P蓝牙音频SoC的蓝牙音箱方案。 图示1-大联大友尚基于炬芯科技产品的蓝牙音箱方案的展示板图 在智能音频设备市场持续升温的浪潮中,蓝牙音箱凭借音质卓越、操作简便等…

自定义认证过滤器和自定义授权过滤器

目录 通过数据库动态加载用户信息 具体实现步骤 一.创建数据库 二.编写secutity配置类 三.编写controller 四.编写服务类实现UserDetailsService接口类 五.debug springboot启动类 认证过滤器 SpringSecurity内置认证流程 自定义认证流程 第一步:自定义一个类继承Abstra…

【15%】100小时机器学习——什么是机器学习

前言 虽然已经好久没有更新了,但笔者最近一直都在努力学习哦。 前面三三两两根据GitHub上的项目写了一些实验操作,但是总觉得这样是不行的。碎片化的学习只能是建立在已知的基础上进行熟练,不能作为打基础的主力方法,最关键的是&a…

CJEval:一个基于中国初中考试的多样化考试问题数据集

2024-09-26,由腾讯YouTu Lab和北京大学联合发布的CJEval,是一个基于中国初中生考试数据的评估基准,用于测试和分析大型语言模型(LLMs)在教育任务中的表现,从而提高在线教育平台的智能化水平。 一、背景&…

【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构

一、html5 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script type"text/javascript" src"http://51.onelink.ynwlzc.net/o2o/tpl/Merchant/static/js…

【CSS in Depth 2 精译_041】6.4 CSS 中的堆叠上下文与 z-index(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09;第二章 相对单位&#xff08;已完结&#xff09;第三章 文档流与盒模型&#xff08;已完结&#xff09;第四章 Flexbox 布局&#xff08;已…

养猫久了才发现,宠物空气净化器才是真正除猫毛的神器

相信每个打工人都在期待这个国庆小长假吧&#xff0c;终于等到了&#xff01;这次我要把属于我的都夺回来&#xff01;刚好工资到手、小长假我有&#xff0c;只想往家里一躺什么也不想&#xff0c;唯一最想做的就是要在这个节假日里好好的陪一下我家猫咪&#xff0c;还有就是买…

关于LlamaIndex 的存储概念和代码基本实现

概念 LlamaIndex 提供了一个高级接口&#xff0c;用于提取、索引和查询外部数据。 在后台&#xff0c;LlamaIndex 还支持可插拔的存储组件&#xff0c;允许您自定义&#xff1a; Document stores 文档存储&#xff1a;存储摄取的文档&#xff08;即对象&#xff09;的位置&a…

cscode搭建vue项目

创建前安装环境 ctrlj弹出终端 window需要管理员运行并且授权 node -v # 显示版本号&#xff0c;说明 node 已经装好 npm -v # 显示版本号&#xff0c;说明 npm 可以使用 # 安装cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm -v # 显示版本号&a…

深度学习(三)——Springer特刊推荐

特刊征稿 01 期刊名称&#xff1a; MOBILE NETWORKS & APPLICATIONS 特刊名称&#xff1a;Resource Efficient Deep Learning for Computer Vision Applications 截止时间&#xff1a; 开放提交&#xff1a;2023年12月13日 提交截止日期&#xff1a;2024年10月30日 目标…

关于LlamaIndex 的几种索引方式介绍

每个索引的工作原理 本指南介绍每个索引如何与图表配合使用。 一些术语&#xff1a; Node&#xff1a;对应于 Document 中的一段文本。LlamaIndex 接收 Document 对象&#xff0c;并在内部将它们解析/分块为 Node 对象。Response Synthesis&#xff1a;我们的模块&#xff0…

【一文读懂】C#如何实现通用的排序功能

目录 通用排序功能 1.升序 2.降序 测试 1.测试代码 2.测试结果 本篇文章来分享一下C#如何实现通用的排序功能。在项目中经常会使用到排序的方法&#xff0c;那如何使排序方法更加通用呢&#xff1f;可以通过泛型&#xff0c;接口&#xff0c;委托来实现。 通用排序功能…