1. user EA。将在文件权限检查的制约下由非特权级进程操控。欲获取user EA的值,需要有对文件的读权限;欲改变user EA的值,需要写权限
2. trusted EA,也可由用户进程驱使,这点和user EA很相似,而区别在于,要曹总trusted EA, 进程必须有特权
3. system EA,供内核使用,将系统对象与以文件关联。目前仅支持访问控制列表。
4. security EA,作用有二,其一用来存储服务于操作系统安全模块的文件安全标签;其二,将可执行文件与能力关联起来
扩展属性相关的接口为:
创建和修改EA
点击(此处)折叠或打开
-
#include <sys/xattr.h>
-
int setxattr(const char *pathname, const char *name, const void *value, size_t size, int flags);
-
int lsetxattr(const char *pathname, const char *name, const void *value, size_t size, int flags);
-
int fsetxattr(int fd, const char *name, const void *value, size_t size, int flags);
- /*all return 0 on success, or -1 on error*/
点击(此处)折叠或打开
-
#include <sys/xattr.h>
-
ssize_t getxattr(const char *pathname, const char *name, void *value, size_t size);
-
ssize_t lgetxattr(const char *pathname, const char *name, void *value, size_t size);
-
ssize_t fgetxattr(int fd, const char *name, void *);
- /*all return (nonnegative) size of EA value on success, or -1 on error*/
删除EA
点击(此处)折叠或打开
-
#include <sys/xattr.h>
-
int removexattr(const char *pathname, const char *name);
-
int lremovexattr(const char *pathname, const char *name);
-
int fremovexattr(int fd, const char *name);
- /*all return 0 on success, or -1 on error*/
点击(此处)折叠或打开
-
#include <sys/xattr.h>
-
ssize_t listxattr(const char *pathname, char *list, size_t size);
-
ssize_t llistxattr(const char *pathname, char *list, size_t size);
-
ssize_t flistxattr(int fd, const char *list, size_t size);
- /*all return number of bytes copied into list on success, or -1 on error*/
ACL
利用ACL,可以在任意数量的用户和组之中,为单个用户或组制定文件权限。
一个ACL由一系列ACL记录组成,其中每条记录都针对单个用户或用户组定义了对文件的访问权限。其调用api之间的关系如下图(要包含sys/acl.h和acl/libacl.h):
