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 это просто текстовое значение, которое можно изменить с помощью attrили getfattr/ 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.

Связанный контент