Недавно я отключил возможность кэширования аутентификации [117], так что теперь он каждый раз запрашивает у меня пароль.
И хотя это хорошо для безопасности, оно вызвало одну небольшую проблему, решение которой я не смог найти, но я не могу запускать команды, которые выглядят следующим образом:
sudo &
Раньше я выполнял команду sudo
до этого, она кэшировала мой пароль и позволяла мне запускать команды sudo
без запроса в течение следующих нескольких минут, и, таким образом, это позволяло мне запускать команду команда.
Но когда я запускаю его сейчас, так как нет кэширования, и он сразу же запускает новый поток, а sudo
даже не запрашивает у меня пароль, я не могу запустить его таким образом . [+1112]
Так что, если я не запускаю sudo -i
до этого, я не могу выполнить команду в этом формате, которая становится довольно раздражающей.
Так что мне было интересно, есть ли способ обойти это и при этом запускать программы и команды таким образом?
Я использую Ubuntu GNOME 15.10 с GNOME 3.18 и, в частности, программу, которую я хочу запустить таким образом etherape
, если это что-то меняет, но мне бы очень хотелось, чтобы решение работало для всех программ и команд.
Если бы Вы готовы установить 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 &
Вместо того, чтобы работать 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 &
Вы не можете. Эти &
отправляет команду в фон сразу. Таким образом, подоболочка создается в фоновом режиме, и команда выполняется там. Когда та команда выпускает подсказку, как имеет место sudo
, подсказка отображена в фоновом режиме, и Вы никогда не видите его.
единственный путь вокруг этого состоит в том, чтобы возвратить команду переднему плану, обеспечить пароль и передать его обратно фону. Например:
$ sudo command &
$ fg
sudo command
[sudo] password for terdon:
Теперь, введите свой пароль, совершите нападки Входят и затем поражают Ctrl Z для передачи его обратно фону и bg
, чтобы сказать ему продолжать работать.
А более простой подход никогда не должен был бы использовать &
и, вместо этого, отправить задания в фон вручную с Ctrl Z и bg
после запуска их.
Наконец, Вы могли бы хотеть рассмотреть тайм-аут пароля sudo's установки к чему-то как 1 или 2 секунды. Это все еще дало бы Вам достаточно безопасности (если Вы не пытаетесь принять меры против Flash), и позвольте Вам командам выполнения как этот как ожидалось.