comment être averti si le terminal a des privilèges sudo et montrer aussi combien de temps il reste?

10

Comment voir dans le terminal que vous avez des privilèges sudo? (sachant que j'ai ces privilèges, je peux simplement taper sudo -k) Il serait préférable de ne pas ajouter trop d'informations dans le terminal également, juste une sorte d'alerte simple et petite!

LE TEMPS RESTANT EST IMPOSSIBLE, non?

Aussi, comment voir combien de temps il me reste avec ces privilèges sur ce terminal spécifique? (donc je peux juste le laisser finir au lieu de taper sudo -k). Je pense que le temps restant pourrait apparaître chaque fois que j'appuie sur la touche Entrée.

EDIT: J'ai fait plus de recherches et j'ai découvert que /var/lib/sudo/$USER/$nPts(où $ nPts est le terminal actuel en date du ps -p $$) a son horodatage mis à jour chaque fois qu'une commande sudo est émise, et il n'est accessible que si vous utilisez une commande sudo, donc le temps restant sera toujours le configuré un ...

PS: Alternativement à cela, j'ai essayé alias sudo='sudo -k'mais je n'aime pas devoir taper le mot de passe pour chaque commande ... Et aussi, cela alias sudos='sudo -k'(ou alias ssudo='sudo -k', bon si vous avez tapé une longue ligne, appuyez simplement sur Accueil et tapez 's') fonctionne si vous ne souhaitez émettre qu'une seule commande en tapant sudos. Mais je manque encore de savoir quand j'ai les privilèges sudo normaux pour savoir que je dois agir ...

Puissance du Verseau
la source
2
Pourquoi cette décision a-t-elle été rejetée? Bien que ce ne soit pas le message le plus clair, la question du titre me semble toujours être une question valide (et une question assez utile, à ce sujet)
DaimyoKirby
pourriez-vous dire ce qui pourrait être clarifié? mon post initial non édité était 3 fois plus gros et je l'ai beaucoup effacé pour le rendre plus concis :)
Aquarius Power
Je pense qu'il était juste tard - je l'ai relu, et c'est plus logique.
DaimyoKirby

Réponses:

5

[Je voudrais toujours savoir s'il y a une meilleure réponse.]

J'ai trouvé un moyen qui fonctionne et l'invite sera conservée sur une seule ligne:

à la fin de votre ~/.bashrcajouter ceci:

function FUNCsudoOn() { 
    if sudo -n uptime 2>/dev/null 1>/dev/null; then 
        echo -ne "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"; 
        #echo #without newline, the terminal seems to bugout with lines that are too big... discomment this if you find any problems...
    fi; 
}
function FUNCpromptCommand () { 
    FUNCsudoOn
}
export PROMPT_COMMAND=FUNCpromptCommand
#export PS1="\`FUNCsudoOn\`$PS1" #this also works, use instead of PROMPT_COMMAND

EDIT: J'ai trouvé que cela sudo -n uptimemettra à jour le délai d'attente sudo, donc à chaque fois que vous appuyez sur la touche Entrée, ce temps sudo sera mis à jour ... Cela rend inutile la connaissance du temps restant, car ce sera toujours celui configuré, par défaut à 15 minutes. .

et pour trouver la meilleure mise en forme des couleurs à votre goût, vous pouvez utiliser ScriptEchoColor avec une --escapedcharsoption comme:

echoc --escapedchars "@{nRlyo} SUDO " #that outputs below...
echo -e "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"

pour arrêter simplement le clignotement supprimer \E[5mcomme dans\E[0m\E[93m\E[41m\E[1m SUDO \E[0m

Puissance du Verseau
la source
4

Votre terminal n'a pas "de privilèges sudo", sauf si vous faites quelque chose de stupide comme sudo bash NE FAITES PAS CECI!

Tout ce que vous avez à faire pour "avoir les privilèges sudo normaux" est de ne pas taper sudodevant la commande.

/usr/bin/idest un bon moyen de voir ce qui se sudopasse. Par exemple:

id -a        # returns my UID info
sudo id -a   # returns root's info
id -a        # me again
sudo id -a   # root again

La sudopage de manuel indique "La stratégie sudoers met en cache les informations d'identification pendant 15 minutes, sauf si elle est remplacée dans sudoers (5)". Cela signifie que, par défaut, si vous émettez une sudocommande (et entrez votre mot de passe), puis attendez 14,9 minutes avant d'émettre une deuxième sudocommande, vous n'aurez pas à saisir à nouveau votre mot de passe. Si vous attendez 15,1 minutes, vous devrez ressaisir le mot de passe. sudo -kexpire simplement la minuterie de 15 minutes immédiatement. La seule utilisation que je peux voir sudo -kest si vous êtes sur le point de céder votre terminal déverrouillé à quelqu'un en qui vous n'avez pas confiance UID 0.

waltinator
la source
Vous avez dit "abstenez-vous de taper sudodevant la commande". Mais si je veux vérifier mes règles de pare-feu, iptables -Lcela ne fonctionnera pas sauf si je tape sudo iptables -L. Mon point est, comment pouvons-nous réellement éviter d'utiliser sudo?
Aquarius Power
De plus, à propos du temps restant, je veux savoir combien de temps il me reste à chaque fois que j'appuie sur la touche Entrée du terminal. À propos sudo -k, je crains que des crackers essaient d'accéder à distance à ma machine (je ne sais pas vraiment s'ils peuvent le faire de toute façon ...), ou au cas où je laisserais ma machine ouverte sans la verrouiller pendant quelques instants ... eh bien, le vrai point est que: je veux le faire de cette façon! Je m'en fiche d'avoir à taper sudo -ket à nouveau mon mot de passe plus tard autant de fois que je le dois, je me sens bien quand je le fais de cette façon! :)
Aquarius Power
"Évitez d'utiliser sudo"? Sudo était la solution pour distribuer le mot de passe root, créer des binaires setuid ou utiliser /bin/su. Voulez-vous vraiment la supprimer? "Accéder à distance à ma machine ..." et, je suppose, prendre le relais /proc/YourPID/fd/{0,1,2}. Non. Si votre machine est accessible à distance, le Bad Guy a des moyens plus faciles d’utiliser l’ID utilisateur 0. Vous devez augmenter votre Linux-foo avant ce niveau de préoccupation.
waltinator
Désolé pour la diatribe, il semble que vous devriez alias k=/usr/bin/sudo -k, remplacez la sudocommande par une fonction alias ou bash qui encapsule l'appel /usr/bin/sudoavec /usr/bin/touch $HOME/tmp/$$/sudotime, et enfin, ajoutez quelque chose à imprimer $ {{time (now) - time ($ HOME / tmp / $ $ / sudotime))) dans votre invite Bash. Pas anodin, mais si cela vous fait du bien, allez-y.
waltinator
c'est intéressant, je me connecterais aussi quand la tentative a eu lieu, ou mieux encore, arrêter toute communication réseau, cool! mais même si je me cache sudoavec un alias pour n'importe quel mot aléatoire, ils pourraient toujours taper /usr/bin/sudoau lieu de sudoet cela fonctionnerait toujours comme le fait sudo :(. Quoi qu'il en soit, j'aime l'idée .. Je me demande si je change le réel, /usr/bin/sudocela cassera autre chose que tous mes scripts qui l'utilisent .. même si je le fais, ils pourraient, en lisant les scripts, deviner ce qu'est devenu sudo ..
Aquarius Power