从暂停唤醒后,如何强制sudo始终要求输入密码?


15

假设我使用来执行命令sudo,然后如果我sudo在接下来的15/5分钟内使用(不确定它能记住我多长时间),它将不会提示我输入密码。如果我至少使用了这么长时间,它只会再次提示我。

但是,如果我在该时间段结束之前挂起计算机,将其唤醒并登录,则可以sudo再次执行命令,并且不会要求我输入密码,因为我没有允许一定数量的密码时间。

因此,我该如何做,以便不管我用sudo了多长时间,即使我仍然在该时间范围内,一旦再次登录,它肯定会在挂起后提示我输入密码。 15/5分钟的不使用时间sudo还没过去?

最有可能起作用的是让它执行命令以删除所有标识高速缓存,以便sudo在唤醒时执行某个命令时执行该命令。

我正在使用GNOME 3.18运行Ubuntu GNOME 15.10。


1
好问题,但是为什么你偏执?因为如果您以外的人知道您的登录密码无法停止使用sudo
Edward Torvalds

如果您只是退出该终端窗口,则无论您以多快的速度打开新的终端窗口,都需要重新输入密码。如果要在终端窗口中运行某些内容,请附加`;; 退出`,命令完成后窗口将关闭。
2016年

@Marc:我知道,但是退出或sudo下次手动询问都不总是很方便。首选自动解决方案。

@edwardtorvalds:好吧,我可以再次登录,然后离开(不是我经常这样做),然后当有人来时,如果他们只能使用,那就不好了sudo。我知道这对于我自己的计算机来说听起来有点奇怪,但是我本可以在另一台Ubuntu计算机上进行一些维护工作,然后当我再次登录用户时,关闭终端可能很不方便,但我没有希望他们有sudo权利。

1
附加`; 退出(七个击键)对我来说似乎很容易。您不应该进行哪种维护,因为我想不出太多,所以我没有机会暂停其中的维护。
Marc'1

Answers:


19

来自man sudo

     -K, --remove-timestamp
                 Similar to the -k option, except that it removes the user's
                 cached credentials entirely and may not be used in conjunc‐
                 tion with a command or other option.  This option does not
                 require a password.  Not all security policies support cre‐
                 dential caching.

因此,您想要的是您的用户sudo -K在系统每次挂起时运行。

Ubuntu 15.04+(systemd)

这可以在Ubuntu 15.04+上通过将脚本放在中来完成/lib/systemd/system-sleep/

  1. 运行sudo nano /lib/systemd/system-sleep/disable_sudo_useruser为方便起见,用用户名替换);
  2. 粘贴以下脚本(替换user为用户的用户名):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. 命中CTRL+ OENTERCTRL+ X;

  2. 奔跑sudo chmod o+x /lib/systemd/system-sleep/disable_sudo_user;


要同时为休眠/混合睡眠启用此功能,请改用以下脚本:

#!/bin/sh
case $1 in
    pre)
        su user -c 'sudo -K'
        ;;
esac

先前的Ubuntu版本(Upstart)

可以在Ubuntu以前的版本中通过在中放置脚本来完成此操作/etc/pm/sleep.d/

  1. 运行sudo nano /etc/pm/sleep.d/disable_sudo_useruser为方便起见,用用户名替换);
  2. 粘贴以下脚本(替换user为用户的用户名):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. 命中CTRL+ OENTERCTRL+ X;

  2. 奔跑sudo chmod o+x /etc/pm/sleep.d/disable_sudo_user;


要同时启用此功能以使其处于休眠状态,请改用以下脚本:

#!/bin/sh
case $1 in
    suspend|hybernate)
        su user -c 'sudo -K'
        ;;
esac

2
如果您使用过,那会更有趣sudo -u user sudo -k。:D
大师

@muru想法相同,但由于某种原因看起来有点愚蠢:D
kos

抱歉,已经有一段时间没有编写任何Shell代码了,这到底是pre/*)做什么的?:)

@ParanoidPanda它消失了,请参阅更新。参见此处(描述,第二段):通过传递两个参数来systemd-suspend.service调用脚本/lib/systemd/system-sleep/$1它要么pre预睡眠事件或post为睡醒后的活动,并且$2它要么suspendhybernatehybrid-sleep; pre/*是为了赶上的所有组合pre/和任意的suspendhybernate或者hybrid-sleep,但既然你明确要求暂停我改成了pre/suspend
kos

1
值得一提的是,您也可以在较旧的ubuntu中执行此操作,只是机制有所不同,即使用/etc/pm/sleep.d脚本。
霍布斯

3

只有当你那样偏执!您可以使用的-K选项sudo

-K, --reset-timestamp
       When used without a command, invalidates the user's cached credentials.  
       In other words, the next time sudo is run a password will be required.  
       This option does not require a password and was added to allow a user to revoke
       sudo permissions from a .logout file.

       When used in conjunction with a command or an option that may require a 
       password, this option will cause sudo to ignore the user's cached credentials.  
       As a result, sudo will prompt for a password (if one is required by the 
       security policy) and will not update the user's cached credentials.

       Not all security policies support credential caching.

例如,

sudo -K <command>

或者,您也可以将计算机放在由机器人保护的金属盒中:)


嗯...不完全是我想要的,没有办法自动化吗?因为这表明我绝对知道我将要挂起,如果命令正在运行sudo并且需要移至某处,那么我将挂起计算机,然后当我返回并取消挂起计算机时,我将不得不等待命令或完成该命令之前需要等待的时间,下次我再次询问密码?出于多种原因(包括当我在不同的运行级别上使用GUI运行它时,它在挂起后不要求输入密码的情况下)使其自动化将更加有用。

另外,我认为您的意思-K不是-k

好吧,无论如何它可能会更有用。

1

另一种方法

输入“ sudo visudo”

转到显示“ Defaults env_reset”的行

并更改为:

'默认env_reset,timestamp_timeout = 0

然后保存文件。

通过将超时设置为0,系统每次都会提示您输入密码。


尽管这确实(从技术上来说)完成了OP所要求的功能,但在大多数情况下这是过分的。就是说,如果您真的很偏执(或者每次做潜在危险的事情时只想多花一些时间进行停顿和沉思),这可能是一个可行的选择。
CVn
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.