Permissions 如何准确获取用户对给定fs对象的Unix权限?
这就是我现在的逻辑:Permissions 如何准确获取用户对给定fs对象的Unix权限?,permissions,filesystems,Permissions,Filesystems,这就是我现在的逻辑: int getInodePermissions(final int uid, final int[] gids, final fsObject inode) { final int inodeOwner = getOwner(inode); final int inodeGroup = getGroup(inode); final int inodeMode = getMode(inode); int perm;
int getInodePermissions(final int uid, final int[] gids, final fsObject inode)
{
final int inodeOwner = getOwner(inode);
final int inodeGroup = getGroup(inode);
final int inodeMode = getMode(inode);
int perm;
if (uid == inodeOwner) {
perm = (inodeMode >> 6) & 7;
} else if (isUserInGroup(inodeGroup, gids)) {
perm = (inodeMode >> 3) & 7;
} else {
perm = inodeMode & 7;
}
return perm;
}
但我刚刚意识到,如果我们拥有例如x
bit作为所有者和w
bit作为组,那么我们应该同时拥有x
和w
。我试图查找一些教程,但它们解释了个人访问,而不是不同组的组合。有人可以告诉我这样的描述,或者列出所有的案例,这样我就可以确保我没有遗漏任何案例
如果我们有x位作为所有者,w位作为组,我们应该同时得到x和w
不!如果您是所有者,您将获得所有者权限,而不是组权限,即使您也在组中。例如:
> touch example.file
假定example.file
不存在,如果您有一个普通的umask,该文件的权限将是664,以您的同名组作为组。现在:
> sudo chmod 077 example.file
> echo whatever >> example.file
bash: example.file: Permission denied
即使您在该组中并且该组具有rwx权限,您也会被拒绝,因为您是所有者,而所有者没有权限
所以,你已经拥有的是正确的 我理解使用|但我想知道这是否与我们预期使用的权限相符。我们是否也需要使用
其他人的权限?嗯……哎呀。和您一样,我假设如果用户同时是组的所有者和成员,则该用户可以同时获得两组权限。但事实证明这是错误的——我已经相应地编辑了答案。谢谢:)顺便说一句,如果你不介意的话,另一个简短的问题。如果我必须定义读、写和执行常量,那么将它们定义为4而不是0x4,或者将它们定义为2而不是0x2,将它们定义为1而不是0x1会有任何区别吗?它不会有任何区别,因为0x4(十六进制)==4(十进制),并且一直到0x9都是这样。然后你必须转换它们,0xa==10,0x10==16,等等。如果你高兴的话,记得勾选这个作为答案。