问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何设定执行Java的Linux安全环境

发布网友 发布时间:2022-05-12 12:36

我来回答

1个回答

热心网友 时间:2023-10-09 04:32

建置高效能虚拟机器的同时又要跟上日益增长的核心 Java API 集合,这样做所带来的复杂性在很大程度上使开发 Java 平台的开放来源程序代码「Clean Room」实作的早期行动困难重重。Java 技术的特许实作最终可用于 Linux,但这些实作并不是开放来源程序代码。因此,大多数 Linux 分发版没有包括该特许实作。
尽管有这些困难,Java 平台还是提供了许多好处,从而导致在 Linux 上越来越多地使用该特许实作,尤其是对于服务器应用程序。在本文中,我回顾了 Java 平台给服务器应用程序带来的优点,然后研究了在 Linux 上简单且安全地部署 Java 服务所涉及的问题。作为一个实际范例,我将讨论设定 Apache Software Foundation 的广泛使用的 Tomcat Java servlet 引擎的详细信息以用于独立作业。
Java 应用程序提供了跨多种操作系统和硬件平台的二进制兼容性。对于非 GUI 服务器应用程序尤其是这样,在此类别应用程序中,通常在实际目标系统中需要执行非常少的测试。工作人员可以在任何他们喜欢的平台上进行编码和除错,同时仍可以将这些应用程序部署到他们也许不能直接控制的环境中。
Java 虚拟机器(Java Virtual Machine,JVM)环境的执行时特性以几种方式来加强程序安全性。最显著的方面之一是严格的类别型检查、数组边界检查和自动垃圾收集的组合彻底防止了最具破坏性形式的服务器程序代码攻击︰缓冲区溢位、重复释放的错误和游离的指针。Java 语言早期用于 applet,经过不断发展,该语言还有一个完善的系统,用于对那些已确信存在安全性风险的设施进行细微的存取控制。这些方法可供独立应用程序选择使用,但它们已建置在许多 Java 服务的架构中。
这些执行时程序安全特性还提供了用 Java 语言开发的便利性。要对便利性这类别问题作任何精确测量是困难的,但大多数具有诸如 C 和 C++ 之类别语言背景而转向 Java 程序化的工作人员都承认在转变之后他们的生产力提高了。其中部分是因为在编译时和执行时严格执行类别型确定,以及自动内存管理的简单性。另一个因素是为 Java 平台开发的标准 API 扩充的集合。这些 API 对于新的工作人员可能是一个重大挑战,但是一旦学会了,API 会为各种企业需求提供优秀的跨平台支持。
当然,对于某些应用程序而言,Java 平台可能是一个糟糕的选择。尽管 JVM 体系结构在持续改进,但 Java 应用程序通常会比使用相同算法的 C 或 C++ 应用程序执行得稍微慢一点。根据我的经验和测试,我估计这个速度差异对于在特许 JVM 上执行的大多数服务器应用程序来说大约是在 20% 到 50% 的范围内,然而这很大程度上取决于程序代码的质量。与独立程序相比,在这些 JVM 上执行的 Java 应用程序还忍受着比较慢的启动,但是这对于长时间执行的服务器应用程序通常并不是一个重大问题。在大多数情况中,降低的效能和较慢的启动祇是为获得 Java 平台的增强的安全性和更快速的开发优点所付出的微小代价。
开放来源码替代选择除了标准特许 JVM(免费使用,但是来源码受到*;可用于 Sun、IBM、BEA 和 Blackdown 组织的 Linux)之外,对于 Linux 还有其它几个替代选择。这些选择包括「Clean Room」开放来源码 JVM 实作,其中使用最广泛的可能是 Kaffe(在许多 Linux 分发版中都包括它)。Kaffe 是一个非常有意义的项目,它已经完成了一些令人惊讶的工作,但它只能提供与目前特许 JVM 有限的兼容性。因此,它通常无法使用于本文所关注的企业类别型的服务器应用程序。
用于Java程序的本机程序代码编译器的开放来源码工作也有几个替代选择。这里最重要的项目是 GNU 编译器集(GNU Compiler Collection)的 GCJ.使用诸如 CGJ 之类别的本机程序代码编译器会将独立于平台的 Java 字节码在其执行之前转换成特定于平台的程序代码(这与在 JVM 中执行成对比,在 JVM 中执行通常在执行时将字节码转换成特定于平台的程序代码)。
本机程序代码编译显示出它极有可能成为一种避免在 JVM 中执行的 Java 应用程序启动较慢的方法。但是,使用这种方法的编译器通常都不能与当代特许 JVM 的稳定状态效能相匹配。如果 Java 应用程序使用 Java 平台的动态特性(如使用反射来存取字段或加载在执行时选择的类别),这种情况尤其突出。根据所使用的实作和编译选项,本机程序代码编译也许还会削弱 Java 平台的许多执行时安全特性。最后,由于许可证问题,许多 Java API 不能与已编译的本机程序代码一起使用。由于这些*,本机程序代码编译目前还不是 Java 平台服务器应用程序的一个好选择。
与 Java 执行时环境有许多共同点的一个替代方法是 Microsoft 的 C# 语言和相关的公共语言执行时(Common Language Runtime,CLR)。C# 是 Java 语言的关系紧密的衍生物,CLR 可能容许 C# 在许多平台上使用。CLR 还提供了 JVM 的许多执行时安全特性(尽管有严重削弱安全保证的逃离出口)。Microsoft .Net 实作还支持预编译成本机程序代码的选项以获得更快速启动,这与 GCJ 对 Java 字节码所做的工作相同。当然,Linux 使用者并不能直接使用这项功能,因为 .Net 只适用于 Windows系统。
Mono Project 正致力于为多种Linux产品建置「CLean Room」开放来源码 C# 和等价于 CLR 的产品。现在,该项目中的 C# 编译器已开发完成,而且还完成了大部分的 CLR,Microsoft 已发布将它用于标准化。但是,无论从效能还是功能角度来看,在它成为合理的 Java 平台替代选择之前还有许多工作要做。CLR 只包括了与 Java 核心类别库等价的基本内容。在可以将它看作是企业软件开发的合理选项之前,还需要用许多额外 API 来补充它。
Mono Project 正在致力于开发 CLR 以外的 .Net 其它部分的移植,如果这些移植成功了 ─ 并且如果 Microsoft 不对 .Net 的这些部分强加它的专利权 ─ 那么它们会有助于满足 C# 成为 Linux 上服务器软件开发的可靠平台的需要。但要使那些假设成为现实,还需要做很多工作,同时,Java 程序的本机程序代码编译器和开放来源码 JVM 向那些确实想要避免使用特许 JVM 并可以忍受有限功能性的使用者提供了比较稳定的替代选择。
Apache Tomcat
最普遍存在的 Java 平台服务器应用程序之一是 Apache Tomcat.Tomcat 是基于最初由 Sun 捐赠的来源码的开放来源码项目。它是一个 HTTP 服务器,是 Sun 透过 Java Community Process 开发的、对广泛使用的 servlet 和 JavaServer Page(JSP)技术的正式参考实作。我将在本文中使用 Tomcat 作为样本 Java 应用程序,将其部署成 Linux 上的一个服务。如果您想要尝试自己执行 Tomcat,那么您将需要在系统上安装 Java 开发工具箱(Java Development Kit,JDK),而不是安装更小的 Java 执行时环境(Java Runtime Environment,JRE)。
servlet 和 JSP 技术用于建构 HTTP 服务器应用程序。虽然 servlet 技术中加入了许多特性(包括存取安全性、Session管理和执行绪控制),但它本身祇是粗略地等价于为快速直接的 Java 语言呼叫而定制的 CGI 接口。JSP 技术提供了一种处理动态生成的 HTML 页面的简便方法,这些 HTML 页面被直接编译成 servlet 以用于快速执行时作业。
在这两种技术之外,Tomcat 还提供了其它许多特性。凭它本身的效能,它实际上是全功能 Web 服务器,但它通常在 Linux 系统上与 Apache Web 服务器前端共同使用。Apache 向 Tomcat 提供了许多进阶效能以适合静态内容。对于静态内容所占比例比较高且使用率很高的 Web 应用程序,Apache 前端非常有用。但对于许多简单的 Web 应用程序,就没必要使用它了,当更易于组态和管理时,单独执行 Tomcat 就可提供足够的效能(至少对于以前没有使用过 Apache 的工作人员来说是这样)。
连接埠难题单独执行 Tomcat 的一个大问题是它无法存取标准 HTTP 连接埠 80,除非是作为 root 使用者执行。作为 root 使用者执行服务器应用程序的想法通常并不是上串流公司所讨论的问题,因此我将完全放弃这个想法﹗使用除 80 以外的连接埠是一个更好的选择(例如,Tomcat 缺省连接埠 8080)。这通常适用于测试,但当使用者正在存取服务时,它会导致杂乱的 URL,因为需要在请求中清楚地说明连接埠号。使用非标准连接埠还意味着如果需要外部存取,就需要重新组态所有的防火墙。
xinetd 解决方案
幸好,Linux 支持一些利用 Tomcat(或任何其它使用者方式应用程序)处理连接端口 80 请求的简便方式。一种常用方式是透过 xinetd.xinetd 是带有广泛存取控制和日志记录支持的因特网服务守护程序,它还拥有方便的重新导向特性。重新导向让您将系统组态成接受一个连接埠上的进入请求,然后将请求传递到另一个连接埠或者甚至另一个 IP 地址进行处理。
如果您想要在系统上设定 Tomcat 以处理连接埠 80 请求,就需要加入 xinetd 组态文件来实作这一目的。假设按一般在正常路径上安装了 xinetd,那么您可以透过对 /etc/xinetd.d 目录加入一个文件(以 root 使用者身份)来执行这一作业。清单 1 提供了用于 Tomcat 的一个样本组态文件。
linux已经安装了java,怎么配置环境

set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CLASSPATH 重新登录。三、直接在shell下设置变量 不推荐使用这种方法,因为换个shell,该设置就无效了。这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。只需在shell终端执行下列命令:export JAVA_HOME=/usr...

学习如何使用Linux环境运行Java程序linux下的java

首先,您需要安装一个最新版本的Java虚拟机(JVM),以便运行Java程序。安装Java虚拟机可以通过使用Linux上的包管理器进行。 Debian/Ubuntu和Fedora/CentOS上有不同的包管理器可以使用,请找到一个合适的。安装完JVM之后,您应该在/usr/bin目录中找到Java程序的命令行。接下来,您需要编译Java源代码并生成可...

Linux下Java环境快速启动指南linuxjava启动

yum install java-1.8.0-openjdk 二、设置Java环境变量 在Linux系统下,Java程序需要Java环境变量来正常工作。因此,安装完成OpenJDK后,需要设置环境变量,以保证Java应用程序正常运行。为了设置java的环境变量,有两种方法:(1)使用root用户编辑/etc/profile文件,添加如下代码:export JAVA_HOME=/opt/...

java程序在linux(Ubuntu14.04)下运行需要安装其他的插件么

需要安装JDK,JDK中包含JVM,而JVM是java程序运行的基础。1. 先从Oracle官网下载JDK。先选择同意按钮,然后根据自己的系统下载相应版本。我的系统是Ubuntu14.04 64位的,所以我下载的 2. 创建一个目录/usr/lib/jvm以便于把下载解压后的包放到这个目录下。3. 解压并把解压后的jdk1.8.0_25文件夹放...

linux环境下Java运行环境怎么弄

首先要安装JDK,再要配制环境变量,以下以Bash shell为例 在终端下用VI打开配置文件,方法:vi .bash_profile;按i键进入到插入模式,不要改变原文件,添加$JAVA_HOME=JDK 的安装路径如/opt/jdk

这么样在Linux中配置java的环境变量?求详细步骤 我对Linux不是很...

一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲回车,当询问是否同意的时候,输入yes,回车。之后会在当前目录下生成一个jdk1.6.0_14目录,你可以将它复制到 任何一个目录下。二. 需要配置的环境变量 1...

如何在Linux系统下配置Java开发环境

1、下载JDK,解压,记录JDK的路径;假如路径为/jvm/jdk1.8.25 2、sudo gedit /etc/profile 在打开的文件末尾加入 set java environment JAVA_HOME=/jvm/jdk1.8.25 CLASSPATH=.:$JAVA_HOME/lib.tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH 保存退出 3、注销或者...

如何在Linux上设置JDK的环境变量jdk环境变量linux

第一步:安装JDK 首先,需要在Linux操作系统上安装JDK。推荐使用比较新版本,可以从Oracle官网下载并安装最新版本的JDK。安装完成后,可以在命令提示符下输入java –version命令来检查当前的JDK版本。第二步:设置JAVA_HOME环境变量 要设置JAVA_HOME环境变量,则需要找出JDK安装的目录,一般情况下,可以...

如何在 Ubuntu Linux 中正确地设置 JAVA_HOME 变量 | Linux 中国

首先,通过运行命令核查 JDK 是否已经安装。如果未安装,使用命令安装 JDK。确保 Java 编译器存在于系统中。接着,使用命令获取 Java 编译器可执行文件的位置,通过 readlink 命令获得实际路径。在 Ubuntu 中复制此路径。随后,设置 JAVA_HOME 环境变量,使用已获取的路径。检查 JAVA_HOME 目录的值,并...

linux怎么配置java环境变量

Linux下配置Java环境变量方法:在安装好jdk之后可以通过如下三种方法配置环境变量:1.该计算机只作为开发使用,直接修改/etc/profile文件,所有用户的shell都有权使用这些环境变量,因此可能会给系统带来安全性问题。终端输入命令 vi /etc/profile 编辑profile文件 在profile文件末尾加入:export JAVA_HOME=/usr...

新手如何设定小说环境 环境公益诉讼的审判执行 环境标准执行的优先顺序 计算机的基本执行环境有哪些 环境设定 小说环境怎么设定 社会环境和自然环境 小说大纲环境设定 什么是大环境小环境
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...可是不知道为什么我想去西安的寺庙皈依。 这样对后面的修行会造成影... protobuf使用详解 开机显示睡眠模式什么情况? e31230v2这款处理器怎么样? 怎么样在淘宝收藏夹里看收藏商城东西? 枸杞和这“三物”是好搭档,坚持吃30天,3大好处可能不请自来! 在微信里京东商城里收藏的商品能不能在qq里的京东商城的收藏里找到 oppoai给图片加文字能把框里的文字竖向写吗oppo怎么在图片上加字 新宿御苑的交通信息 南京南站坐公交怎么到御苑宾馆 请问哪里有油烟机、饮水机清洗设备的厂商 为什么从河里捉来的野生鱼,养在缸里,较大的很快就死了,较小的却大多活着? 以前在农村河里常见的野生桂鱼,为何现在很少见了? 苹果手机怎样拒收垃圾短信 乡下河里的野生河鱼,不知学名是什么 一只野生小八哥大概一个月吧,可能学飞掉河里了,现在养了有两个月了,也挺亲人? 河里有一种鱼,很像鲫鱼,跟他的区别是全身金*的,很明显的黄,也跟鲫鱼差不多大,当然是那种野生小鲫 这奇怪的野生小鱼是啥鱼? 我在河里抓小龙虾怎么养不会死,喂他什么吃的? 河里的野生小鱼能能养大吗 在河里抓到的野生小鲤鱼,要怎么喂 深圳无抵押无担保贷款申请容易吗? 深圳无担保贷款好申请吗? 建行理财建信宝1号赎回要等几天 上海裕兴花园所属莘庄什么街道 股票帖权是什么 word中如何在分节符部分调整页脚? 在市场形势好的时候人们往往愿意买入即将配股分红或刚刚除权的股,因为这时容易填权。什么容易填权??? 怎样把WORD里页眉页脚那个共几页分段计算 填权满 是什么意思? 怎么做巧克力果冻 怎样用果冻粉做巧克力果冻 自己交社保养老金能退吗? 活动缺口是什么意思? 资产负债的持续缺口及其含义是什么? 那个世界地震模拟台网的地址是多少啊,给个 想要把活的大闸蟹通过高铁带回去怎么带? 大闸蟹怎么在火车上保存24小时? 怎样学会挤时间和充分利用时间? 玉溪的最低和最高温度 如何让自己变成一个做事情有条不紊,有想法的人? 25℃是温暖的还是凉爽的? 重庆一男子为安心睡懒觉,给6岁儿子留“威胁式”便条,便条上写了什么? 铜川市耀州区养老保险网址 昆明市富民县撒旦镇天气预报 2019年度养老保险交费标准是多少铜川养老保险个人交费标准是多少 2016年度养老保险交费标准是多少铜川养老保险个人交费标准是多少 求一款安卓精美便笺软件(免费版) 要求:界面和便笺比较干净、清新,然后便笺和字体可供选择的颜色和主 谁能给我分别说说昆明、武汉、厦门三个城市的气候特征 假如你是Linda,到学校后发现你的一些物品忘在了家里。你需要写张便条给妈妈。让她帮你带到学校来。