Недавно я отключил функцию sudo
кэширования аутентификации, поэтому теперь каждый раз запрашивает пароль.
И хотя это хорошо для безопасности, оно вызвало одну небольшую проблему, для которой я не смог найти решение, я не могу запускать команды, которые выглядят следующим образом:
sudo <command> &
В прошлом я выполнял sudo
команду до этого, он кэшировал мой пароль и позволял бы мне запускать sudo
команды без запроса в течение следующих нескольких минут, и, таким образом, это позволяло мне запускать команду.
Но когда я запускаю его сейчас, поскольку кеширования не происходит, и он сразу же запускает новый поток и sudo
даже не запрашивает у меня пароль, я не могу запустить его таким образом.
Так что, если я не запускаю sudo -i
до этого, я не могу выполнить команду в этом формате, которая становится довольно раздражающей.
Так что мне было интересно, есть ли способ обойти это и при этом запускать программы и команды таким образом?
Я использую Ubuntu GNOME 15.10 с GNOME 3.18, и, в частности, программа, которую я хочу запустить таким образом, etherape
если в этом есть какая-то разница, но мне бы очень хотелось, чтобы решение работало для всех программ и команд.
&
самом деле не для поиска, я изменяю это на… sudo command in the background
.Ответы:
Вместо того, чтобы работать
sudo
в фоновом режиме, скажитеsudo
запустить команду в фоновом режиме. Отman sudo
:Например:
Другой способ - просто использовать оболочку для запуска команды:
Другой вариант - указать графическую программу для получения пароля и
sudo
в любом случае отправить в фоновый режим:Программы Askpass обычно используются для SSH. Один из них предоставляется
ssh-askpass-gnome
пакетом, который устанавливается по умолчанию, по крайней мере, в Ubuntu 15.10.источник
Если вы хотите установить
timestamp_timeout
хотя бы что-то вроде0.02
(1,2 секунды, я бы сказал, так же безопасно, как0
) в/etc/sudoers
(необходимо в вашем случае, но с настройками по умолчанию или сtimestamp_timeout
установленным на что-либо, кроме0
одного, можно просто сделать следующее) Вы можете установить псевдоним, подобный этому, в~/.bashrc
котором вам не нужно будет что-то помнить перед выполнением команды и который позволит вам контролировать процесс.Уловка здесь - точка с запятой, которая заставит Bash разобрать
sudo -v
сначала и отдельно, аутентифицировать пользователя и ограничивать потенциальную фоновую часть[ $? ] && sudo
командой, которая проверяет,sudo -v
был ли успешным, и запускаетсяsudo
снова (возможно, в фоновом режиме), если это так.источник
sudo -v
кэширование учетных данных, даже если кэширование отключено? И, IIRC <для расширения псевдонимов, пробел должен быть в конце команды, а не в начале.timestamp_timeout
настроен на0
. И да, я полностью испортил вещь расширения псевдонима, на самом деле псевдоним не должен расширяться. Спасибо.alias sudo='sudo -v && sudo'
бы так хорошо?;
Bash разбираетsudo -v
сначала и отдельно; использование&&
Bash сразу проанализировало бы как одну команду, так и фон.Ты не можешь
&
Посылает команду на задний план сразу. То есть подоболочка создается в фоновом режиме, и команда выполняется там. Когда эта команда выдает приглашение, как в случаеsudo
, приглашение отображается в фоновом режиме, и вы его никогда не видите.Единственный способ обойти это - вернуть команду на передний план, предоставить пароль и отправить его обратно в фоновый режим. Например:
Теперь введите свой пароль, нажмите, Enterа затем нажмитеCtrlZ чтобы отправить его обратно в фоновый режим и
bg
сказать, чтобы он продолжал работать.Более простой подход состоит в том, чтобы никогда не использовать
&
и вместо этого отправлять задания в фоновый режим вручную сCtrlZbg
их запуском и после его запуска.Наконец, вы можете захотеть установить время ожидания пароля sudo примерно на 1 или 2 секунды. Это все равно обеспечит вам достаточную безопасность (если вы не пытаетесь защититься от Flash) и позволит вам запускать такие команды, как ожидалось.
источник
man sudoers
говоритtimestamp_timeout
значение «s должно быть указаны минуты с возможной дробной частью (которая, кстати , делаетsudo
ошибки, если я пытаюсь указать один, не знает , почему).2.5
отлично работает здесь (Arch,sudo
версия 1.8.15).