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

    技术2022-05-20  57

    由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

    成功

     

     


    最新回复(0)