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转换为字符串,成功返回字符串长度

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

  • 相关阅读:
    逻辑代码题:五个学生参加计算机比赛
    逻辑代码题:如果昨天是明天,那今天就是周五了
    面试题:二叉树的遍历
    面试题:判断链表是否存在环
    面试题:将字符串中的中英文分开显示
    N皇后
    2017<java技术>预备作业2计科陈刚
    transition+transform合并效果案例
    transition CSS3动画属性之过渡
    Less 编译的几种方式
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730616.html
Copyright © 2011-2022 走看看