Мне нужно, чтобы sudo работал, не сам sudo, а способ, позволяющий командам sudo работать, как описано здесь.

Это было бы замечательно, однако строки sudo имеют дополнительные аргументы, такие как:

sudo -u user bash -c 'uptime'

И если бы я использовал bash в ссылке выше, я бы просто получил вывод

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

Есть ли что-нибудь вокруг этого? Чтобы он запускался из цитаты, а не, возможно, -c.

2 ответа2

1

Если вы уверены, что отправленная команда всегда будет выглядеть так же, как

sudo -u user command...

тогда ваш поддельный скрипт sudo может просто выбросить свои первые два аргумента:

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

В противном случае вы должны выполнить небольшой анализ аргумента:

#!/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 читает и возвращает параметры командной строки и аргументы, пока их больше нет. Вы можете прочитать об этом в bash(1) (man bash), если хотите узнать больше о том, как обрабатывать аргументы командной строки.

0

Вот что я использовал для sudo для запуска Ansible под babun:

#!/bin/bash
count=0

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

shift $count
exec "$@"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .