这是我现在的逻辑:
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
位为所有者,w
位为群组,我们应该同时获得x
和w
。我尝试查找一些教程,但他们解释了个人访问而不是不同组的组合。有些人可以指导我这样的描述或列出所有情况,这样我就可以确保我不会错过任何一个。
答案 0 :(得分:2)
如果我们有例如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权限,您也会被拒绝,因为您是所有者,并且所有者没有权限。
所以,你已经拥有的是正确的!