![ldconfig: no se puede realizar lstat - permiso denegado](https://rvso.com/image/1646053/ldconfig%3A%20no%20se%20puede%20realizar%20lstat%20-%20permiso%20denegado.png)
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: /lib
es 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.9
versió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 ldconfig
para 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:
Ahora, para ahorrar algo de espacio en Internet:¿Cómo puedo cambiar User::Shell
a _
esos archivos?(Encontré algo semanage
pero 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 attr
o 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.