ldconfig: lstat kann nicht ausgeführt werden - Berechtigung verweigert

ldconfig: lstat kann nicht ausgeführt werden - Berechtigung verweigert

Ich habe einige Bibliotheken (libncurses, Version 5.9) von einer Maschine mit x86-Architektur auf eine andere Maschine mit derselben Architektur kopiert.

Beim Ausführen ldconfigerhielt ich jedoch immer noch die Meldung, dass die Berechtigung verweigert wurde:

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

Hinweis: /libist ein symbolischer Link zu /usr/lib.

Hier ist eine Liste dieser Bibliotheken (ich habe einige !!!-Zeichen eingefügt):

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

Sie können sehen, dass meine kopierte 5.9Version dieselben Berechtigungen hat wie ihre 6.1.

Außerdem habe ich versucht, die Berechtigung in zu ändern 777, aber das hat nicht geholfen.

Wie kann ich dafür sorgen, ldconfigdass diese Bibliotheken berücksichtigt werden?

Dies ist ein kleines, auf RedHat basierendes Betriebssystem, standardmäßig sind nicht allzu viele Befehle verfügbar.

Der Kommentar von @user1686 hat sehr geholfen, kopierte Bibliotheken sind tatsächlich anders:

Bildbeschreibung hier eingeben

Um etwas Platz im Internet zu sparen:wie kann ich User::Shellzu _diesen Dateien wechseln?(Ich habe etwas gefunden, semanageaber dieser Befehl ist nicht verfügbar).

Antwort1

Die Dateien unterscheiden sich in ihrerSicherheitskontext, das von mehreren Mandatory Access Control-Systemen verwendet wird – am häufigsten SELinux, aber in Ihrem Fall sieht es eher so ausKLATSCHEN.

Sicherheitskontexte werden in erweiterten Attributen (xattrs) gespeichert und im Fall von SMACK ist es nur ein einfacher Textwert, den Sie mit attroder getfattr/ ändern können setfattr.

In SMACK _ist („floor“) ein integriertes Label, das für öffentlich lesbare Daten verwendet wird. Ich bin mir jedoch nicht sicher, ob es als explizites Label gespeichert ist oder ob es einfach die Standardeinstellung ist, wenn kein Label vorhanden ist. Verwenden Sie also einfach, was nötig ist, damit die Ausgabe von „getfattr“ auf beiden identisch aussieht.

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]);
}

Beachten Sie, dass Sie über CAP_MAC_ADMIN verfügen müssen, um dieses Attribut zu ändern.

verwandte Informationen