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.

Marcus Hughes
la source

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.

Andrew Schulman
la source
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 "$@"
Jonathan Le
la source
Peut-être que vous pouvez utiliser $# pour le compte. # Augmente le nombre de paramètres de position en décimal.
Hastur