Как я выполняю команду sudo, нуждающуюся во вводе пароля в фоновом режиме?

Я недавно отключил sudoспособность к кэшированию аутентификации так, чтобы это теперь предложило мне пароль каждый раз.

И хотя это хорошо для безопасности, она вызвала одну небольшую проблему, для которой я не смог выяснить решение, я неспособен к командам выполнения, которые идут вроде:

sudo <command> &

В прошлом я выполнил бы a sudo команда перед этим, это кэшировало бы мой пароль и позволило бы мне работать sudo команды без подсказки в течение следующих нескольких минут, и таким образом это позволило бы мне выполнять команду.
Но когда я выполняю его теперь, поскольку нет никакого кэширования перед рукой и поскольку это сразу начинает новую дискуссию и sudo даже не предлагает мне пароль, я не могу выполнить его таким образом.

Таким образом, если я не работаю sudo -i перед ним я не могу выполнить команду в этом формате, который становится довольно раздражающим.
Таким образом, я задавался вопросом, существует ли какой-либо способ обойти это и все еще запустить программы и команды таким образом?

Я выполняю Ubuntu GNOME 15.10 с GNOME 3.18, и конкретно программа, которую я хочу запустить этим способом, etherape если бы это имеет какое-либо значение, но я действительно хотел бы решение работать на все программы и команды.

29
задан 27 March 2016 в 00:54

3 ответа

Вместо выполнения sudo в фоновом режиме сказать sudo выполнять команду в фоновом режиме. От man sudo:

-b, --background
     Run the given command in the background.  Note that it is not
     possible to use shell job control to manipulate background
     processes started by sudo.  Most interactive commands will
     fail to work properly in background mode.

Например:

sudo -b sleep 10

Иначе должен был бы просто использовать оболочку для выполнения команды:

sudo sh -c 'sleep 10 &'

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

-A, --askpass
     Normally, if sudo requires a password, it will read it from
     the user's terminal.  If the -A (askpass) option is
     specified, a (possibly graphical) helper program is executed
     to read the user's password and output the password to the
     standard output.  If the SUDO_ASKPASS environment variable is
     set, it specifies the path to the helper program.  Otherwise,
     if sudo.conf(5) contains a line specifying the askpass
     program, that value will be used.  For example:

         # Path to askpass helper program
         Path askpass /usr/X11R6/bin/ssh-askpass

     If no askpass program is available, sudo will exit with an
     error.

Программы Askpass обычно используются для SSH. Один такой обеспечивается ssh-askpass-gnome пакет, который установлен по умолчанию, по крайней мере, на Ubuntu 15.10.

SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A sleep 10 &
56
ответ дан 27 March 2016 в 10:54
  • 1
    Эй брат u628898 помогите.. как Вы зафиксировали его.. я застреваю снова после чистой установки.. скажите мне, как установить этот драйвер – Ankit Mishra 21 September 2017 в 18:06

Если Вы готовы установить timestamp_timeout по крайней мере к чему-то как 0.02 (1,2 секунды, я сказал бы столь же безопасный как 0) в /etc/sudoers (необходимый в Вашем случае, но с настройками по умолчанию или с timestamp_timeout набор к чему-либо, но 0 можно просто сделать следующее), Вы могли установить псевдоним как этот в ~/.bashrc, который не потребует, чтобы Вы не забыли делать что-то прежде, чем выполнить команду и который позволит Вам удерживать контроль над процессом.:

alias sudo='sudo -v; [ $? ] && sudo'

Прием здесь является точкой с запятой, которая сделает синтаксический анализ Bash sudo -v сначала и отдельно, аутентифицируя пользователя и предел потенциальная часть фоновой обработки к [ $? ] && sudo команда, которая проверит если sudo -v было успешно и выполнен sudo снова (потенциально фоновая обработка это) в случае, если это было.

$ alias sudo='sudo -v; [ $? ] && sudo'
$ sudo -H gedit &
[sudo] password for user:
[1] 19966
$ jobs
[1]+  Running                 [ $? ] && sudo -H gedit &
11
ответ дан 27 March 2016 в 10:54

Вы не можете. Эти & отправляет команду в фон сразу. Таким образом, подоболочка создается в фоновом режиме, и команда выполняется там. Когда та команда выпускает подсказку, как имеет место sudo, подсказка отображена в фоновом режиме, и Вы никогда не видите его.

единственный путь вокруг этого состоит в том, чтобы возвратить команду переднему плану, обеспечить пароль и передать его обратно фону. Например:

$ sudo command &
$ fg
sudo command
[sudo] password for terdon: 

Теперь, введите свой пароль, совершите нападки Входят и затем поражают Ctrl Z для передачи его обратно фону и bg, чтобы сказать ему продолжать работать.

А более простой подход никогда не должен был бы использовать & и, вместо этого, отправить задания в фон вручную с Ctrl Z и bg после запуска их.

Наконец, Вы могли бы хотеть рассмотреть тайм-аут пароля sudo's установки к чему-то как 1 или 2 секунды. Это все еще дало бы Вам достаточно безопасности (если Вы не пытаетесь принять меры против Flash), и позвольте Вам командам выполнения как этот как ожидалось.

0
ответ дан 27 March 2016 в 10:54

Другие вопросы по тегам:

Похожие вопросы: