Je rencontre une erreur lorsque j'essaie d'exécuter mon application serveur à partir d'Eclipse. L'erreur est Java.net.BindException: autorisation refusée. Je pense que c'est parce que j'utilise le port 443 pour configurer une connexion SSL. Je peux contourner ce problème si j'exécute mon code sur la ligne de commande en utilisant Java et Sudo. Existe-t-il un moyen de configurer Eclipse de sorte que lorsque je clique sur le bouton Exécuter, mon application soit exécutée avec sudo?
Vous pouvez suivre ces étapes pour compiler/déboguer des applications en tant que superutilisateur.
Renommez votre application Java
Sudo mv/usr/lib/jvm/Java-6-openjdk/jre/bin/Java /usr/lib/jvm/Java-6-openjdk/jre/bin/Java.ori
Créez le script suivant et stockez-le sous/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
Modifiez les autorisations pour le rendre exécutable
Sudo chmod 0755/usr/lib/jvm/Java-6-openjdk/jre/bin/Java
Démarrage Eclipse
Pour exécuter des projets en tant que root, vous devez suivre ces étapes:
Remarque: L'idée vient de http://www.Eclipse.org/forums/index.php/mv/msg/87353/724852/#msg_724852
J'écris C pas Java mais cela devrait fonctionner dans les deux cas. J'utilise le débogage à distance - définissez une connexion "distante" à LOCALHOST qui vous permet de spécifier l'utilisateur avec lequel vous vous connecterez, spécifiez ROOT . Ensuite, définissez une application distante dans la connexion de configuration de débogage: LOCALHOST. Assurez-vous de cocher "Ignorer le téléchargement vers le chemin cible" en bas de l'onglet principal ainsi que sous la fenêtre des propriétés de connexion.
Une meilleure réponse, peut-être, si cela répond à vos besoins ET est possible, pourrait être une simple redirection de port sur votre routeur.
Au lieu d'essayer de forcer votre Linux/Unix à ouvrir un port réservé, lorsque vous ne le développez que maintenant (pas à installer) et que vous souhaitez l'exécuter dans un débogueur, configurez votre routeur pour rediriger le port 443 entrant (externe) vers un port c'est plus pratique pour vos besoins actuels (par exemple 4443).
Je pense que la plupart des routeurs prennent en charge cela, et si le vôtre ne le fait pas, cela donne à votre maman une bonne idée de cadeau de Noël ou d'anniversaire!
En supposant que vous êtes sous Linux (* nix), que diriez-vous de démarrer votre session Eclipse via une commande Sudo?
Tel que
Sudo ~/Eclipse/eclipse
Maintenant, quoi que vous fassiez avec Eclipse aura le contexte Sudo?
Comme mentionné dans ce fil :
Pour ouvrir un port inférieur à 1024 sur les systèmes Unix/Linux, vous devez être "root".
J'ai également utilisé l'argument
-Dorg.Eclipse.equinox.http.jetty.port=8080
pour changer le port d'écoute, mais cela semble ignoré (selon le stacktrace)Veuillez utiliser "
-Dorg.osgi.service.http.port=8080
".
Comme mentionné dans Service HTTP :
org.osgi.service.http.port
- spécifie le numéro de port à utiliser pour le service http. La valeur par défaut de cette propriété est 80 (qui nécessite l'autorisation root), conformément à la spécification OSGi.
org.osgi.service.http.port.secure
- spécifie le numéro de port à utiliser pour le service http sécurisé. La valeur par défaut de cette propriété est 443 (ce qui nécessite l'autorisation root), selon la spécification OSGi.
Peut-être que si vous essayez de modifier cette dernière propriété à une valeur supérieure à 1024, cela pourrait fonctionner sans nécessiter de privilège spécial.
Une autre option serait d'utiliser iptables ou ipfilter pour transférer le port 80 vers un port supérieur à 1024.
(Quelqu'un peut-il fournir un lien vers une explication pratique et facile à comprendre?)
Si vous utilisez des outils externes (menu Exécuter/Outils externes ou une icône à côté des icônes Exécuter/Déboguer dans la barre d'outils), vous pouvez utiliser n'importe quel script ou ce que vous voulez. Les scripts peuvent vous donner des droits élevés, ou quoi que ce soit.
D'un autre côté, cette façon de déboguer l'application peut devenir très difficile, car ni les commandes Exécuter ni Déboguer ne sont associées à cette configuration d'outil externe. Il est peut-être possible de connecter le débogueur Eclipse de l'application, mais je ne sais pas comment cela est possible.
Vous pouvez utiliser le mécanisme Remote Java Application pour cela.
Vous pouvez suivre cette voie
setcap 'cap_net_admin=+ep' Server
Vous aurez donc un débogage transparent (pas de wrapper Sudo - gdb ok). Inconvénients: c'est une faille de sécurité locale.
Solution:
mettez ceci dans/opt/my-stupid-Eclipse
#!/bin/sh
setcap 'cap_net_admin = + ep cap_net_raw = + ep' $ 1
chmod + x ce script et mettez-le en liste blanche sur Sudo config.
nom d'utilisateur ALL = (ALL) NOPASSWD:/opt/my-stupid-Eclipse
Ajoutez-le à votre makefile, spécifiez le chemin vers votre binaire Server.
Maintenant, vous avez un script assez étrange mais sécurisé, qui ne peut pas être modifié par d'autres utilisateurs ... et encore une petite brèche pour remplacer le binaire du serveur par un code malveillant, qui gagnera des majuscules, donc aucune vérification de nom de fichier/stricts n'aidera .. peut $ 1 être contaminé par des commandes bash, non? Je suppose que non.