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 才能變更此屬性。

相關內容