![ldconfig:無法 lstat - 權限被拒絕](https://rvso.com/image/1646053/ldconfig%EF%BC%9A%E7%84%A1%E6%B3%95%20lstat%20-%20%E6%AC%8A%E9%99%90%E8%A2%AB%E6%8B%92%E7%B5%95.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 的小型作業系統,預設沒有太多命令可用。
@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 才能變更此屬性。