Java生成文件到Sftp目录中无权限问题

前言

java中需要生成文件到指定的sftp目录中,提供给其他的系统或者用户读取文件,但是在程序中生成的文件或者创建的目录到sftp中会显示没有权限去读/写,这是因为tomcat中配置文件导致

解决方案

一、 部署在tomcat中项目:

如果是部署在tomcat中的项目,需要生成文件到sftp目录,但是生成的文件没有权限,比较简单,直接修改tomcat配置文件即可

  1. 修改tomcat/bin/catalina.sh
    vi apache-tomcat-8.5/bin/catalina.sh

  2. 找到UMASK="0027"这一行,修改为UMASK="0022"
    说明:
    - 0027是tomcat默认的权限配置,因为权限是由rwx(读取执行)组成,分别代表的数字为:421, 默认的配置是0027 表示root用户拥有所有权限,当前用户拥有rx权限,其他用户没有权限,因为最后一个数为7,表示421中的一个权限都没有分配给其他用户
    - 0022 表示给其他用户的读和执行的权限,所以这样设置之后,sftp的用户就可以读取生成的文件和文件夹了

  3. 重启tomcat

二、部署在docker中的项目

部署在docker中的项目如果也需要生成文件到sftp目录中并且sftp用户有权限读取,有2个问题,1. 需要挂载sftp目录 2. 设置tomcat的权限

  1. 如果没有将sftp的目录挂载,需要先挂载目录
    需要重新运行容器,并添加以下命令
	docker run -d \
	...
	# 这里需要修改为挂载生成文件的目录 
	-v /data/sftpuser1/:/data/sftpuser1
	...
  1. 修改tomcat的catalina.sh
    这里有2种方法,一种是直接进入容器修改容器中的catalina.sh,一种是挂载catalina.sh, 比较建议第二种挂载的方式,否则下次重新创建容器的时候还会出现该问题
    1. 直接修改的方式:
      -进入容器
      docker exec -it /bin/bash

      -修改catalina.sh
      找到UMASK="0027"这一行,修改为UMASK="0022"

      -重新启动容器即可

    2. 挂载catalina.sh方式:
      需要删除旧容器,重新运行新容器, 并添加命令挂载:

      	docker run -d \
      	...
      	-v /server/catalina.sh:/usr/local/tomcat/bin/catalina.sh \
      	...
      

      说明:
      - 挂载catalina.sh的目录需要根据catalina.sh放置路径来配置,宿主机的就随便放一个位置,容器中的catalina.sh如果不确定路径,需要进入容器中查看一下catalina.sh的路径,然后再配置挂载的路径

      -修改宿主机中的catalina.sh
      找到UMASK="0027"这一行,修改为UMASK="0022"

      -重新运行容器

你可能感兴趣的:(Java)