在Eclipse中尝试运行我的服务器应用程序时,我遇到了一个错误。错误信息是java.net.BindException: Permission denied。我认为这是因为我正在使用端口443来建立SSL连接。如果我在命令行上使用java和sudo运行代码,我可以解决这个问题。有没有办法在按下运行按钮时,设置Eclipse以sudo权限执行我的应用程序?
在Eclipse中尝试运行我的服务器应用程序时,我遇到了一个错误。错误信息是java.net.BindException: Permission denied。我认为这是因为我正在使用端口443来建立SSL连接。如果我在命令行上使用java和sudo运行代码,我可以解决这个问题。有没有办法在按下运行按钮时,设置Eclipse以sudo权限执行我的应用程序?
Rename your java-application
sudo mv /usr/lib/jvm/java-6-openjdk/jre/bin/java /usr/lib/jvm/java-6-openjdk/jre/bin/java.ori
Create following script and store it as /usr/lib/jvm/java-6-openjdk/jre/bin/java
#!/bin/bash
# file: /usr/lib/jvm/java-6-openjdk/jre/bin/java
# descr: Starter for jdk. Runs jdk as root when
# cmd-line-arg "--run-as-root" is specified.
#
jre="/usr/lib/jvm/java-6-openjdk/jre/bin/java.ori"
run_as_root=false
args=
# Filter command-line argument
for arg in "$@"
do
case "$arg" in
--run-as-root) run_as_root=true
;;
*) args="$args $arg"
;;
esac
done
# Remove leading whitespaces
args=$(echo $args | sed -e 's/^[ \t]*//')
if $run_as_root
then
echo "WARNING: Running as root!"
gksu "$jre $args"
else
$jre $args
fi
Change the permissions to make it executable
sudo chmod 0755 /usr/lib/jvm/java-6-openjdk/jre/bin/java
Startup eclipse
注意:这个想法来自http://www.eclipse.org/forums/index.php/mv/msg/87353/724852/#msg_724852
pkexec $jre $args
。 - Giuliano无法识别的选项:--run-as-root 错误:无法创建Java虚拟机。 错误:发生致命异常。程序将退出。
有什么想法吗?谢谢。 - adrian.nicolau--run-as-root
调用了jre,而不是使用bash脚本。 - rednammocsudo ~/eclipse/eclipse
sudo
模式运行 Eclipse 中还有一个问题是,如果您稍后想将 Eclipse 切换回非 sudo
模式,则会遇到各种问题,因为 Eclipse 将无法写入现在由 root 拥有的各种文件。这会导致 Eclipse 的未指定行为。 - Amit如此主题中所述:
在Unix / Linux系统中要打开低于1024的端口,您需要成为"root"。
我还使用了参数
-Dorg.eclipse.equinox.http.jetty.port=8080
来更改侦听端口,但是这似乎被忽略了(根据堆栈跟踪)请使用"
-Dorg.osgi.service.http.port=8080
"。
org.osgi.service.http.port
- 指定用于http服务的端口号。根据OSGi规范,此属性的默认值为80(需要root权限)。
org.osgi.service.http.port.secure
- 指定用于安全http服务的端口号。根据OSGi规范,此属性的默认值为443(需要root权限)。
也许如果您尝试将最后一个属性修改为大于1024的值,就可以在不需要特殊权限的情况下运行。
另一个选择是使用iptables或ipfilter将端口80转发到1024以上的端口。
(有人可以提供一个实用且易于理解的解释链接吗?)
我写的是 C 代码而不是 Java,但是这个方法在两种语言中都可以使用。 我使用远程调试 - 定义一个连接到 LOCALHOST 的 "remote" 连接,允许你指定连接的用户并指定 ROOT。然后在调试配置连接中定义一个远程应用程序:LOCALHOST。确保在主选项卡底部以及连接属性窗口下方勾选 "跳过下载到目标路径"。
您可以使用远程Java应用程序机制来实现此目的。
如果您使用外部工具(运行菜单/外部工具或工具栏上运行/调试图标旁边的图标),则可以使用任何脚本或其他内容。这些脚本可能会给您提供升级权限或其他功能。
另一方面,这种方式调试应用程序可能会变得非常困难,因为运行和调试命令都不会与此外部工具配置相关联。也许可以连接应用程序的Eclipse调试器,但我不知道如何实现。
你可以按照以下步骤进行:
配置sudo以允许您的Eclipse用户运行setcap。 这样,您将拥有透明调试(无需sudo包装器-gdb可用)。 缺点:这是一种本地安全漏洞。setcap 'cap_net_admin=+ep' Server
javac
需要sudo
访问权限?您可能希望编辑问题以避免混淆。 - ring bearerjavac
,而在于java
(可执行文件)。 - Bozho