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?
sudo -u -S pwd
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:
- demande un mot de passe pour vérifier l'identité
- élever les privilèges
- puis obtenir éventuellement des privilèges en tant qu'autre utilisateur
- journaux sudo utiliser pour accéder ou exécuter des commandes
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:
- exécutez votre java avec des privilèges élevés et prenez et redonnez soigneusement les privilèges dont vous avez besoin (voir appels de fonction setuid () seteuid () C).
- exécuter un programme externe pour obtenir des privilèges élevés lorsque vous les souhaitez
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.