[Seek Help] 如何让 deepin 下非 root 用户程序使用小于 1024 端口
Tofloor
poster avatar
huzhixiang
deepin
2021-10-19 17:21
Author

根据网上一些其他的介绍,root用户尝试使用setcap setcap cap_net_bind_service,但是报下面的错误,/usr/lib/jvm/java-8-openjdk-amd64/bin/java是我的java执行程序

setcap cap_net_bind_service=+ep /usr/lib/jvm/java-8-openjdk-amd64/bin/java

Failed to set capabilities on file `/usr/lib/jvm/java-8-openjdk-amd64/bin/java' (Invalid argument)

The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

 

Reply Favorite View the author
All Replies
ih******op@vip.qq.com
deepin
2021-10-19 18:49
#1

两种可能性

1. 你的/usr/lib/jvm/java-8-openjdk-amd64/bin/java是个软链接

那么这样可解决

sudo setcap cap_net_bind_service=+ep `readlink -f /usr/lib/jvm/java-8-openjdk-amd64/bin/java`

 

2. 你的 /usr/lib/jvm/java-8-openjdk-amd64/bin/java 是个shell文件

cat /usr/lib/jvm/java-8-openjdk-amd64/bin/java 看下世纪执行的java二进制文件的真路径,然后对真路径的java程序执行cap_net_bind_service

 

Reply View the author
uvz
deepin
2021-10-20 19:48
#2

为什么要小于1024, 用nginx做个转发不行吗

Reply View the author
huzhixiang
deepin
2021-10-29 17:48
#3
ih******op@vip.qq.com

两种可能性

1. 你的/usr/lib/jvm/java-8-openjdk-amd64/bin/java是个软链接

那么这样可解决

sudo setcap cap_net_bind_service=+ep `readlink -f /usr/lib/jvm/java-8-openjdk-amd64/bin/java`

 

2. 你的 /usr/lib/jvm/java-8-openjdk-amd64/bin/java 是个shell文件

cat /usr/lib/jvm/java-8-openjdk-amd64/bin/java 看下世纪执行的java二进制文件的真路径,然后对真路径的java程序执行cap_net_bind_service

 

的确是软连接

ls -al /usr/lib/jvm/java-8-openjdk-amd64/bin/java

lrwxrwxrwx 1 root root 15 3月  19  2019 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -> ../jre/bin/java

 

采用方法1 解决了问题,谢谢大佬。

Reply View the author
huzhixiang
deepin
2021-10-29 17:50
#4
uvz

为什么要小于1024, 用nginx做个转发不行吗

我的程序是网关,需要占有80端口。转发的nginx如果采用80端口会有同样的问题。

Reply View the author