![ldconfig: lstat kann nicht ausgeführt werden - Berechtigung verweigert](https://rvso.com/image/1646053/ldconfig%3A%20lstat%20kann%20nicht%20ausgef%C3%BChrt%20werden%20-%20Berechtigung%20verweigert.png)
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 ldconfig
erhielt 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: /lib
ist 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.9
Version 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, ldconfig
dass 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:
Um etwas Platz im Internet zu sparen:wie kann ich User::Shell
zu _
diesen Dateien wechseln?(Ich habe etwas gefunden, semanage
aber 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 attr
oder 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.