tomcat版本升级导致的umask问题

news2024/12/26 1:04:28

文章目录

  • 1、问题背景
  • 2、问题分析
  • 3、深入研究
  • 4、umask
    • 4.1、umask的工作原理
    • 4.2、umask的计算方式
    • 4.3、示例
    • 4.4、如何设置umask
    • 4.5、注意事项

1、问题背景

我们的java服务是打成war包放在tomcat容器里运行的,有一天我像往常一样去查看服务的日志文件,却提示没有权限(Permission denied)

2、问题分析

查看日志文件列表发现,9月5日之前的日志文件权限位是-rw-r--r--,而9月5日之后的日志文件权限位是-rw-r-----,tomcat进程是用root用户启的,服务生成的日志文件也就属于root用户的,而我是以普通用户登录的,由于权限位少了一个r,这也就导致我9月5日之后的日志文件没有权限查看。

为了找到问题所在,我切换到root用户身份登录。

由于linux系统文件初始的权限位与umask有关,于是我执行umask命令,输出0022,并且我尝试创建一个文件,其权限位是-rw-r--r--也对应上了呀。
在这里插入图片描述
为啥tomcat进程所生成的日志文件,权限位就少了一个r呢?

就在我疑惑不解时,我发现tomcat进程的启动命令行有这样一个系统属性-Dorg.apache.catalina.security.SecurityListener.UMASK=0027,如果是umask是0027的话,那一切都解释得通了.

3、深入研究

查看tomcat的catalina.sh,发现如下与umask相关的信息:

#   UMASK           (Optional) Override Tomcat's default UMASK of 0027

# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0027"
fi
umask $UMASK

# Make the umask available when using the org.apache.catalina.security.SecurityListener
JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"

-z用于测试字符串长度,如果为0则为真,因此如果没有设置UMASK变量则默认为0027,如果设置了则可以改变tomcat默认的umask,最后将umask作为系统属性添加到tomcat进程的启动命令行上。

不过为什么9月5日之前的权限位与9月5日之后的不一样呢?我也咨询了下公司的运维同事,是tomcat版本升级导致的,这下彻底解开谜团了,下面介绍下umask的相关知识。

4、umask

在linux系统中,umask是一种用于决定新创建文件和目录的默认权限的设置。umask定义了文件系统创建文件和目录时默认应该屏蔽掉的权限位。

4.1、umask的工作原理

umask设置了一个默认的权限掩码,这个掩码与文件系统的默认权限组合,决定了新创建文件和目录的实际权限。

默认情况下,linux文件系统的文件默认权限是644(即rw-r–r–),目录的默认权限是755(即rwxr-xr-x)。

4.2、umask的计算方式

umask值以八进制表示,每一位分别对应文件的owner、group和其他用户的权限。

umask的每一位取值范围是0到7,数值越小,实际权限越大。

新创建文件或目录的权限计算公式为:(默认权限)&(~umask值)

4.3、示例

假设umask设置为0022:

文件的默认权限是644。应用umask后,计算新文件权限:0644 & ~0022 = 0640(即rw-r-----)。

目录的默认权限是755。应用umask后,计算新目录权限:0755 & ~0022 = 0755(即rwxr-xr-x),因为目录需要执行权限。

4.4、如何设置umask

临时设置:在当前终端会话中设置umask umask 0022

永久设置:在用户的.bashrc、.profile或/etc/profile文件中设置umask值,这样每次用户登录时都会应用这个设置。

echo "umask 0022" >> ~/.bashrc
source ~/.bashrc

全局设置:在/etc/profile或/etc/bash.bashrc中设置umask,这将影响所有用户的默认umask值。

4.5、注意事项

umask只影响新创建的文件和目录的权限,不会改变已存在文件和目录的权限。

在设置umask时,应谨慎考虑权限的安全性,避免过于宽松的权限设置。

不同的linux发行版和不同的环境可能有不同的默认umask值。

综上所述,通过合理配置umask,系统管理员可以确保文件和目录在创建时具有适当的权限,从而增强系统的安全性。

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

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

相关文章

Mysql高级篇(中)——多版本并发控制 MVCC

多版本并发控制 MVCC 一、概述二、基本原理三、实现原理四、示例解释五、MVCC 优点六、现实中的实现七、MVCC 三剑客1. ReadView2. Undo Log3. Purge4. 三者之间的关系:5. 示例6. 总结 八、MVCC 整体操作流程⭐、readview1. 作用2. 工作机制3. 数据版本的可见性判断…

[云服务器15] 全网最全!手把手搭建discourse论坛,100%完成

首先,由我隆重地介绍Discourse: 这是一个优秀的论坛部署平台,相较于flarum Discuz!,有着更加简洁的画面、完全开源等优点,同时资源占用也不高! 并且,这和我们亲爱的雨云论坛是有几分相似的哦&…

国庆偷偷卷!小众降维!POD-Transformer多变量回归预测(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现POD-Transformer多变量回归预测,本征正交分解数据降维融合Transformer多变量回归预测,使用SVD进行POD分解(本征正交分解); 2.运行环境Matlab20…

Windows——解除Windows系统中文件名和目录路径的最大长度限制

第一步:打开本地组策略编辑器 按下Win R键打开运行窗口,输入 gpedit.msc 并回车,打开本地组策略编辑器。 第二步:开启 长路径设置 第三步:重启计算机

Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world!

Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world! (1)首先需要安装apache httpd 2.4 web服务器: Windows安装启动apache httpd 2.4 web服务器-CSDN博客文章浏览阅读222次,点赞5次&…

Spark“数字人体”AI挑战赛_脊柱疾病智能诊断大赛_GPU赛道亚军比赛攻略_triple-Z团队

关联比赛: Spark“数字人体”AI挑战赛——脊柱疾病智能诊断大赛 triple-Z团队答题攻略 1 赛题分析 1.1 赛题回顾 本次比赛的任务是采用模型对核磁共振的脊柱图像进行智能检测。首先需要对5个椎体和6个椎间盘进行定位,这部分实际上就是11个关键点的检测任务&…

B2B商城交易解决方案:赋能企业有效重塑采购与销售新生态

在电商零售领域,商城系统始终是企业搭建商城的关键利器。 伴随着电商行业的蓬勃发展,各类新模式层出不穷,各种商城系统也应运而生,其中B2B商城更是最为常见的一种。 近年来,得益于电子商务的迅猛发展,B2B商…

C++入门基础知识92(实例)——实例17【实现一个简单的计算器】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于实现一个简单的计算器的相关内容&#x…

详细整理!!html5常用标签

文章目录 前言一、HTML简介1.HTML文件结构2.各标签意义 二、HTML标签介绍1.标题标签2.段落标签3. 换行标签4.hr标签5. span标签6.div标签7.img标签8.超链接标签9.注释标签10.空格11.格式化标签12.sup上标和sub下标13. pre预格式化标签14.table 表格标签table 标签基础内容合并单…

Java中异常的认识和创建

文章目录 前言一、异常的概念与体系结构 1.1 异常的概念1.2 异常的体系结构1.3 异常的分类二、异常的处理 2.1.防御式编程2.2 异常的抛出2.3 异常的捕获2.4 异常的处理流程三、自定义异常类 一、异常的概念与体系结构 1.1 异常的概念 在生活中,一个人表情痛苦&…

TI DSP TMS320F280025 Note16:EPWM的原理与使用

TMS320F280025 模数转换器(ADC) ` 文章目录 TMS320F280025 模数转换器(ADC)时基TB子模块计数比较CC子模块动作AQ子模块死区DB子模块斩波PC子模块错误联防模块TZ子模块数字比较DC子模块中断ET子模块EPWM的使用EPWMDriver.cEPWMDriver.h每个EPWM模块都包含多个子模块:时基TB子模…

系列二、案例实操

一、创建表空间 1.1、概述 在Oracle数据库中,表空间是一个逻辑存储单位,它是Oracle数据库中存储数据的地方。 1.2、超级管理员登录 sqlplus / as sysdba 1.3、创建表空间 create tablespace water_boss datafile C:\Programs\oracle11g\oradata\orcl\…

【NTN 卫星通信】基于NR的NTN RAN架构

1 引言 3GPP中,38.821协议中,研究了如何最大限度地减少对NG-RAN中新接口和协议的需求,以支持非地面网络。 研究了包括透传星和再生星的RAN架构。 2 基于透传星的NG-RAN架构 2.1 概述: 对于透传模式,卫星有效载荷在上行链路和下行链路方向上实现频率转换和射频放大器。它…

Python的异步编程

什么是协程? 协程不是计算机系统提供,程序员人为创造。 协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法: greenlet&…

推荐4个精准高效的录音转文字软件。

录音转文字在很多的场景中都能够为我们提供便利,比如:可以将课堂录音转换为文字,方便复习和整理笔记,可以将会议录音转换为文字,快速准确地记录内容,可以将采访录音转成文字,提高新闻稿件的撰写…

在VMware虚拟机上部署polardb

免密登录到我们的虚拟机之后,要在虚拟机上部署polardb数据库,首先第一步要先克隆源码: 为了进SSH协议进行传输源码需要先进行下面的步骤: 将宿主机上的私钥文件复制到虚拟机上 scp "C:\Users\waitw\.ssh\id_rsa" ann…

BCJR算法——卷积码的最大后验译码

定义:输入序列为 其中每比特,同时相应的输出序列为 其中每一码字的长度为n,定义在i时刻的编码器的状态为,对于时刻里有 表示输出码字和卷积码第i时刻的输入和第i-1时刻的状态有关(包括寄存器和输出部分)&am…

grafana全家桶-loki promtail收集k8s容器日志

loki是grafana旗下轻量级日志收集工具,为了减少loki对集群的影响,把loki的agent日志收集端promtail部署在k8s集群中,loki server部署在集群外面。这样简单做一个解耦,避免大量读写的应用影响到集群内业务服务。 一、promtail部署…

docker学习笔记(1.0)

docker命令 下载镜像相关命令 检索:docker search 比如:docker search nginx 是查看有没有nginx镜像 后面的OK表示是不是官方镜像,如果有就是官方镜像,如果没有就是第三方的。 下载:docker pull 比如&#xff1a…

USB 3.1 标准 A 型插头到 USB 3.1 Micro-B 型插头电缆组件的电线连接

电线分配 下表定义了电线编号和电线的信号分配: Unshielded twist pair:非屏蔽双绞线Shielded differential pair:屏蔽差分对Braid:编织层Cable external braid to be 360 terminated on to plug metal shell:电缆外部…