簡體   English   中英

如何授予在tomcat下運行的spring應用程序在另一個用戶目錄上寫入的權限

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM