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


10

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

不可能有剩余时间,对吗?

另外,如何查看我在该特定终端上仍拥有多少特权?(所以我可以让它结束而不是键入sudo -k)。我认为每次按Enter键都会显示剩余时间。

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

PS .:另外,我尝试过,alias sudo='sudo -k'但是我不喜欢为每个命令都键入密码...而且,如果您这样做,也可以alias sudos='sudo -k'(或者alias ssudo='sudo -k',如果您输入的是长行,只需按Home键并输入's')只想通过键入发出一个命令sudos。但是我仍然想知道我何时拥有正常的sudo权限才能知道自己需要采取行动...


2
为什么投票失败?尽管这不是最清晰的帖子,但标题问题对我来说似乎仍然是一个有效的问题(在那是一个非常有用的问题)
DaimyoKirby 2013年

你能说什么可以澄清吗?我未经编辑的初始帖子大了3倍,为了使内容更加简洁,我对其进行了大量清除:)
Aquarius Power

我认为这已经很晚了-我已经重新阅读了,这更有意义。
DaimyoKirby,2013年

Answers:


5

[我仍然想知道是否有更好的answear。]

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

在您的末尾~/.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


4

您的终端没有“具有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策略缓存凭据15分钟,除非在sudoers中(5)覆盖”。这意味着默认情况下,如果您发出sudo命令(并输入密码),然后等待14.9分钟再发出第二条sudo命令,则无需再次输入密码。如果您等待15.1分钟,则必须重新输入密码。sudo -k只需立即终止15分钟计时器即可。我能看到的唯一用途sudo -k是,如果您要把解锁的终端机交给不信任的人UID 0


您说“不要sudo在命令前键入”。但是,如果我想检查防火墙规则,iptables -L除非输入,否则它将无法正常工作sudo iptables -L。我的观点是,如何才能真正避免使用sudo?
Aquarius Power

另外,关于剩余时间,我想知道每次按终端上的Enter键还剩下多少时间。关于sudo -k,我担心破解者试图远程访问我的计算机(我真的不知道他们是否仍然可以执行此操作...),或者万一我将我的计算机打开而又没有将其锁定片刻……那么,真正的重点是:我想这样做!我不在乎sudo -k以后需要多次输入密码,我以这种方式感觉很好!:)
水瓶座力量

“避免使用sudo”?Sudo是分发root密码,设置二进制setuid或使用的解决方案/bin/su。您确定要丢弃它吗?我想“远程访问我的机器...”,然后接管/proc/YourPID/fd/{0,1,2}。否。如果可以远程访问您的计算机,则Bad Guy拥有更简便的方法来将UID设置为0。您应该在关注此级别之前增加Linux-foo。
waltinator

很抱歉的言论,听起来像你应该alias k=/usr/bin/sudo -k,更换sudo用别名或bash函数封装了调用命令/usr/bin/sudo/usr/bin/touch $HOME/tmp/$$/sudotime,最后,添加一些打印$ {{时间(现在) -时间($ HOME / tmp目录/ $ $ / sudotime)))在您的Bash提示中。这并非微不足道,但是如果它会让您感觉良好,那就去做吧。
waltinator 2013年

很有意思,我还会记录尝试发生的时间,甚至更好的是,关闭任何网络通信,太好了!但即使我隐藏sudo有一个别名,以任何随机的话,他们仍然可以键入/usr/bin/sudo,而不是sudo和它仍然会工作作为须藤确实:(。反正我喜欢这个主意。我不知道如果我改变了真正的/usr/bin/sudo会打破比其他东西我所有的脚本,使用它..即使我这样做,他们可以通过读剧本,你猜怎么着须藤成为..
水瓶座电力
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.