如果终端具有 sudo 权限,如何发出警告并显示剩余时间?

如果终端具有 sudo 权限,如何发出警告并显示剩余时间?

如何在终端中看到您是否具有 sudo 权限?(所以知道我有这些权限,我只需输入sudo -k)最好不要在终端中添加太多信息,只是一些简单而小的警报!

剩下的时间是不可能的,对吗?

另外,如何查看我在特定终端上仍拥有这些权限的时间?(这样我就可以让其结束,而不是输入sudo -k)。我认为每次按下 Enter 键时都会显示剩余时间。

编辑:我进行了进一步研究并发现/var/lib/sudo/$USER/$nPts(其中 $nPts 是截至的当前终端点ps -p $$)每次发出 sudo 命令时其时间戳都会更新,并且只有在使用 sudo 命令时才可访问,因此剩余时间将始终是配置的时间...

附言:除此之外,我尝试过,alias sudo='sudo -k'但我不喜欢必须为每个命令输入密码...而且,如果您只想通过输入来发出一个命令,那么这个alias sudos='sudo -k'(或者alias ssudo='sudo -k',如果您输入了很长的一行,只需按 Home 并输入“s”)就可以了sudos。但我仍然不知道何时拥有正常的 sudo 权限,以便知道我需要采取行动...

答案1

[我还是想知道是否有更好的答案。]

我找到了一种可行的方法,并且提示将保留在一行上:

在末尾~/.bashrc添加以下内容:

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

编辑:我发现这sudo -n uptime将更新 sudo 超时,因此每次按下 Enter 键时,该 sudo 时间都会更新...这使得知道剩余时间变得毫无用处,因为它始终是配置的时间,默认为 15 分钟...

并找到最适合您口味的颜色格式,您可以使用ScriptEchoColor选项--escapedchars如下:

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

只需停止闪烁\E[5m即可删除\E[0m\E[93m\E[41m\E[1m SUDO \E[0m

答案2

你的终端没有“sudo 权限”,除非你做了一些愚蠢的事情,例如sudo bash 不要这样做!

要“拥有正常的 sudo 权限”,您所要做的就是避免sudo在命令前输入内容。

/usr/bin/id是查看sudo结果的好方法。例如:

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

手册sudo页上写着“除非在 sudoers(5) 中被覆盖,否则 sudoers 策略会将凭证缓存 15 分钟”。这意味着,默认情况下,如果您发出一个sudo命令(并输入密码),然后等待 14.9 分钟再发出第二个sudo命令,则无需再次输入密码。如果等待 15.1 分钟,则必须重新输入密码。sudo -k只需立即使 15 分钟计时器过期即可。我能看到的唯一用途sudo -k是,如果您即将把解锁的终端交给您不信任的人UID 0

相关内容