Pseudo- Sudo sur Cygwin / bash


0

J'ai besoin de sudo au travail, et non pas au sud lui-même mais à un moyen de permettre aux commandes sudo de fonctionner comme décrit ici .

Ce serait génial, mais les lignes sudo ont des arguments supplémentaires, comme:

sudo -u user bash -c 'uptime'

Et si je devais utiliser la bash dans le lien ci-dessus, je reçois simplement la sortie

/usr/bin/sudo: line 3: -u: command not found

Y a-t-il un moyen de contourner cela? Pour le faire partir de la citation, au lieu de peut-être -c.

Réponses:


1

Si vous êtes certain que la commande envoyée sera toujours identique à

sudo -u user command...

alors votre faux script sudo peut simplement émettre ses deux premiers arguments:

#!/bin/bash
shift 2
exec "$@"

Sinon, vous devez analyser un peu l'argument:

#!/bin/bash
while getopts :u: opt
do
  # normally you'd process options and arguments here,
  # but in this case just ignore them
done
shift $((OPTIND-1))  # throw out processed options and arguments
exec "$@"

getopts lit et retourne les options et les arguments de la ligne de commande jusqu'à ce qu'il n'y en ait plus. Vous pouvez lire à ce sujet dans bash (1) ( man bash ) si vous voulez en savoir plus sur la façon de traiter les arguments de ligne de commande.


Les lignes sont envoyées à distance et sont dans ce format. L’utilisateur à partir duquel ils s’exécutent n’est pas important dans ce cas, il suffit du reste pour l’exécuter.
Marcus Hughes

OK je vois. Mis à jour.
Andrew Schulman

0

C’est ce que j’ai utilisé pour que Sudo lance Ansible sous babun:

#!/bin/bash
count=0

for var in "$@"
  do
    (( count++ ))
  done

shift $count
exec "$@"

Peut-être que vous pouvez utiliser $# pour le compte. # Augmente le nombre de paramètres de position en décimal.
Hastur
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.