zoukankan      html  css  js  c++  java
  • 文件访问控制列表facl

    [root@bogon code]# getfacl a.c  //获取文件a.c的文件访问控制列表
    # file: a.c
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
    [root@bogon code]# getfacl --omit-header a.c    //忽略前面文件名,属主,属组
    user::rw-
    group::r--
    other::r--
    
    [root@bogon code]# setfacl -m u:bp:wr,g:bp:wr a.c   //设置文件访问控制列表,-m修改,bp用户名,用户组,如果增加-R选项会对目录树递归修改facl
    [root@bogon code]# getfacl a.c
    # file: a.c
    # owner: root
    # group: root
    user::rw-
    user:bp:rw-
    group::r--
    group:bp:rw-
    mask::rw-
    other::r--
    
    [root@bogon code]# getfacl --omit-header a.c
    user::rw-
    user:bp:rw-
    group::r--
    group:bp:rw-
    mask::rw-
    other::r--
    
    [root@bogon code]# ls -l a.c    //a.c权限后面会多一个加号
    -rw-rw-r--+ 1 root root 326 May 29 02:48 a.c
    [root@bogon code]# setfacl -x u:bp,g:bp a.c //-x删除记录
    [root@bogon code]# getfacl a.c
    # file: a.c
    # owner: root
    # group: root
    user::rw-
    group::r--
    mask::r--
    other::r--

    默认acl和文件创建

    [root@bogon code]# mkdir bp
    [root@bogon code]# setfacl -d -m u::rwx,u:bp:rx,g::rwx,g:bp:wrx,o::-  bp    //-d目录acl,给文件夹设置facl,则在该文件夹下新建文件和目录,会默认设置该facl
    [root@bogon code]# getfacl -d --omit-header bp  
    user::rwx
    user:bp:r-x
    group::rwx
    group:bp:rwx
    mask::rwx
    other::---
    
    [root@bogon code]# cd bp
    [root@bogon bp]# ls
    [root@bogon bp]# echo "linux">a.txt
    [root@bogon bp]# getfacl a.txt
    # file: a.txt
    # owner: root
    # group: root
    user::rw-
    user:bp:r-x         #effective:r--
    group::rwx          #effective:rw-
    group:bp:rwx            #effective:rw-
    mask::rw-
    other::---
    
    [root@bogon bp]# 

    acl相关函数

    #include<acl/libacl.h>
    #include<sys/acl.h>
    //将文件的acl读入内存
    acl_t acl;
    acl=acl_get_file(pathname,type)//type的值可以为ACL_TYPE_ACCESS或者ACL_TYPE_DEFAULT
    
    //从内存acl中获取记录
    acl_entry_t entry;
    status=acl_get_entry(acl,entry_id,&entry)//entry_id的值可以为ACL_FIRST_ENTRY或者ACL_NEXT_ENTRY,该函数可用于遍历acl的所有记录
    
    //获取并修改acl记录中的属性
    acl_tag_t tag_type;
    status=acl_get_tag_type(entry,&tag_type);//获取
    status=acl_set_tag_type(entry,tag_type);//设置
    tag_type的值可以为ACL_USER_OBJ,ACL_USER,ACL_GROUP_OBJ,ACL_GROUP,ACL_OTHER,ACL_MASK
    
    //获取和修改acl记录中的标记限定符
    uid_t *qualp;
    qualp=acl_get_qualifier(entry);
    status=acl_set_qualifier(entry,qualp);
    
    //获取和修改ace中的权限集合
    acl_permset_t permset;
    status=acl_get_permset(entry,&permset);
    status=acl_set_permset(entry,permset);
    int is_set;
    is_set=acl_get_perm(permset,perm);//perm可指定为ACL_READ,ACL_WRITE,ACL_EXECUTE
    status=acl_add_perm(permset,perm);
    status=acl_delete_perm(permset,perm);
    status=acl_clear_perms(permset);//删除所有记录
    
    //创建和删除ace
    acl_entry_t entry;
    status=acl_create_entry(&acl,&entry);
    status=acl_delete_entry(acl,entry);
    
    //更新文件acl,将驻留在内存中acl内容来更新磁盘上的acl
    int status;
    status=acl_set_file(pathname,type,acl);
    
    //acl在内存和文本格式之间的转换
    acl=acl_from_text(acl_string)   将字符串转换为内存acl
    char *str;
    ssize_t len;
    str=acl_to_text(acl,&len)       将内存acl转换为字符串,成功返回字符串长度

    有时间我再添加实际例子(毕竟我现在也没怎么搞懂这个)

  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730616.html
Copyright © 2011-2022 走看看