首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lgetxattr无法获得security.capability

lgetxattr无法获得security.capability
EN

Unix & Linux用户
提问于 2022-08-15 10:02:14
回答 1查看 128关注 0票数 0

背景:在中,我发现lgetxattr()不能返回期望值,我编写了一个简单的c程序来验证它。

代码语言:javascript
复制
#include 
#include 
#include 
int main(){
        char xattr_value[1024];
        int size;
        size=lgetxattr("/bin/tcpm", "security.capability", xattr_value, sizeof(xattr_value));
        printf("caps: %s\n", &xattr_value);
        printf("%d\n",size);
        size=lgetxattr("/bin/tcpm", "security.selinux", xattr_value, sizeof(xattr_value));
        printf("selinux: %s\n", &xattr_value);
        printf("%d\n",size);
        return 0;
}

[root@localhost ~]# ./a.out 
caps:  
20
selinux: system_u:object_r:bin_t:s0
27

[root@localhost ~]# getcap /bin/tcpm
/bin/tcpm cap_net_bind_service,cap_net_admin=ep

[root@localhost ~]# getfattr -m - -d /bin/tcpm
getfattr: Removing leading '/' from absolute path names
# file: bin/tcpm
security.capability=0sAQAAAgAUAAAAAAAAAAAAAAAAAAA=
security.selinux="system_u:object_r:bin_t:s0"

size is -1表示lgetxattr()不可靠,但xattr_value不是gdb evm utils的预期值 try:#err = lgetxattr()的返回。

代码语言:javascript
复制
(gdb) p err
$6 = 20
(gdb) p xattr_value
$7 = "\000\000\000\002\000 ", '\000' , "P\261\037&@&^\a\022\274fOT\031", '\000' ...
(gdb) p err
$8 = 27
(gdb) p  xattr_value 
$9 = "system_u:object_r:bin_t:s0", '\000' ...

此问题的源代码:

代码语言:javascript
复制
for (xattrname = evm_config_xattrnames; *xattrname != NULL; xattrname++) {
        err = lgetxattr(file, *xattrname, xattr_value, sizeof(xattr_value));
        if (err < 0) {
            log_info("no xattr: %s\n", *xattrname);
            continue;
        }
        if (!find_xattr(list, list_size, *xattrname)) {
            log_info("skipping xattr: %s\n", *xattrname);
            continue;
        }
        log_info("name: %s, size: %d\n", *xattrname, err);
        log_debug_dump(xattr_value, err);
        err = !HMAC_Update(pctx, xattr_value, err);
        if (err) {
            log_err("HMAC_Update() failed\n");
            goto out_ctx_cleanup;
        }
    }
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-08-22 08:42:46

实际上,getxattr或lgetxattr获得二进制能力值。

代码语言:javascript
复制
[root@localhost ~]# strace -e getxattr getfattr -d -m - /bin/tcpm
getxattr("/bin/tcpm", "security.capability", NULL, 0) = 20
getxattr("/bin/tcpm", "security.capability", "\0\0\0\2\0 \0\0\0\0\0\0\0\0\0\0\0\0\0", 256) = 20
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/713661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档