J'ai récemment désactivé sudo
la capacité de mise en cache de l'authentification de sorte qu'il me demande maintenant un mot de passe à chaque fois.
Et bien que cela soit bon pour la sécurité, cela a causé un léger problème pour lequel je n'ai pas pu trouver de solution, je ne suis pas en mesure d'exécuter des commandes qui vont dans le sens de:
sudo <command> &
Dans le passé, j'aurais exécuté une sudo
commande avant cela, il aurait mis en cache mon mot de passe et m'aurait permis d'exécuter des sudo
commandes sans invite pendant les prochaines minutes, et donc cela me permettrait d'exécuter la commande.
Mais lorsque je l'exécute maintenant car il n'y a pas de mise en cache avant et qu'il démarre un nouveau thread immédiatement et sudo
ne me demande même pas de mot de passe, je ne peux pas l'exécuter de cette façon.
Donc, à moins que je ne l'exécute sudo -i
avant, je ne peux pas exécuter une commande dans ce format qui devient plutôt ennuyeux.
Je me demandais donc s'il y avait un moyen de contourner ce problème et d'exécuter des programmes et des commandes de cette manière?
J'utilise Ubuntu GNOME 15.10 avec GNOME 3.18, et en particulier le programme que je veux exécuter de cette manière est etherape
si cela fait une différence, mais j'aimerais vraiment que la solution fonctionne pour tous les programmes et commandes.
&
n'est pas vraiment consultable, je change cela en… sudo command in the background
.Réponses:
Au lieu de s'exécuter
sudo
en arrière-plan, ditessudo
d'exécuter la commande en arrière-plan. Deman sudo
:Par exemple:
Une autre façon serait d'utiliser simplement un shell pour exécuter la commande:
Une autre option serait de spécifier un programme graphique pour obtenir le mot de passe et de l'envoyer
sudo
en arrière-plan quand même:Les programmes Askpass sont généralement utilisés pour SSH. L'un d'eux est fourni par le
ssh-askpass-gnome
package, qui est installé par défaut, au moins sur Ubuntu 15.10.la source
Si vous êtes prêt à définir
timestamp_timeout
au moins quelque chose comme0.02
(1,2 secondes, je dirais tout aussi sûr que0
) dans/etc/sudoers
(nécessaire dans votre cas, mais avec les paramètres par défaut ou avectimestamp_timeout
n'importe quoi mais0
on peut simplement faire ce qui suit) , vous pouvez définir un alias comme celui-ci dans~/.bashrc
, qui ne vous obligera pas à vous souvenir de faire quelque chose avant d'exécuter la commande et qui vous permettra de garder le contrôle du processus .:L'astuce ici est le point-virgule, qui fera analyser Bash en
sudo -v
premier et séparément, authentifiant l'utilisateur, et limitera la partie d'arrière-plan potentielle à la[ $? ] && sudo
commande, qui vérifiera si ellesudo -v
a réussi et s'exécutera àsudo
nouveau (éventuellement en arrière-plan) au cas où elle le serait.la source
sudo -v
N'étendre la mise en cache des titres de compétences , même si la mise en cache est désactivé? Et, IIRC <pour que les alias se développent, l'espace doit être à la fin de la commande, pas au début.timestamp_timeout
mis à0
. Et oui, j'ai complètement gâché avec la chose d'extension d'alias, en fait l'alias ne devrait pas s'étendre. Merci.alias sudo='sudo -v && sudo'
aussi bon?;
Bash analyse d'sudo -v
abord et séparément; l'utilisation de&&
Bash analyserait à la fois une seule commande et l'arrière-plan immédiatement.Tu ne peux pas. L'
&
envoie la commande à l'arrière-plan immédiatement. Autrement dit, un sous-shell est créé en arrière-plan et la commande y est exécutée. Lorsque cette commande émet une invite, comme c'est le cassudo
, 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:
Maintenant, entrez votre mot de passe, appuyez sur Enterpuis sur CtrlZpour le renvoyer à l'arrière-plan et
bg
lui dire de continuer à fonctionner.Une approche plus simple consisterait à ne jamais utiliser
&
et, au lieu de cela, à envoyer des travaux en arrière-plan manuellement avec CtrlZetbg
après leur lancement.Enfin, vous voudrez peut-être envisager de définir le délai d'expiration du mot de passe de sudo sur quelque chose comme 1 ou 2 secondes. Cela vous donnerait quand même suffisamment de sécurité (sauf si vous essayez de vous prémunir contre le Flash) et vous permettrait d'exécuter des commandes comme celle-ci comme prévu.
la source
man sudoers
dit quetimestamp_timeout
la valeur doit spécifier les minutes avec une partie fractionnaire possible (ce qui, soit dit en passant, fait unesudo
erreur si j'essaye d'en spécifier une, je ne sais pas pourquoi).2.5
fonctionne très bien ici (Arch,sudo
version 1.8.15).