简单记录下,如有必要,将深入补充:

一、非root用户运行Tomcat及原因

由于项目中,为了安全需要,Tomcat将禁止以root形式启动,原因很简单,举个例子,一旦有人恶意将jsp文件透过某个别的漏洞传到你的服务器中,那么你的程序运行过程中,将会远端被别人恶意执行代码,轻则服务器被黑,重则通过这台跳板进入你的后台,病毒式的入侵到内网的其他机器(例如大量的Redis以及MongoDB置于内网时是不设置密码的),所以以非root的方式启动Tomcat对于商用的环境下,是必须的。

默认的情况下,Linux中的Tomcat都由bin目录下的catalina.sh执行,那么Tomcat的启动用户就由有权限启动Tomcat的运行命令的人:

./catalina.sh start

如果希望是非root用户启动,可以通过递归改变文件主以及文件所属的组获得执行权限

chown -R user1 ./apache-tomcat-xxx

即如果是以root权限启动的Tomcat服务,使用如下命令:

ps -ef|grep tomcat

查看到你的Tomcat以什么权限启动的,看到启动主为红线标注角色:

那么下面我使用非root用户启动下:

二、非root用户文件操作被禁止

我的问题是Web项目所有的一切功能正常使用,但是在一处与SpringMVC的MultipartFile文件接收的Controller报错如下:

Processing of multipart/form-data request failed. /usr/local/apache-tomcat-9.0.4/work/Catalina/localhost/EDoctor/upload_50259820_2122_4f77_af6d_17f1fd261a13_00000001.tmp (Permission denied)

以及在出错堆栈的打印中看到Permission denied和IOException其实本能想到是权限的问题,由于可以使用非root用户运行tomcat,但是现在重点是,Tomcat中存放tmp中间文件的目录到底在哪里?

三、解决方法

其实Tomcat中有一个work目录,其作用的话主要有下面两点:

  • jsp运行时都要先转换成servlet,tomcat容器启动时会在目录下的work目录中生成一系列的文件夹和.java文件和编译后的.class文件。
  • jsp最终转化为servlet,work的作用就是加快速度,如果jsp没有变化(依据时间戳)就不再重新编译。

可以看到大概意思是work是Tomcat的工作目录,一般我们注重权限以为是webapp目录下的权限问题,其实还有一个权限就是真正的中间文件生成的工作目录:

/usr/local/apache-tomcat-9.0./work/Catalina/localhost/

所以只需要将该文件的目录主修改为你想要的用户,用该用户启动Tomcat就不会出现问题了。

四、总结

那么总结一下,大概就是Tomcat的用户权限问题需要格外关注$CATALINA_HOME/work/Catalina/localhost/目录下的文件主或组的权限问题

【出错记录】Tomcat非root用户启动无法拥有权限读写文件的更多相关文章

  1. 怎么让普通用户达到root用户也可以拥有权限修改文件(CentOS系统)

    为什么会提出这个问题呢? 答:因为啊,比如我们在大数据集群搭建的时候,经常会需要配置环境变量,如/etc/profile.那么,问题来了,每次必须得都切换到root用户才能,但是呢,如何可以在普通用户 ...

  2. centos7新增用户并授权root权限、非root用户启动tomcat程序

    一.centos7新增用户并授权root权限 cat /etc/redhat-release查看centos版本号 1.禁用root账户登录 vim /etc/ssh/sshd_config 找到这一 ...

  3. 二进制方式安装docker(非root用户启动docker)

    二进制方式安装docker(非root用户启动docker) 一.下载安装包: 地址:https://download.docker.com/linux/static/stable/x86_64/ 这 ...

  4. docker 非root用户修改mount到容器的文件出现“Operation not permitted

    使用环境centos7 x86-64 内核版本4.19.9 docker使用非root用户启动,daemon.json配置文件内容如下: # cat daemon.json { "usern ...

  5. 使用非root用户启动tomcat

    以下操作均为以root用户运行1.添加tomcat用户组 /usr/sbin/groupadd tomcat 2.添加tomcat用户,并限制登录 /usr/sbin/useradd -s /bin/ ...

  6. Ubuntu配置Tomcat9非root用户启动

    unix类系统的root用户具有极大的权利,所以很多时候我们不希望程序以root身份启动,这也就是配置Tomcat以指定身份(非root)启动的初衷,虽然也没人来攻击我的服务器,但本着学习学习的目的, ...

  7. 短网址资料-nginx非root用户启动-systemctl启动脚本-分割root权限

    https://www.cnblogs.com/aspnethot/articles/3492191.htmlhttps://www.cnblogs.com/aspnethot/articles/34 ...

  8. Centos6.4 设置开机自动以某个非root用户启动脚本

    开机自动运行脚本,可以将脚本的执行命令放在 /etc/rc.d/rc.local 文件中,但是这样开机自动运行这个脚本的用户默认为root. 如果想以某个非root用户运行脚本,可以使用如下命令: s ...

  9. fedora 非root用户访问socket 没用权限

    在非root用户下执行基于Libpcap库编写的应用程序时不能正常运行,原因是由于libpcap库使用raw socket的套接字.而Raw Socket的使用需要root权限,否则raw socke ...

随机推荐

  1. Appium+java 获取元素状态

    元素的属性我们经常会用到,当定位到某个元素后,有时会需要用到这个元素的text值.className.resource-id.checked等.  一般标准的属性我们都可以通过get_attribut ...

  2. selenium的基本用法

    selenium需要配合一个driver  我使用的是chrome的driver 注意一定要下载对应浏览器版本的driver 否则会报错的 http://chromedriver.storage.go ...

  3. Python之给程序传参数

    1.代码 import sys # 导入系统 args = sys.argv # 获取系统参数 if(args.__len__() == 2): print("%s是世界上最好的语言!&qu ...

  4. [20181130]hash冲突导致查询缓慢.txt

    [20181130]hash冲突导致查询缓慢.txt --//昨天看了链接https://jonathanlewis.wordpress.com/2018/11/26/shrink-space-2/, ...

  5. [20181015]为什么是3秒.txt

    [20181015]为什么是3秒.txt --//以前测试:连接http://blog.itpub.net/267265/viewspace-2144765/=>为什么是12秒.txt.--// ...

  6. 【MM系列】SAP MB1A MB1B MB1C MB11 MIGO的区别解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MB1A MB1B MB1C ...

  7. Python输出和输入

    一.input()函数 在 Python 中,使用内置函数 input()可以接收用户的键盘输入. input()函数的基本用法如 下: variable = input("提示文字") 其中,var ...

  8. c/c++ lambda 表达式 介绍

    lambda 表达式 介绍 问题:假设有个需求是,在vector<string>找出所有长度大于等于4的元素.标准库find_if函数的第三参数是函数指针,但是这个函数指针指向的函数只能接 ...

  9. 一个好看的php验证码源码

    <?php     $w = 80; //设置图片宽和高 $h = 26; $str = Array(); //用来存储随机码 $string = "ABCDEFGHIJKLMNOPQ ...

  10. Windows 下自动同步文件夹内容到另一个文件夹下

    实现windows 使用bat脚本文件,复制文件夹到另一个盘,参考如下代码:/y是可以不显示:提示你需要覆盖一个文件,如下图: bat文件内容为 @echo off echo "使用bat脚 ...