1
votes

Est-il possible de désactiver le délai d'expiration sudo dans le shell actuel?

Certaines applications (par exemple yay ) utilisent sudo pour exécuter certaines commandes en tant que root. Cela signifie que je dois m'asseoir devant le terminal et attendre que sudo me demande un mot de passe, puis le saisir manuellement pour que vous continuiez. Je peux éviter cela en exécutant d'abord une commande en tant que sudo (comme sudo -v ). De cette façon, vous pouvez exécuter des commandes en tant que sudo sans que cela ne me demande un mot de passe.

Mais parfois, les applications prennent tellement de temps à installer que la session sudo expire (15 minutes) et sudo me demande de nouveau un mot de passe. Étant donné que je quitte généralement mon ordinateur ou que je passe à un autre espace de travail pendant que cela se produit, l'invite de mot de passe sudo expire généralement, ce qui est très ennuyeux.

Je ne veux pas désactiver complètement le délai d'expiration sudo, car il est là pour une raison. Cependant, quand je m'attends à ce qu'une commande qui utilise sudo prenne beaucoup de temps, j'aimerais pouvoir désactiver le délai d'expiration sudo pour le shell actuel uniquement.

Quelque chose comme:

sudo --disable-timeout

Maintenant, je devrais pouvoir exécuter sudo dans le shell actuel, sans jamais avoir à ressaisir mon mot de passe, ou jusqu'à ce que sudo -k .

Est-ce que quelque chose comme ça est possible, ou vais-je devoir écrire un script wrapper qui actualise régulièrement la session sudo pour moi?


2 commentaires

Ajoutez la commande spécifique que vous devez exécuter dans / etc / sudoers afin de ne pas avoir besoin du mot de passe.


@stark Il n'y a pas de commande spécifique. yay utilise sudo sous le capot, je ne sais même pas quelles commandes il exécute, et il exécute probablement un tas de commandes différentes.


4 Réponses :


2
votes

Voici une solution de contournement possible. Écrivez un script comme celui-ci (par exemple sudo-stay-validated.sh ):

$ bash sudo-stay-validated.sh

Exécutez le script dans le terminal où sudo doit rester validé:

#!/bin/bash

while true; do
    sudo -v
    sleep 60
done

Appuyez sur Ctrl + Z pour le placer en arrière-plan, puis n'oubliez pas d'exécuter $ bg pour reprendre le script en arrière-plan.

Cela maintient sudo validé dans le shell actuel jusqu'à ce qu'il soit fermé.


0 commentaires

-1
votes

Eh bien, pourquoi ne pas utiliser screen à cette fin? Connectez-vous avec ssh , démarrez l' écran , démarrez votre commande et déconnectez-vous de l' écran . Ensuite, lorsque vous êtes prêt à vérifier si votre procédure est terminée, attachez-la à nouveau. Mais encore mieux, envoyez une notification par e-mail à une adresse e-mail spéciale et votre téléphone vous informera que le travail est terminé (j'espère que vous avez un téléphone portable plus ou moins moderne). https://linux.die.net/man/1/screen


13 commentaires

Je ne comprends pas ce que cela résout. Sudo expirera toujours dans la session bash à l'écran, ce qui signifie que la commande que j'ai exécutée se bloquera en attendant l'invite de mot de passe sudo, puis expirera et quittera.


Eh bien, vous n'avez pas fourni suffisamment d'informations pour comprendre la tâche que vous essayez d'accomplir. Vous pouvez prolonger le délai (visudo) lorsque vous savez à l'avance combien de temps cela peut prendre. Le processus en tant que règle s'exécute sous un autre utilisateur - vous pouvez ajouter un travail cron à exécuter, disons toutes les 2 à 5 minutes, vérifier le fichier de marqueur et lancer le script souhaité. De votre côté, vous placez vos données au bon endroit, puis appuyez sur le fichier de marqueur et le travail cron fera le reste. Sudo destiné à donner un accès temporaire pour exécuter une commande - il n'est pas destiné à s'exécuter sans surveillance pendant une période prolongée.


Pour plus de clarté: le travail cron est exécuté par l'utilisateur dans lequel vous sudo.


À partir de votre message, il n'est pas clair lorsque vous invoquez sudo - avant de démarrer un travail, ou au milieu du script de travail démarre sudo et vous devez fournir le mot de passe. Dans le dernier cas, vous devez regarder dans l' attente . itbook.store/books/9781565920903


J'ai mis à jour par question pour essayer de le rendre plus clair. Je ne lance pas sudo moi-même, l'application yay exécute sudo pour exécuter certaines commandes en tant que root. Je dois attendre patiemment que vous yay d'exécuter sudo, car il me demandera un mot de passe. J'entre le mot de passe, et yay POURSUIT. Si yay est super lent (compilation de webkit, par exemple), sudo expirera et il me demandera à nouveau un mot de passe lorsqu'il essaiera d'exécuter sudo. C'est super ennuyeux car je suis très souvent loin du PC lorsque cela se produit, ou concentré sur un espace de travail différent.


Ok, maintenant plus de détails sur le processus sont disponibles. Que fait exactement sudo en tant que root? La compilation peut être effectuée dans la plupart des cas sans privilèges root. Mais il est inévitable d'exécuter l'installation (des programmes, des bibliothèques) en tant que root dans l'emplacement bin / lib du système.


yay est un outil pour télécharger, compiler, empaqueter et installer des applications à l'aide de configurations du référentiel d'utilisateurs Arch (AUR). Il a besoin d'un accès root pour installer les dépendances et installer les packages terminés.


Ok, maintenant il semble que vous parlez d'Arch Linux. Êtes-vous le mainteneur de paquet? Le téléchargement, la compilation, l'empaquetage ne nécessitent pas de privilèges root sauf si vous tombez sur des dépendances (existe-t-il un moyen de trouver et de préinstaller les dépendances à l'avance?) L'installation de packages nécessitera en effet un accès au niveau racine . Avez-vous visité la page Web suivante? aur.archlinux.org/packages/yay Je crois que votre question devrait y être adressée et que quelqu'un y répondra probablement.


J'ai joué avec Arch Linux (installer manuellement Arch, ajouter les packages requis, installer / configurer l'interface graphique, installer les programmes les plus courants). Je comprends que si vous créez un package mainteneur ou que vous construisez votre propre distribution basée sur Arch, vous devez compiler beaucoup de packages, ce qui prendrait beaucoup de temps - et avec sudo, vous pourriez rencontrer ce problème. Mais alors pourquoi ne pas simplement exécuter le yay sous le compte root? Vous pouvez le faire sur un seul ordinateur de development / maintenance - tous les autres systèmes informatiques peuvent télécharger des paquets précompilés à partir du référentiel via ftp / http.


REMARQUE: Vous devez fournir suffisamment d'informations dans votre question pour obtenir une réponse utile. Quelque chose comme ceci: Je suis un mainteneur de paquet pour Arch Linux, j'utilise l'utilitaire yay pour télécharger, compiler, empaqueter, installer des logiciels. yay utilitaire fonctionne pendant une période prolongée, pendant son travail, il exécute l'utilitaire sudo qui expire si je n'entre pas de mot de passe (j'effectue un autre travail en parallèle). Existe-t-il un moyen de résoudre ce problème afin que sudo n'expire pas?


Je ne sais pas si la solution suivante sera acceptable pour votre situation: ouvrir le terminal, ssh root @ localhost, démarrer yay , laissez-le fonctionner - pas de sudo = pas de délai.


Ou si vous le faites à distance: ouvrez le terminal, ssh user @ ordinateur, écran de démarrage, ssh root @ localhost, démarrez yay , déconnectez de l'écran. Au fur et à mesure que le temps passe: ouvrez le terminal, ssh utilisateur @ ordinateur, attachez-vous à l' écran , voyez la progression, déconnectez-vous de l'écran. Au fur et à mesure que le temps passe: ouvrez le terminal, ssh user @ computer, attachez l' écran , vous yay terminé, quittez [ssh root @ localhost], quittez l' écran , quittez ssh user @ remote.


Pour clarifier, je ne suis pas un mainteneur de paquet. J'ai juste beaucoup de paquets installés à partir de l'AUR (par yay). Souvent, lorsque yay -Syyu pour mettre à jour mes packages, cela peut prendre une heure ou plus, me demandant le mot de passe sudo plusieurs fois pendant cette période. Je ne considère pas exécuter yay en tant que root comme une solution de contournement acceptable, pour des raisons de sécurité.



2
votes

Il ne semble pas y avoir de moyen facile de le faire pour le shell actuel, mais vous pouvez définir un délai globalement.

Afin de définir un délai d'expiration différent (globalement) de celui par défaut (= 15 min), vous pouvez modifier /etc/sudoers :

cd /etc/sudoers.d
sudo visudo -f username
Defaults        env_reset,timestamp_timeout=30    # timeout in minutes

Ou:

sudo visudo                                       # opens /etc/sudoers for editing
# change the following line:
# Defaults    env_reset
# to:
Defaults        env_reset,timestamp_timeout=30    # timeout in minutes

Valeurs spéciales:

  • -1 : pas de timeout
  • 0 : être invité à chaque fois


0 commentaires

1
votes

Généralement, le délai d'expiration sudo est là pour une raison (de sécurité). Lorsque vous essayez (avec succès) de contourner ce délai, vous affaiblissez la sécurité de votre système. Alors, jetons un autre regard sur le problème déclaré: vous exécutez un long travail, après un certain temps, sudo demande un mot de passe et expire. Vous proposez d'empêcher sudo de demander le mot de passe. Vous pouvez également empêcher sudo d'expirer. Mettre:

--sudoloop
    Loop sudo calls in the background to prevent sudo from timing out during long builds.

dans votre fichier sudoers pour laisser sudo attendre la saisie de votre mot de passe. Cela évitera votre problème de délai d'expiration, mais bloquera votre build jusqu'à ce que vous saisissiez le mot de passe. Du côté positif, vous évitez de compromettre la sécurité.

Alternativement, puisque vous mentionnez spécifiquement yay, il existe une option de ligne de commande pour yay qui le fait appeler sudo en arrière-plan pour l'empêcher de se terminer. De l' man sway :

Defaults passwd_timeout=0


1 commentaires

Huh, cela rend mon script obsolète. Je me demande s'il s'agit d'une nouvelle option de ligne de commande, car je ne l'ai jamais vue auparavant: /