我们有一个在Unix上以根的形式运行的程序,因此可以读取例如/home/user1和/home/user2文件夹的内容。但是,如果Unix用户"user1“登录到我们的应用程序中,他就不能访问”/home/ user 2“数据。我们希望直接使用Unix权限,而不是在我们的应用程序中重新创建所有权限!那么我们能不能..。
/home/user2"...And的权限,然后确定user1对"/home/user2“是否有足够的权限?(如何?)发布于 2008-11-05 12:14:32
使用SecurityManager!
更新
当然,没有标准库可以读取unix文件权限。不是WORA。
但我曾短暂地尝试过寻找一个现成的使用库,并发现了这个库:http://jan.newmarch.name/java/posix/ --它使用JNI,但是您不需要编写自己的JNI代码,这是一个很大的解脱。)我相信肯定还有其他人。
类Stat为您提供所有必需的访问信息:http://jan.newmarch.name/java/posix/posix.Stat.html
更新2
正如人们所提到的,这种方法无法检查“非标准”unix安全特性,例如ACL或Posix功能(可能;不确定它们是否适用于文件)。但是,如果设置了与主机操作系统安全完全同步的目标,那么我们更需要使用SecurityManager,因为它是一个JVM范围的保护机制!是的,我们可以启动一个子SUID进程来验证权限(并保持它运行,在用户登录时通过管道运行),,但是我们需要从SecurityManager中这样做!
发布于 2008-11-05 10:09:11
最简单和最可移植的方法是生成一个子进程,让它执行一个用C编写的包装器,它更改了UID,放弃了所有特权(要小心,编写一个包装器就很棘手--这就像编写一个setuid包装程序一样困难),并执行通过RMI与之交谈的另一个java实例。该java实例将代表用户执行所有文件系统操作。
对于单线程Linux程序,您可以使用setfsuid()/setfsgid(),但对于可移植或多线程程序来说,这不是一个选项。
发布于 2008-11-05 09:54:51
如果您只希望user1允许应用程序读取文件,我强烈建议该应用程序以user1的形式运行。
https://stackoverflow.com/questions/264681
复制相似问题