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 ベースの 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 が必要であることに注意してください。

関連情報