0

I need sudo to work, well not sudo itself but a way of allowing the sudo commands to work as described here.

This would be great however the sudo lines have extra arguments, like :

sudo -u user bash -c 'uptime'

And if I were to use the bash in the link above I simply get the output

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

Is there anyway around this? To make it run from the quote, instead of perhaps -c.

2 Answers2

1

If you're sure that the command that's sent will always look exactly like

sudo -u user command...

then your fake sudo script can just throw out its first two arguments:

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

Otherwise, you have to do a little argument parsing:

#!/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 reads and returns command-line options and arguments, until there are no more. You can read about it in bash(1) (man bash) if you want to know more about how to process the command-line arguments.

0

This is what I used for sudo to run Ansible under babun:

#!/bin/bash
count=0

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

shift $count
exec "$@"