ldconfig:无法 lstat - 权限被拒绝

ldconfig:无法 lstat - 权限被拒绝

我将一些库(libncurses,版本 5.9)从一台架构为 x86 的机器复制到另一台架构相同的机器。

尽管如此,运行时ldconfig,我收到了权限拒绝消息:

bash-3.2# ldconfig
ldconfig: Cannot lstat /lib/libncursesw.so.5.9: Permission denied
ldconfig: Cannot lstat /lib/libncurses.so.5.9: Permission denied

注意:/lib是 的符号链接/usr/lib

下面是这些库的列表(我加了一些 !!! 标记):

bash-3.2# ls -all /usr/lib | grep libncurses*
lrwxrwxrwx  1 root         root               19 Nov  3 10:15 libncurses++.so.6 -> libncurses++.so.6.1
-rwxr-xr-x  1 root         root            71696 Oct 23 22:27 libncurses++.so.6.1
lrwxrwxrwx  1 root         root               20 Nov  3 10:15 libncurses++w.so.6 -> libncurses++w.so.6.1
-rwxr-xr-x  1 root         root            71696 Oct 23 22:27 libncurses++w.so.6.1
lrwxrwxrwx  1 root         root               17 Mar 17 15:01 libncurses.so.5 -> libncurses.so.5.9
-rwxr-xr-x  1 root         root     !!!   158528 Mar 17 14:56 libncurses.so.5.9
lrwxrwxrwx  1 root         root               17 Nov  3 10:15 libncurses.so.6 -> libncurses.so.6.1
-rwxr-xr-x  1 root         root           169780 Oct 23 22:27 libncurses.so.6.1
lrwxrwxrwx  1 root         root               18 Mar 17 15:00 libncursesw.so.5 -> libncursesw.so.5.9
-rwxr-xr-x  1 root         root     !!!   225240 Mar 17 14:56 libncursesw.so.5.9
lrwxrwxrwx  1 root         root               18 Nov  3 10:15 libncursesw.so.6 -> libncursesw.so.6.1
-rwxr-xr-x  1 root         root           247700 Oct 23 22:27 libncursesw.so.6.1

您可以看到,我复制的5.9版本具有与他们的完全相同的权限6.1

另外,我尝试将权限更改为777,但没有帮助。

我怎样才能ldconfig考虑到这些库?

这是一个基于 RedHat 的微型操作系统,默认情况下没有太多可用的命令。

@user1686 的评论很有帮助,复制的库确实不同:

在此处输入图片描述

现在,为了节省一些互联网空间:我怎样才能更改User::Shell这些_文件?(我发现了一些东西semanage但是该命令不可用)。

答案1

这些文件的区别在于安全上下文它被几个强制访问控制系统使用——最常见的是 SELinux,但在你的情况下,它实际上看起来更像是

安全上下文存储在扩展属性(xattrs)中,在 SMACK 的情况下,它只是一个可以使用attrgetfattr/进行更改的纯文本值setfattr

在 SMACK 中,_“floor” 是用于公开可读数据的内置标签。但是,我不确定它是否存储为显式标签,或者在没有任何标签的情况下是否只是默认标签。因此,只需使用任何必要的方法,使“getfattr”输出在两者上看起来相同即可。

List:   # getfattr -d -m - libncurses.so.5
Set:    # setfattr -n security.SMACK64 -v _ libncurses*.so.5*
Remove: # setfattr -x security.SMACK64 libncurses*.so.5*
List:   # attr -S -l libncurses.so.6.1
Get:    # attr -S -g SMACK64 libncurses.so.5
Set:    # attr -S -s SMACK64 -V _ libncurses.so.5
Remove: # attr -S -r SMACK64 libncurses.so.5
#include <sys/types.h>
#include <sys/xattr.h>
#include <err.h>

main(int argc, char *argv[]) {
    for (int i=1; i<argc; i++)
        if (setxattr(argv[i], "security.SMACK64", "_", sizeof("_"), 0))
            warn("setxattr(%s) failed", argv[i]);
}

请注意,您必须具有 CAP_MAC_ADMIN 才能更改此属性。

相关内容