【问题标题】:Ubuntu Tomcat CIFS : Allow tomcat user to write file using ServletUbuntu Tomcat CIFS:允许 Tomcat 用户使用 Servlet 写入文件
【发布时间】:2014-05-13 07:37:45
【问题描述】:

我有以下环境设置。

Server: Ubuntu    
App Server: Tomcat7
Java: JDK 7

servlet 需要将文件写入挂载文件夹。 Tomcat 正在使用名为 tomcat7 的用户运行,而 CIFS 与名为 coder 的不同用户绑定在 /mntt/mydir/

/mntt/mydir的权限设置为777

服务将创建一个文件夹并尝试将文件上传/写入该文件夹。

创建文件夹时,它的权限设置为755,文件的权限设置为644,文件和文件夹的所有者都是coder,而不是tomcat7

所以,当我的程序尝试在文件中写入内容时,它会抛出 Permission denined 异常。

更新文件创建代码

//Create directory
File uploadFile = new File(dirpath);
uploadFile.mkdirs();

//Create and Write to File
OutputStream stream = new FileOutputStream(new File(dirPath+"/upload"));

请指导。另外,如果您需要更多信息,请告诉我。

谢谢

【问题讨论】:

  • 我不经常使用 linux,但我认为在 /mntt/mydir 上设置 gid 标志会导致新目录从父目录继承用户/组。 en.wikipedia.org/wiki/Setuid#setgid_on_directories
  • coder 用户身份创建文件/目录的服务是什么?你可以控制/改变什么吗?
  • @mavroprovato 这是简单的java代码。请找到更新的问题

标签: java tomcat ubuntu cifs


【解决方案1】:

您可以如下更改Java服务,使创建的文件获得777权限,其他用户可以写入:

    Path path = FileSystems.getDefault().getPath(
            file.getAbsolutePath());
    Files.setPosixFilePermissions(path,
            EnumSet.allOf(PosixFilePermission.class));

其中file 是代表文件的java.io.File 对象。如果您希望tomcat 用户能够在该目录中创建文件,您可以对包含该文件的目录执行相同的操作。

【讨论】:

  • 我试过了,但它说我没有权限更改文件的权限
  • 如果您以coder 用户身份使用命令行进入该目录并执行chmod 777 file 是否也会失败?这很奇怪,在 linux 中,文件的所有者可以更改该文件的权限...
  • 我以 root 用户身份登录,然后我可以更改权限。程序将目录创建为所有者coder,但之后当我尝试使用以下代码更改权限时,它显示Permission Denied
  • 我试过你的代码,它抛出异常Operation not permitted
  • 所以这是一个 linux 问题,如果您无法更改所有者的权限,那么您就不走运了。看看这个,它可能会有所帮助:askubuntu.com/questions/342791/file-permissions-wont-change.
【解决方案2】:

终于解决了问题!!

我通过修改/etc/defaults/tomcat7coder用户身份运行tomcat服务。

另外,我必须更改几个tomcat 目录的权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多