Linux下在没有root权限的普通用户下,执行需要root权限的java程序
我们需要在没有root权限的普通用户下,执行java程序,此java程序中需要使用到jpcap来接收网卡的包,jpcap需要root权限才能够加载网卡信息,由于此用户并不能拿到root权限,所以需要给java虚拟机提权来解决问题。
·
1.背景
我们需要在没有root权限的普通用户下,执行java程序,此java程序中需要使用到jpcap来接收网卡的包,jpcap需要root权限才能够加载网卡信息,由于此用户并不能拿到root权限,所以需要给java虚拟机提权来解决问题。
2.suid提权
给java虚拟机赋予suid权限,让java -jar命令在普通用户下执行时使用的是拥有者的权限,所以java的拥有者需要是root用户
#创建用户
useradd chun
passwd chun
#给java虚拟机赋予suid权限
chmod u+s /usr/java/jdk-1.8.0/bin/java
3.切换用户执行
su chun
java -jar text.jar
会发现报错:
error while loading shared libraries:libjli.so:cannot open shared object file:No such file or directory
这是由于给java虚拟机设置suid权限后,Linux 会为使用 setcap 或 suid 的程序禁用掉 LD_LIBRARY_PATH,所以java虚拟机就找不到动态链接库了。
我们只需要将libjli.so目录加入到动态链接库中即可
# 查看libjli.so文件路径,获取到jdk下的目录,/usr/java/jdk1.8.0/lib/amd64/jli
locate libjli.so
#两种方式
#1.加入到ld.so.conf下
echo "/usr/java/jdk1.8.0/lib/amd64/jli/" > /etc/ld.so.conf
#2.在ld.so.conf.d下新建一个文件,将路径加入文件中
touch /etc/ld.so.conf.d/java1.8.0.conf
echo "/usr/java/jdk1.8.0/lib/amd64/jli/" > /etc/ld.so.conf.d/java1.8.0.conf
# 更新动态链接库缓存,执行
ldconfig
再次切换用户执行,即可正常运行。
更多推荐
已为社区贡献5条内容
所有评论(0)