非 root 用户无法读取在 linux 上具有文件写入/输出的 JAVA 应用程序

标签 java linux web-services file tomcat

我们有这个在 tomcat 9 上运行的 JAVA 网络服务(由 root 安装)。

网络服务为我们的客户创建一个通用文件日志。问题是只有 root 用户可以读取和访问正在生成的文件。

我的问题是我可以将输出文件更改为默认情况下对所有用户都可读吗? (无需每次生成文件时都使用 chmod)

应该在代码级别还是在 linux 上配置它?

我读过这个https://docs.oracle.com/javase/tutorial/essential/io/file.html .

但是我们的一个旧的 redhat 服务器在其 web 服务上没有代码级配置并且工作正常。

谢谢

最佳答案

你不应该从“java io”的角度来看待这个问题。 这是一个用户权限问题。换句话说:您的 tomcat 服务器可能一开始就不应该以 root 身份运行。

考虑创建一个用于运行您的 tomcat 实例的特殊用户Here您可以找到有关如何为 Ubuntu 系统执行此操作的指导。你最喜欢的搜索引擎肯定也会知道你最喜欢的 Linux 发行版的类似链接。

安全的角度来看,这也可能更好:您真的希望攻击您的 tomcat 的人...如果成功,最终成为您系统的 root 吗? !

长话短说:您的问题不在于 tomcat 中写入文件的某些 java 代码;然后您系统上的其他用户无法访问这些文件。您的问题是您的 tomcat 服务以 root 身份运行!修复后者;并且您的“初始”问题也将得到解决。

不过,警告的最后一句话:我并不是说为您更改用户设置容易。也许是;但特别是如果您的设置长期使用“root”,那么您放置的其他东西很有可能依赖于“成为 root”。所以,“不为根”才是正确的方向;但从你现在所在的位置到那里可能是一条痛苦的道路。

关于非 root 用户无法读取在 linux 上具有文件写入/输出的 JAVA 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39382161/

相关文章:

linux - bash脚本访问ec2实例

linux - 装载点不存在,即使文件夹存在。可以手动挂载

c++ - 编译 rcpp 时遇到问题

c# - 针对外部 Web 服务的 ASP.NET MVC 表单例份验证

java - class.getResource (".") 返回 null

java - 在 Java 中访问 Subversion 的一种方法

java - 使用 Active Directory SSO 从 Microsoft IE 到 Java 服务器时,为什么会收到 GSSException?

java - 清除二维数组

java - 在接口(interface)内访问枚举

web-services - 在哪里可以获得世界各地城市/地方的数据库?