J'avais déjà posé cette question dans Stack Overflow , mais on m'a demandé de la poster ici. Faire de même.
J'ai exécuté cette commande en utilisant mon programme java-
sudo -u <username> -S pwd
J'ai cette sortie-
command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo
J'ai essayé d'éditer / etc / sudoers mais il contient déjà
<username> ALL=(ALL) NOPASSWD: ALL
Ensuite, j'ai appris que cela peut être fait en commentant le code suivant dans / etc / sudoers
# Defaults requiretty
De plus, par défaut, lorsque nous tentons d'exécuter une commande en tant qu'autre utilisateur sudo
, nous devons fournir notre propre mot de passe. Mais cela peut être changé en faisant le changement suivant dans / etc / sudoers-
Defaults targetpw
Ma question est, est-il possible d'exécuter ma commande ci-dessus en java sans apporter de modifications n'importe où, c'est-à-dire en ayant des paramètres par défaut ?
requiretty
est activé par défaut. Selon sasudo
propre documentation, il est "désactivé par défaut".Réponses:
Je ne sais pas comment exécuter les commandes shell en Java, mais regardez l'option -t pour la commande ssh
C'est ce que je fais lorsque j'ai besoin d'exécuter la commande en tant que root sur ssh (désactivation de la connexion root directe et tty requis par sudo)
la source
La réponse courte est non, vous devrez modifier les paramètres pour que sudo fasse les choses différemment de ce qu'il fait actuellement.
sudo n'est peut-être pas le bon outil pour cela. Les règles de Sudo sont là pour aider les administrateurs système à configurer un moyen d'obtenir des privilèges élevés qu'il est difficile d'abuser pour obtenir des privilèges supplémentaires / involontaires.
Si vous considérez ce que sudo fait pour vous:
Si vous voulez que votre java exécute des commandes arbitraires en tant qu'utilisateurs arbitraires sans fournir de mot de passe à ces utilisateurs ou aux vôtres, vous remplacez essentiellement sudo. Dans ce cas, vous devez créer vos propres règles pour éviter les abus.
Il existe essentiellement deux façons de procéder:
Dans le cas # 1, votre programme java exécute lui-même ce que fait sudo, et vous devez implémenter votre propre ensemble de règles pour vous protéger des abus.
Il existe des programmes autres que sudo pour faire # 2. Un exemple peut être trouvé dans https://code.google.com/archive/p/exec-wrapper/downloads
Ce script shell pratique crée un programme C pour exécuter une autre commande (généralement un script). Ensuite, vous compilez le programme C en un binaire et marquez cette racine setuid ou vraiment il pourrait être setuid à n'importe quel utilisateur. (mode: 4555 et propriétaire: root)
Tant que vous êtes sur un système de fichiers qui le permet, l'exécution du programme binaire exécutera la commande configurée en tant qu'ID utilisateur propriétaire du programme binaire lui-même.
la source