[英]How to give permission to spring application running under tomcat to write on another user directory
在我的一個 VPS 上,我在/opt/tomcat
上有 tomcat 服務器,用戶tomcat:tomcat
,我有一台運行 spring 應用程序的主機來為用戶someuser
的子域提供服務,即http://crm.someuser.com
現在我需要將文件/圖像寫入該文件夾/目錄,即/home/someuser/crm.someuser.com
,每當我嘗試寫入文件時,都會發生權限被拒絕的異常。
文件系統權限問題。
簡短回答,通過使用chmod linux 命令更改文件夾權限來授予對目標文件夾的寫權限
例如
chmod ugoa+w /home/someuser/crm.someuser.com
當然,您必須是該文件夾的所有者,至少您具有 sudo 功能,以便您可以在該文件夾上執行 chmod 命令。
須藤 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(讀取和寫入權限)
長答案,上面的答案將允許任何用戶寫入該文件夾,因為它對用戶、組和其他人具有寫入權限。 一個好方法是只允許屬於一個組的用戶能夠寫入該文件夾。
例如,根據您的用例,您可能希望將該用戶添加到 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的實際用戶名)
問題與 Spring 應用無關; 您只需為該文件夾中的 tomcat 用戶設置讀、寫權限。 您可以嘗試使用: setfacl 命令( http://manpages.ubuntu.com/manpages/zesty/en/man1/setfacl.1.html )或類似的東西。 前任:
setfacl -m u:tomcat:rw /home/someuser/crm.someuser.com
希望對你有幫助。
這對我有用:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.