J'ai récemment désactivé possibilité de mise en cache de l'authentification de Sudo
pour qu'il me demande maintenant un mot de passe à chaque fois.
Et bien que ce soit bon pour la sécurité, cela a posé un léger problème pour lequel je n'ai pas pu trouver de solution, je ne peux pas exécuter de commandes qui vont dans le sens de:
Sudo <command> &
Auparavant, j'exécutais une commande Sudo
auparavant, il avait mis mon mot de passe en cache et m'autorisait à exécuter les commandes Sudo
sans invite pendant quelques minutes, ce qui me permettait également d'exécuter la commande.
Mais quand je le lance maintenant car il n’ya pas de cache avant et comme il commence un nouveau fil immédiatement et que Sudo
ne me demande même pas un mot de passe, je ne peux pas le lancer de cette façon.
Donc, à moins que je ne lance Sudo -i
avant cela, je ne peux pas exécuter de commande dans ce format qui devient plutôt gênant.
Je me demandais s’il existait un moyen de contourner le problème et de toujours exécuter des programmes et des commandes de cette manière?
J'utilise Ubuntu GNOME 15.10 avec GNOME 3.18, et le programme que je veux exécuter de cette façon est etherape
si cela fait une différence, mais j'aimerais vraiment que la solution fonctionne pour tous les programmes et toutes les commandes.
Au lieu d'exécuter Sudo
en arrière-plan, indiquez Sudo
pour exécuter la commande en arrière-plan. De 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.
Par exemple:
Sudo -b sleep 10
Une autre solution consiste simplement à utiliser un shell pour exécuter la commande:
Sudo sh -c 'sleep 10 &'
Une autre option serait de spécifier un programme graphique pour obtenir le mot de passe et d’envoyer de toute façon Sudo
à l’arrière-plan:
-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.
Les programmes Askpass sont généralement utilisés pour SSH. Le paquetage ssh-askpass-gnome
, installé par défaut au moins sur Ubuntu 15.10, en est un exemple.
Sudo_ASKPASS=/usr/bin/ssh-askpass Sudo -A sleep 10 &
Si vous souhaitez définir timestamp_timeout
sur au moins quelque chose comme 0.02
(1,2 seconde, je dirais aussi sûr que 0
) dans /etc/sudoers
(nécessaire dans votre cas, mais avec les paramètres par défaut ou avec timestamp_timeout
, définissez une valeur autre que 0
peut simplement faire ce qui suit), vous pouvez définir un alias comme celui-ci dans ~/.bashrc
, qui ne vous demandera pas de faire quelque chose avant d'exécuter la commande et qui vous permettra de garder le contrôle du processus.
alias Sudo='Sudo -v; [ $? ] && Sudo'
L’astuce ici est le point-virgule, qui obligera Bash à analyser Sudo -v
d’abord et séparément, à authentifier l’utilisateur et à limiter la partie d’arrière-plan potentielle à la commande [ $? ] && Sudo
, qui vérifiera si Sudo -v
a réussi et exécutera à nouveau Sudo
(éventuellement l’éclairant) c'était.
$ alias Sudo='Sudo -v; [ $? ] && Sudo'
$ Sudo -H gedit &
[Sudo] password for user:
[1] 19966
$ jobs
[1]+ Running [ $? ] && Sudo -H gedit &
Tu ne peux pas. Le &
envoie immédiatement la commande à l'arrière-plan. En d’autres termes, un sous-shell est créé en arrière-plan et la commande y est exécutée. Lorsque cette commande émet une invite, comme dans le cas de Sudo
name__, l'invite s'affiche en arrière-plan et vous ne la voyez jamais.
La seule solution consiste à ramener la commande au premier plan, à fournir le mot de passe et à le renvoyer à l'arrière-plan. Par exemple:
$ Sudo command &
$ fg
Sudo command
[Sudo] password for terdon:
Maintenant, entrez votre mot de passe, appuyez sur Enter et ensuite frappé CtrlZ pour le renvoyer à l’arrière-plan et bg
pour lui dire de continuer à fonctionner.
Une approche plus simple consisterait à ne jamais utiliser &
et à envoyer les tâches manuellement à l’arrière-plan avec CtrlZ et bg
après leur lancement.
Enfin, vous pouvez envisager de définir le délai d’expiration du mot de passe de Sudo sur 1 ou 2 secondes. Cela vous donnerait quand même assez de sécurité (à moins que vous essayiez de vous protéger contre le Flash) et vous permettrait d'exécuter des commandes comme celle-là comme prévu.