Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何授予在tomcat下运行的spring应用程序在另一个用户目录上写入的权限_Java_Linux_Spring Mvc_Tomcat_Permissions - Fatal编程技术网

Java 如何授予在tomcat下运行的spring应用程序在另一个用户目录上写入的权限

Java 如何授予在tomcat下运行的spring应用程序在另一个用户目录上写入的权限,java,linux,spring-mvc,tomcat,permissions,Java,Linux,Spring Mvc,Tomcat,Permissions,在我的一个副总裁身上, 我在/opt/tomcat上安装了tomcat服务器,用户为tomcat:tomcat, 我有一个主机,它运行spring应用程序来服务用户someuser的子域 i、 e 现在我需要将文件/图像写入该文件夹/目录,即/home/someuser/crm.someuser.com, 每当我尝试写入文件时,就会出现权限被拒绝的异常。该问题与Spring app无关;您只需为tomcat用户在该文件夹上设置读写权限。您可以尝试使用:setfacl命令或类似的命令。E.x: s

在我的一个副总裁身上, 我在/opt/tomcat上安装了tomcat服务器,用户为tomcat:tomcat, 我有一个主机,它运行spring应用程序来服务用户someuser的子域 i、 e

现在我需要将文件/图像写入该文件夹/目录,即/home/someuser/crm.someuser.com,
每当我尝试写入文件时,就会出现权限被拒绝的异常。

该问题与Spring app无关;您只需为tomcat用户在该文件夹上设置读写权限。您可以尝试使用:setfacl命令或类似的命令。E.x:

setfacl -m u:tomcat:rw /home/someuser/crm.someuser.com

希望对您有所帮助。

文件系统权限问题

简短回答,通过使用chmod linux命令更改文件夹权限来授予目标文件夹的写入权限

e、 g

chmod ugoa+w/home/someuser/crm.someuser.com

当然,您必须是该文件夹的所有者,如果不是,至少您具有sudo功能,以便可以在该文件夹上执行chmod命令

sudo ugoa+w/home/someuser/crm.someuser.com

对文件夹执行列表命令

ls -alh
-rw-r--r--  1 user user  675 Mar  14  2017 /home/someuser/crm.someuser.com 
执行chmod命令后,写权限应该显示如下内容

ls -alh
-rw-rw-rw-  1 user user  675 Mar  14  2017 /home/someuser/crm.someuser.com 
您会注意到rw对该文件夹具有读写权限

长答案,上面的答案将允许任何用户写入该文件夹,因为它对用户、组和其他人具有写入权限。一个好方法是只允许属于某个组的用户能够写入该文件夹

例如,根据您的用例,您可能希望将该用户添加到tomcat组,并将文件夹的所有者更改为tomcat。然后授予tomcat组对该文件夹的写入权限。这样,只有属于tomcat的用户才能写入该文件夹

这是更新后的解决方案

创建一个新组,该组将具有写入这些文件夹的权限

groupadd YOURGROUP
更改每个文件夹的组所有者。通过在命令中传递相同的所有者,可以保留当前所有者的原样并仅修改组

sudo chown someuser:YOURGROUP /home/someuser/crm.someuser.com
更改该文件夹的权限,以便您的组具有读/写功能

sudo chmod g+rw /home/someuser/crm.someuser.com
最后,将tomcat添加到该组中。因此tomcat将具有对这些文件夹的读/写功能

sudo usermod -a -G YOURGROUP tomcat
如果tomcat是tomcat使用的有效用户,其他人使用tomcat7,您需要在您的系统上检查tomcat的实际用户名

public Path getPathdoc(String filename) {
    //return Paths.get(UPLOADS_FOLDER).resolve(filename).toAbsolutePath();
    return Paths.get("/var/lib/mysql-files").resolve(filename).toAbsolutePath();
}
在这里,您可以使用:rwxrwxrwx设置所有权限

 @Override
    public String copydoc(MultipartFile file) throws IOException {
        String uniqueFilename = file.getOriginalFilename();
        Path rootPath = getPathdoc(uniqueFilename);
        log.info("rootPath: " + rootPath);
        Files.copy(file.getInputStream(), rootPath);
        Files.setPosixFilePermissions(getPath(uniqueFilename), PosixFilePermissions.fromString("rwxrwxrwx"));
        return uniqueFilename;
    }

长答案非常适合我的情况,因为它也需要安全。但我对这句话感到困惑。授予tomcat组对该文件夹的写入权限。您的意思是为组授予该文件夹的写入权限。我现在怀疑这个文件夹。因为默认情况下,子域文件夹的所有者为nobody。这不是将来的问题吗?好的,如果您想以安全的方式使用它,您当然可以创建一个对这些文件夹具有写入权限的组。我不确定每个域/用户是如何管理的,但根据您提供的内容,我将创建一个组,而不管哪个域将拥有该文件夹。将组所有者更改为所有者:组,其中组是定义的新组。可以使用chown命令执行此操作。然后,如您所述,将writer权限设置为g+w,以便属于该组的任何人都可以写入这些文件夹。最后,添加tomcat作为该组的一部分。我已经完成了与前面提到的相同的操作,并且还与getfacl进行了检查,但不起作用。如果这能奏效,这将是我的最佳解决方案。这里是img的链接