c++ - ld-linux-x86-64.so.2执行文件时如何避免更改有效UID
问题描述
背景:
我有一个可执行的 c++ 构建程序,名为UlimitUnlimiter
. 目前,它在我的一台服务器上执行时会产生一些问题。
./UlimitUnlimiter
UlimitUnlimiter: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by UlimitUnlimiter)
/UlimitUnlimiter: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by UlimitUnlimiter)
这是一个动态 c++ 库问题,我的包路径中有另一个库路径。一般来说,Giving a LD_LIBRARY_PATH
or run it by/lib64/ld-linux-x86-64.so.2
可以解决问题。
但我的情况有点复杂。我设置setuid bit
了可执行程序。
chown root:mygroup UlimitUnlimiter
chmod ugo+rx UlimitUnlimiter
chmod +s UlimitUnlimiter
在程序内部,它会检查是否uid != 0 && gid != 0 && euid == 0
成功执行,它应该是:
./UlimitUnlimiter
[UlimitUnlimiter]: uid=10254388
[UlimitUnlimiter]: gid=100
[UlimitUnlimiter]: euid=0
service running...
但由于chmod +s
,运行 withLD_LIBRARY_PATH
将失败,即使是expert LD_LIBRARY_PATH
:
LD_LIBRARY_PATH=correct_path_to/lib ./UlimitUnlimiter
UlimitUnlimiter: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by UlimitUnlimiter)
/UlimitUnlimiter: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by UlimitUnlimiter)
export LD_LIBRARY_PATH=correct_path_to/lib
./UlimitUnlimiter
UlimitUnlimiter: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by UlimitUnlimiter)
/UlimitUnlimiter: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by UlimitUnlimiter)
唯一的方法是,我可以设置运行的 lib 路径/lib64/ld-linux-x86-64.so.2
,但是它会破坏effective user
.
/lib64/ld-linux-x86-64.so.2 --library-path correct_path_to/lib ./UlimitUnlimiter
[UlimitUnlimiter]: uid=10254388
[UlimitUnlimiter]: gid=100
[UlimitUnlimiter]: euid=10254388
[UlimitUnlimiter]: ulimitunlimiter must be setuid and run by non-root
所以我想知道,有没有一种方法可以既设置动态库又不破坏动态库setuid bit
?
解决方案
推荐阅读
- c# - 如何使库面向任何其他程序语言?
- neo4j - 如何处理图数据库中少数顶点的大量边
- c# - 从另一个类更新文本框
- c++ - 成员函数“select”的“this”参数的类型为“const SelectParam”,但函数未标记为 const
- powershell - 64 位 PowerShell 调用 32 位 DLL
- php - AMP Form action-xhr post Submission Throwing JSON 错误且不涉及 JSON
- operating-system - 操作系统中的单页页面大小
- javascript - 使用 JS 在新页面上使用上一页的信息
- r - 我无法重新安装我错误删除的包“datasets”(默认 R 数据集)
- vb.net - EWS Oauth 登录过期,每次应用启动都要登录