在我的一个VPS上,
我在/opt/tomcat
上使用用户tomcat:tomcat
的tomcat服务器,
我有一个主机运行spring应用程序来为用户someuser
的子域提供服务
即http://crm.someuser.com
现在我需要将文件/图像写入该文件夹/目录,即/home/someuser/crm.someuser.com
,
每当我尝试写文件时,都会发生权限被拒绝异常。
答案 0 :(得分:1)
文件系统权限问题。
简短回答,通过使用 chmod linux命令更改文件夹权限来授予目标文件夹的写入权限
e.g。
chmod ugoa + w /home/someuser/crm.someuser.com
当然你必须是该文件夹的所有者,如果不是至少你有sudo功能,那么你可以在该文件夹上执行chmod命令。
sudo ugoa + w /home/someuser/crm.someuser.com
在文件夹上执行list命令
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(meaing read and write permissions)
答案很长,上面的答案将允许任何用户写入该文件夹,因为它具有用户,组和其他人的写入权限。一种好方法是只允许属于某个组的用户能够写入该文件夹。
E.g。根据您的使用情况,您可能希望将该用户添加到tomcat组并将该文件夹的所有者更改为tomcat。然后将tomcat组的写权限授予该文件夹。这样只有属于tomcat的用户才能写入该文件夹。
这是更新的解决方案。
创建一个有权写入这些文件夹的新组。
groupadd YOURGROUP
更改每个文件夹的组所有者。 (您可以按原样保留当前所有者,并通过在命令中传递相同的所有者来仅修改组)
sudo chown someuser:YOURGROUP /home/someuser/crm.someuser.com
更改该文件夹的权限,以便YOURGROUP具有读/写功能
sudo chmod g+rw /home/someuser/crm.someuser.com
最后,将tomcat添加到该组。因此tomcat将具有对这些文件夹的读/写功能。
sudo usermod -a -G YOURGROUP tomcat
其中tomcat是tomcat使用的有效用户(其他人使用tomcat7,你需要检查系统上tomcat的实际用户名)
答案 1 :(得分:0)
问题与Spring app无关;您只需为该文件夹上的tomcat用户设置读取,写入权限。您可以尝试使用:setfacl命令(http://manpages.ubuntu.com/manpages/zesty/en/man1/setfacl.1.html)或类似的东西。 E.x:
setfacl -m u:tomcat:rw /home/someuser/crm.someuser.com
希望它对你有所帮助。
答案 2 :(得分:0)
为我工作:
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;
}