java - 为什么 "Local System"帐户缺少对 NTFS 文件系统的权限(将 java 作为 windows 服务运行)

标签 java windows-services file-permissions ntfs

由于 NTFS 权限,我在将 java 进程作为 Windows 服务运行时遇到问题。 (http://community.jboss.org/wiki/RunJBossAsAServiceOnWindows)。

服务安装成功,但由于文件权限问题启动时出现问题。

  • 如果我将 Windows 服务“登录”更改为我的帐户(例如域/登录),该服务运行正常。
  • 如果我将文件系统权限从 755 更改为 777,服务将正常运行。

示例日志

08:58:02,250 ERROR [MainDeployer] Could not make local copy for file:/J:/projects/devtools/pe64-jboss-4.2.2.GA/server/solr/conf/jboss-service.xml
java.io.IOException: Access is denied
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)

“Yo No Comprende”。 我以为“本地系统”帐户是“root”。 (“本地系统”是默认帐户)

“chmod -R 777 <>”不是一个选项。 (安全漏洞)

总结一下:

  • “本地系统”和 Windows NTFS 文件权限有何关系?
  • 能否将“本地系统”添加到“我的组”
  • 我的本地构建过程是否有问题? (比如 windows 版的 UMask 不好吗?)
  • 还有其他将 java 作为 Windows 服务运行的问题吗?
  • 基于 Windows NT 的操作系统已经使用了 15 年以上,为什么服务仍然如此痛苦?

更新/解决方案

事实证明,在后来的 Windows(Vista 和 Window 7)中,MSFT 关闭了一个安全漏洞,该漏洞允许服务获取任何人的“临时”文件。

“本地系统”帐户无权访问任何公共(public)/预先创建的“临时”目录。

Java 世界的解决方案:

  • 创建您自己的临时目录。授予它足够的权限)
  • 将“-Djava.io.tmpdir=/path/to/my/temp/dir”作为 jvm 参数传递。

谢谢

最佳答案

NTFS 权限的工作方式与 Ext2/3/4 权限略有不同。

具体来说,文件系统不关心您是否是管理员...如果您的 SID 没有Create Files permission或在目录中包含它的其他元权限之一(即 Write),您不能创建新文件或将文件从另一个目录复制到所述文件夹。

它确实为您提供了更改任何文件夹权限的权限。

关于java - 为什么 "Local System"帐户缺少对 NTFS 文件系统的权限(将 java 作为 windows 服务运行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555751/

相关文章:

c# - 某些服务在未被其他服务使用时会自动停止

Docker 持久卷没有权限 (Apache Solr)

javascript - 谷歌云端硬盘 API V3 : Creating file permissions for a domain

java - JPA - 可以将 id 默认为 0 吗?

java - 数组第二维初始化失败 - Java

java - 无法在 android 中调用 String.isEmpty()

java - 在 intelliJ 中找不到 Apache Tomcat 7 HTTP 连接器节点

c# - 在不遍历所有作业的情况下检查作业是否存在

.net - Windows 服务 : error 5 :Access Denied

linux - 每次上传新文件时出现 403 Forbidden 错误