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

Недавно я отключил возможность кэширования аутентификации [117], так что теперь он каждый раз запрашивает у меня пароль.

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

sudo  &

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

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

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

29
задан 27.03.2016, 10:54

3 ответа

Если бы Вы готовы установить 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 &
0
ответ дан 17.04.2019, 06:30

Вместо того, чтобы работать sudo в фоновом режиме, скажите sudo выполнять команду в фоновом режиме. От [1 110] 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 &
0

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

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

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

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

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

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

0
ответ дан 17.04.2019, 06:30

Теги

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