ldconfig: lstat할 수 없음 - 권한이 거부되었습니다.

ldconfig: lstat할 수 없음 - 권한이 거부되었습니다.

x86 아키텍처를 사용하는 시스템에서 동일한 아키텍처를 사용하는 다른 시스템으로 일부 라이브러리(libncurses, 버전 5.9)를 복사했습니다.

그래도 를 실행할 때 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 기반 OS이며 기본적으로 사용할 수 있는 명령이 많지 않습니다.

@ user1686의 의견은 많은 도움이 되었습니다. 실제로 복사된 라이브러리는 다릅니다.

여기에 이미지 설명을 입력하세요

이제 인터넷 공간을 절약하려면:해당 파일을 어떻게 변경할 수 있나요 User::Shell?_(뭔가를 찾았 semanage지만 해당 명령을 사용할 수 없습니다.)

답변1

파일의 내용이 다릅니다.보안 컨텍스트, 이는 여러 필수 액세스 제어 시스템(가장 일반적으로 SELinux)에서 사용되지만 귀하의 경우 실제로는 더 비슷해 보입니다.헤로인.

attr보안 컨텍스트는 확장 속성(xattrs)에 저장되며 SMACK의 경우 또는 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이 있어야 합니다.

관련 정보