一.Linux文件/目录权限
http://hi.baidu.com/skyforum/item/9946ef57b371789608be1747,不了解的需要做一个基本的了解。
二. FsAction
- FsAction对应着文件/目录的操作权限。rwx。
- FsAction犀利之处在于枚举类型里的每一个权限与二进制的对应。
- 有了上面的对应,我们可以组合出所有的权限
public enum FsAction { // POSIX style NONE("---"), EXECUTE("--x"), WRITE("-w-"), WRITE_EXECUTE("-wx"), READ("r--"), READ_EXECUTE("r-x"), READ_WRITE("rw-"), ALL("rwx"); private final static FsAction[] vals = values(); //this FsAction是否包含that FsAction public boolean implies(FsAction that) {} //this FsAction和that FsAction 与操作 public FsAction and(FsAction that) {} //this FsAction和that FsAction 或操作 public FsAction or(FsAction that) {} //this FsAction和that FsAction 非操作 public FsAction not() {} }
三. FsPermission
- FsPermission对应着文件/目录的使用者权限,组权限,其他用户权限。
- FsPermission applyUMask(FsPermission umask)方法得到一个去掉了umask权限的新权限。
public class FsPermission implements Writable { private FsAction useraction = null; private FsAction groupaction = null; private FsAction otheraction = null; /** Apply a umask to this permission and return a new one */ public FsPermission applyUMask(FsPermission umask) { return new FsPermission(useraction.and(umask.useraction.not()), groupaction.and(umask.groupaction.not()), otheraction.and(umask.otheraction.not())); } }
四. PermissionStatus
- PermissionStatus描述文件/目录属主,文件组和它的FsPermission。
private String username; private String groupname; private FsPermission permission;
- INode中有一个long型成员变量,代表着PermissionStatus。保存了FsPermission(MODE),文件主号(USER)和用户组号(GROUP)。
private long permission;
五. SerialNumberManager
- Manage name-to-serial-number maps for users and groups.管理着文件属主和文件属主号,文件组和文件组号的对应关系。
- 在持久化信息FSImage中,不保存文件主号和用户组号,它们只是SerialNumberManager分配的,只保存在内存的信息。通过SerialNumberManager得到某文件主的文件主号时,如果找不到文件主号,会往对应关系中添加一条记录。
六. PermissionChecker
- PermissionChecker用于权限检查。
- checkSuperuserPrivilege(UserGroupInformation owner, String supergroup):Verify if the caller has the required permission.
- checkPermission(String path, INodeDirectory root, boolean doCheckOwner,
FsAction ancestorAccess, FsAction parentAccess, FsAction access,
FsAction subAccess):Check whether current user have permissions to access the path.
七. 权限相关类图
一. Linux文件/目录权限 http://hi.baidu.com/skyforum/item/9946ef57b371789608be1747,不了解的需要做一个基本的了解。 二. FsAction
- FsAction对应着文件/目录的操作权限。rwx。
- FsAction犀利之处在于枚举类型里的每一个权限与二进制的对应。
- 有了上面的对应,我们可以组合出所有的权限
public enum FsAction { // POSIX style NONE("---"), EXECUTE("--x"), WRITE("-w-"), WRITE_EXECUTE("-wx"), READ("r--"), READ_EXECUTE("r-x"), READ_WRITE("rw-"), ALL("rwx"); private final static FsAction[] vals = values(); //this FsAction是否包含that FsAction public boolean implies(FsAction that) {} //this FsAction和that FsAction 与操作 public FsAction and(FsAction that) {} //this FsAction和that FsAction 或操作 public FsAction or(FsAction that) {} //this FsAction和that FsAction 非操作 public FsAction not() {} }