![ldconfig: lstat できません - 権限が拒否されました](https://rvso.com/image/1646053/ldconfig%3A%20lstat%20%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%20-%20%E6%A8%A9%E9%99%90%E3%81%8C%E6%8B%92%E5%90%A6%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F.png)
いくつかのライブラリ (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 が必要であることに注意してください。