¿Cómo ejecuto mi aplicación como superusuario de Eclipse?

Me estoy ejecutando a un error cuando trato de ejecutar mi aplicación de servidor desde Eclipse. El error es java.net.BindException: Permiso denegado . Creo que esto se debe a que estoy usando el puerto 443 para configurar una conexión SSL. Puedo solucionar este problema si ejecuto mi código en la línea de comando usando java y sudo. ¿Hay alguna manera de configurar Eclipse para que cuando presiono el botón de ejecución, mi aplicación se ejecute con sudo?

Puede seguir estos pasos para comstackr / depurar aplicaciones como superusuario.

  1. Cambie el nombre de su aplicación java

    sudo mv / usr / lib / jvm / java-6-openjdk / jre / bin / java /usr/lib/jvm/java-6-openjdk/jre/bin/java.ori

  2. Cree la siguiente secuencia de comandos y guárdela como / 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 
  3. Cambia los permisos para hacerlo ejecutable

    sudo chmod 0755 / usr / lib / jvm / java-6-openjdk / jre / bin / java

  4. Eclipse de inicio

  5. Vaya a Ventana-> Preferencias-> Java-> JRE instalados
  6. Duplicar java-6-openjdk a java-6-openjdk-root
  7. Edite JRE y agregue “–run-as-root” como Argumento VM predeterminado

Para ejecutar proyectos como root, debe seguir estos pasos:

  1. Vaya a Proyecto-> Propiedades-> Java Build Path
  2. Haga doble clic en la biblioteca del sistema JRE y elija en JRE alternativo “java-6-openjdk-root”

Nota: La idea es de http://www.eclipse.org/forums/index.php/mv/msg/87353/724852/#msg_724852

Suponiendo que está en Linux (* nix), ¿qué tal comenzar su sesión de eclipse a través de un comando sudo?

Como

 sudo ~/eclipse/eclipse 

Ahora todo lo que hagas desde eclipse tendrá el contexto sudo?

Como se menciona en este hilo :

Para poder abrir un puerto por debajo de 1024 en sistemas Unix / Linux, debe ser “raíz”.

También utilicé el argumento -Dorg.eclipse.equinox.http.jetty.port=8080 para cambiar el puerto de escucha, pero parece que se ignora (de acuerdo con el stacktrace)

Utilice ” -Dorg.osgi.service.http.port=8080 “.


Como se menciona en el servicio HTTP :

  • org.osgi.service.http.port : especifica el número de puerto que se usará para la porción http. El valor predeterminado para esta propiedad es 80 (que requiere permiso de root), según la especificación OSGi.

  • org.osgi.service.http.port.secure : especifica el número de puerto que se utilizará para la publicación http segura. El valor predeterminado para esta propiedad es 443 (que requiere permiso de raíz), según la especificación OSGi.

Tal vez si intentas modificar esa última propiedad a un valor superior a 1024 podría funcionar sin requerir ningún privilegio especial.

Otra opción sería usar iptables o ipfilter para reenviar el puerto 80 a un puerto superior a 1024.

(¿Alguien puede contribuir con un enlace a una explicación práctica y fácil de entender?)

Una mejor respuesta, quizás, si esto satisface sus necesidades Y es posible, podría ser una simple redirección de puertos en su enrutador.

En lugar de intentar obligar a su Linux / Unix a abrir un puerto reservado, cuando solo está desarrollando esto ahora (no instalando) y desea ejecutarlo en un depurador, configure su enrutador para redireccionar el puerto 443 entrante (externo) a un puerto eso es más conveniente para sus necesidades actuales (digamos 4443).

Creo que la mayoría de los enrutadores admiten esto, y si el tuyo no le da a tu madre una buena idea para navidad o un regalo de cumpleaños.

Estoy escribiendo C, no Java, pero esto debería funcionar en cualquier caso. Utilizo depuración remota: defino una conexión “remota” a LOCALHOST que le permite especificar el usuario con el que se conectará, especifique ROOT. A continuación, defina una Aplicación remota en la conexión de configuración de depuración: LOCALHOST. Asegúrese de marcar “omitir la descarga en la ruta de destino” en la parte inferior de la pestaña principal, así como en la ventana de propiedades de la conexión.

Si utiliza herramientas externas (menú Ejecutar / Herramientas externas o un ícono al lado de los íconos Ejecutar / Depurar en la barra de herramientas), puede usar cualquier script o lo que quiera. Los guiones pueden darle derechos elevados, o lo que sea.

Por otro lado, de esta manera la depuración de la aplicación puede ser muy difícil, ya que ni los comandos Ejecutar ni Debug se asocian a esta configuración de herramienta externa. Quizás es posible conectar el depurador Eclipse de la aplicación, pero no sé cómo es posible.

Puedes ir de esta manera

  1. crea un Makefile con llamadas javac
  2. agregue la siguiente línea:
 setcap 'cap_net_admin=+ep' Server 
  1. configure sudo para permitir que su usuario de Eclipse ejecute setcap.

Por lo tanto, tendrá una depuración transparente (no sudo wrapper – gdb ok). Contras: es una violación de seguridad local.

Solución:

pon esto en / opt / my-stupid-eclipse

#! / bin / sh

setcap ‘cap_net_admin = + ep cap_net_raw = + ep’ $ 1

chmod + x este script y la lista blanca en sudo config.

nombre de usuario ALL = (ALL) NOPASSWD: / opt / my-stupid-eclipse

Añádalo a su archivo MAKE, especifique la ruta a su binario del Servidor.

Ahora tiene un script bastante extraño pero seguro, que no puede ser modificado por otros usuarios … y aún así una pequeña brecha para reemplazar el binario del Servidor con cualquier código malicioso, que ganará límites, por lo que ninguna verificación de archivo / stricts ayudará … puede $ 1 estar contaminado con comandos bash, ¿no? Adivina, no.

Puede usar el mecanismo de Aplicación Java Remota para esto.

  1. Crear la configuración de depuración para la aplicación remota de Java en Run -> Configuraciones de depuración …
  2. Establezca el nombre de su proyecto
  3. Elija el tipo de conexión como estándar (Socket Attach)
  4. Configure los parámetros de propiedades de conexión para su enlace (para usted será localhost y 443 ).
  5. Establecer punto de interrupción en su aplicación (por ejemplo, al comienzo del método principal )
  6. Ejecute su aplicación desde la terminal como superusuario con los siguientes parámetros: – java Xdebug -Xrunjdwp: transport = dt_socket, server = y, address = 443 MyApp
  7. Botón de eliminación de errores en Eclipse para la aplicación Java remota creada anteriormente
  8. ¡Tu código debe detenerse en el punto de interrupción en Eclipse!