当前位置: 首页 > news >正文

tomcat版本升级导致的umask问题

文章目录

  • 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" ]; thenUMASK="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.lryc.cn/news/453173.html

相关文章:

  • Golang | Leetcode Golang题解之第455题分发饼干
  • vscode+stfp插件,实现远程自动同步文件代码
  • python 实现djb2哈希算法
  • 文件夹作为普通文件而非子模块管理
  • 7c结构体
  • 浅聊前后端分离开发和前后端不分离开发模式
  • RabbitMQ篇(死信交换机)
  • HBase 的 MemStore 详解
  • 【嵌入式软件-数据结构与算法】01-数据结构
  • Windows应用开发-解析AVI视频文件
  • 探索TCP协议的奥秘:Python中的网络通信
  • 每日学习一个数据结构-树
  • 简单PCL库读文件(linux vscode编译)
  • 【自动驾驶】最近计划看的论文
  • vue3学习:axios输入城市名称查询该城市天气
  • 影刀RPA实战:Excel拆分与合并工作表
  • STM32三种启动模式:【详细讲解】
  • Ray_Tracing_The_Next_Week
  • DBT hook 实战教程
  • SpringBoot整合JPA详解
  • 【微服务】springboot 实现动态修改接口返回值
  • 【前端开发入门】html快速入门
  • python配置环境变量
  • 从0到1:培训机构排课小程序开发笔记一
  • 方法重载(Overload)
  • [论文笔记]SGPT: GPT Sentence Embeddings for Semantic Search
  • 基于微信小程序的旅游拼团系统
  • 富格林:警悟可信经验安全投资
  • 【Linux】使Ubuntu自适应窗口大小并与主机共享文件
  • C++ 语言特性18 - static_assert 介绍