tomcat 创建的文件权限和 linux umask、acl

本贴最后更新于 1689 天前,其中的信息可能已经时移俗易

原文环境:CentOS7
需求:tomcat 里 web 应用创建的文件,放于指定目录下、提供给其他应用读取(比如 ftp、nginx)。
问题:丢到 tomcat 里的 web 应用,创建出来的文件或文件夹 others 没有读权限,比如:

drwxr-x--- 2 tomcat tomcat 4096 Jun 16 17:57 temp -rw-r----- 1 tomcat tomcat 0 Jun 16 17:57 tempfile12

解决方法一
直接在 web 应用创建文件/文件夹时、通过代码设定权限,比如 Java 里这个 stackoverflow 答案提到的 Files#setPosixFilePermissions 方法。
但是缺点也很明显:一个一个改太麻烦了。

解决方法二
见识少、google 了很久才知道根本原因是 tomcat 启动脚本 catalina.sh 里的这一段:

# UMASK (Optional) Override Tomcat's default UMASK of 0027 # Set UMASK unless it has been overridden if [ -z "$UMASK" ]; then UMASK="0027" fi umask $UMASK123456

原来是当初看 tlcl 时一看很简单就忘记的 umask……就说怎么 tomcat 用户直接命令行 touchmkdir 的文件权限就很宽松。
不想动 tomcat 的脚本,所以就在 tomcat 下的.bashrc 里加了这个 UMASK 变量:

export UMASK=0221

参考自这个 so 问题 Tomcat 8 change catalina.out permissions to be readable by all

解决方法三
Linux 基本的权限控制仅可以对所属用户、所属组、其他用户进行的权限控制,而不能精确地控制每个用户的权限。ACL 规则就是用来解决这个问题的。

使用 ACL 规则,我们可以针对单一账户设置文件及目录的访问权限。

实验环境:

操作系统:CentOS Linux release 7.5.1804 (Core)

组:默认用户组

用户:test❌1010:1010::/home/test:/bin/bash

目录: /var/www/web/1.com

已设置 acl 规则的文件

设置 ACL 规则

命令基本用法

setfacl < 选项 > [规则] < 文件 >

-m 新增一条 ACL 规则

-x 删除一条 ACL 规则

-b 清空所有 ACL 规则

给某个目录添加 acl 规则:

setfacl -m u:qudao:x /var/www/web/1.com

为目录添加默认 ACL 规则

setfacl -m d:u:test1:rwx test_dir

设置好后 再对改用户对 /root 目录的访问进行限制

setfacl -m d:u:test1:x test_dir
搜索 linux 权限相关问题很容易看到有人提到 ACL(Access Control List),参考一些使用指南(比如 ArchLinux Wiki)、简单使用比如:

setfacl -Rdm "u::rwx,g::rwx,o::rx" upload/1

-m:修改, -d:继承 parent 目录权限,-R:同样应用到 upload 的当前所有子文件(夹)

然后在 upload 文件夹下尝试创建文件,可以看到:

drwxrwxr-x+ 1 root root 8 Jul 5 16:55 temp drwxrwxr-x+ 1 docker docker 8 Jul 5 16:55 temp2 -rw-rw-r--. 1 root root 0 Jul 5 16:55 tempfile -rw-rw-r--. 1 docker docker 0 Jul 5 16:55 tempfile21234
  • 子文件继承了 upload 的权限设定
    参考这个 PDF PosixAccessControlInLinux

    The umask has no effect if a default ACL exists / 设置了默认 ACL(-d)、umask 就不起效了。

  • 新建的子目录也在 ACL 管理下(有 + 标记)
  • 文件默认没有 execute 权限

补充问题:

  1. umask 是进程相关的参数,linux 系统有 umask 设置(CentOS 在/etc/profile 里有一段)、但并没有 UMASK 这个变量(这个只是 tomcat 用到)。
  2. ACL 只是权限相关,并不能改变文件(夹)的用户和 group;后者可以看下 chown 的 s bit
  3. 看了前面的 PDF 和 wikipedia,感觉 ACL 也是挺复杂/宽泛的概念:比如 named user 是群组概念、不仅 file system 用还有网络 NACL、不限于 linux、windows 也有……也是挺搞不清的。

参考链接

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 1 关注
1 操作
zhaozhizheng 在 2020-08-18 10:19:15 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
zhaozhizheng
没有人会关心你付出过多少努力,撑得累不累,摔得痛不痛,他们只会看你最后站在什么位置,然后羡慕或者鄙夷 北京

推荐标签 标签

  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 179 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 706 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 161 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 366 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 34 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 726 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 141 回帖
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1742 回帖 • 2 关注
  • Outlook
    1 引用 • 5 回帖 • 2 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 342 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    166 引用 • 314 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 8 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1280 回帖 • 5 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 4 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖 • 1 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 181 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 640 关注
  • 叶归
    6 引用 • 17 回帖 • 14 关注