2023-01-20 296
我已经完成了一个使用JNI的C库的Java库.
C库在Linux中被编译为.so文件.该图书馆需要cap_net_raw capability .
执行Java流程没有其他特权,使用Java库.将要使用库的实际流程已经存在于产品中,我们不想赋予他们更多的权利.
要测试,我创建了jar并在有或没有sudo的情况下运行它.正如预期的那样,它成功了,但没有它.
static {
System.loadLibrary("SocketTester");
}
private native int socketTest();
javac -h . SocketTester.java
的文件
编译
gcc -o libSocketTester.so socketTester.c -shared -I/usr/lib/jvm/java-14-openjdk-amd64/include -I/usr/lib/jvm/java-14-openjdk-amd64/include/linux
sudo ldconfig
cd /usr/lib
sudo setcap cap_net_raw=epi libSocketTester.so
public static void main(final String[] args) {
SocketTester tester = new SocketTester();
tester.socketTest();
}
创建一个JAR
java -cp socketTester.jar Test
sudo setcap cap_net_raw=epi libSocketTester.so
结果:失败
sudo setcap cap_net_raw=epi /usr/lib/jvm/java-14-openjdk-amd64/bin/java
结果:它有效,但这不是我想要的,因为现在所有的Java过程都具有功能(请参阅目标部分中的BOLD).
为什么将盖子添加到.so不起作用?我还能如何实现目标?
一十亿年前,我弄清楚了如何让PAM模块分叉一个助手程序来从非特权上下文中进行特权事件.这就是pam_unix.so能够调用unix_chkpwd来帮助无私人的应用程序(a screensaver或screen)接受以在Linux下解锁的用户密码.
最近,我学会了制作共享库对象(libcap.so,pam_cap.so等)用作独立的二进制文件.从那以后,我一直在考虑结合这两种技术…研究了这一点,我遇到了这个问题.由于我能够为绑定到port 80的无私人程序的示例任务执行此操作,因此我认为这可能是一个答案.
我已经完整地写完了它如何在中完全功能libcap 分销站点,但基本上归结为三件事:
基本上,该流量为.so函数,该函数将.so文件作为分叉的孩子调用并执行特权操作.然后,它通过Unix域插座将结果返回到应用程序.
以上所述是小编给大家介绍的如何将功能添加到本地库,而不是在运行它的可执行文件中添加功能?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26134.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态