ldconfig: no se puede realizar lstat - permiso denegado

ldconfig: no se puede realizar lstat - permiso denegado

Copié algunas bibliotecas (libncurses, versión 5.9) de una máquina con arquitectura x86 a otra máquina con la misma arquitectura.

Aún así, cuando ejecuté ldconfig, recibí mensajes de denegación de permiso:

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

Nota: /libes un enlace simbólico a /usr/lib.

Aquí hay una lista de estas bibliotecas (puse algunas marcas !!!):

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

Puede ver que mi 5.9versión copiada tiene los mismos permisos que su archivo 6.1.

Además, intenté cambiar el permiso a 777, pero no sirvió de nada.

¿Cómo puedo hacer ldconfigpara tener en cuenta estas bibliotecas?

Este es un pequeño sistema operativo basado en RedHat, no hay demasiados comandos disponibles de forma predeterminada.

El comentario de @user1686 ayudó mucho; de hecho, las bibliotecas copiadas son diferentes:

ingrese la descripción de la imagen aquí

Ahora, para ahorrar algo de espacio en Internet:¿Cómo puedo cambiar User::Shella _esos archivos?(Encontré algo semanagepero ese comando no está disponible).

Respuesta1

Los archivos difieren en sucontexto de seguridad, que es utilizado por varios sistemas de control de acceso obligatorio, más comúnmente SELinux, pero en su caso en realidad se parece másTORTAZO.

Los contextos de seguridad se almacenan en atributos extendidos (xattrs) y en el caso de SMACK es solo un valor de texto sin formato que puede cambiar usando attro getfattr/ setfattr.

En SMACK, _("piso") es una etiqueta incorporada que se utiliza para datos legibles públicamente. Sin embargo, no estoy seguro de si está almacenado como una etiqueta explícita o si es simplemente el valor predeterminado en ausencia de cualquier etiqueta. Así que simplemente use lo que sea necesario para que la salida 'getfattr' parezca idéntica en ambos.

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

Tenga en cuenta que debe tener CAP_MAC_ADMIN para cambiar este atributo.

información relacionada