sudo для одной команды в скрипте bash - PullRequest
8 голосов
/ 07 мая 2011

Это может быть глупый вопрос.

У меня есть скрипт, который я хочу переносить между Mac OS X и Linux, который я использую. В OS X команда в сценарии требует sudo, где на коробке Linux это не так.

Короче говоря, как выполнить одну команду в сценарии с sudo, а затем удалить повышенные привилегии для остальной части сценария?

Я пытался использовать

su -

и

su -c

но они оба, похоже, ошибаются. (Они говорят «извините» и идем дальше, я полагаю, потому что он пытается работать как root, а root не имеет пароля)

Я знаю, что должен быть глупый и простой способ сделать это, что все предлагают?

Ответы [ 3 ]

6 голосов
/ 07 мая 2011

Вы можете «отозвать» разрешение sudo (фактически: закрыть временное окно sudo раньше), выполнив:

sudo -k

Кроме того, вы можете настроить sudo так, чтобы разрешать только повышенные разрешения для определенных команд или дажевыдавать себя за не-root для конкретных команд.Смотри man sudoers.В разделе примеров четко указано, что практически нет ограничений на конфигурируемость sudo (роли, хосты, команды, возможность экранирования, разрешение целевых пользователей sudo, исключения из разрешенных вещей, авторизация без пароля и т. Д. И т. Д.).

Надеюсь, интересный пример в вашем контексте:

Пользователь fred может запускать команды как любой пользователь в БД Runas_Alias ​​(oracle или sybase) без ввода пароля.

   fred           ALL = (DB) NOPASSWD: ALL

Если вы не можете / не хотите вмешиваться в / etc / sudoers (visudo!), Тогда я предлагаю использовать что-то вроде

{
     trap "sudo -k" EXIT INT QUIT TERM
     sudo ls # whatever
}
0 голосов
/ 07 мая 2011

Использование sudo без su:

#!/bin/bash
whoami  # Runs under your regular account
sudo whoami  # Runs as root
whoami  # Runs under your regular account again

Вот вывод, когда я запускаю его:

$ ./sudotest
gordon
Password:
root
gordon
0 голосов
/ 07 мая 2011

Попробуйте sudo su вместо su, чтобы вернуться к обычному пользователю.

...