如何准确地获取用户对给定fs对象的Unix权限?

时间:2014-01-10 16:38:32

标签: 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;
     if (uid == inodeOwner) {
         perm = (inodeMode >> 6) & 7;
     } else if (isUserInGroup(inodeGroup, gids)) {
        perm = (inodeMode >> 3) & 7;
     } else {
        perm = inodeMode & 7;
     }
     return perm;
  }

但我刚刚意识到如果我们有例如x位为所有者,w位为群组,我们应该同时获得xw。我尝试查找一些教程,但他们解释了个人访问而不是不同组的组合。有些人可以指导我这样的描述或列出所有情况,这样我就可以确保我不会错过任何一个。

1 个答案:

答案 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权限,您也会被拒绝,因为您是所有者,并且所有者没有权限。

所以,你已经拥有的是正确的!