关于nfsroot 中 libcap 无法使用setcap 问题

来源:互联网 发布:淘宝卖家小二电话 编辑:程序博客网 时间:2024/06/06 18:38

由strace 得知问题出在这儿:

 

setxattr("./logfile", "security.capability", "/x01/x00/x00/x02/x00 /x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00", 20, 0) = -1 EOPNOTSUPP (Operation not supported)

 

查看 nfs/nfs3acl.c 得知,nfsroot文件系统只支持 “POSIX_ACL_XATTR_ACCESS” 和 “OSIX_ACL_XATTR_DEFAULT”。

ssize_t nfs3_getxattr(struct dentry *dentry, const char *name,

                void *buffer, size_t size)

{

        struct inode *inode = dentry->d_inode;

        struct posix_acl *acl;

        int type, error = 0;

 

        if (strcmp(name, POSIX_ACL_XATTR_ACCESS) == 0)

                type = ACL_TYPE_ACCESS;

        else if (strcmp(name, POSIX_ACL_XATTR_DEFAULT) == 0)

                type = ACL_TYPE_DEFAULT;

        else

                return -EOPNOTSUPP;

 

....

 

}

 

跟踪xattr_security.c  

 

struct xattr_handler ext2_xattr_security_handler = {

        .prefix = XATTR_SECURITY_PREFIX,

        .list   = ext2_xattr_security_list,

        .get    = ext2_xattr_security_get,

        .set    = ext2_xattr_security_set,

};

 

得到 ext2文件系统支持“security.”属性的文件. 

 

 

解决办法:采用ext2文件格式的SD卡
$touch aaaa

$setcap cap_net_raw=ep ./aaaa

成功

 

 

原创粉丝点击