当我刚刚运行sudo
,并且不希望它在正常的超时时间内保持活动状态时,我该如何取消剩余的积极的暂停?
sudo -k
杀死当前终端会话中的进程,但是如果该会话中当前正在运行并且无法运行sudo -k
,有没有办法从另一个终端会话中取消它?
有没有办法取消所有当前应用的sudo
时间(针对所有终端会话,以及所有 gksudo 正在运行的应用程序等?
尽管仔细想一想,正在运行的 GUI 可能只需要关闭,但我只是检查了Alt+F2是否保持 gksu 在后续调用中处于活动状态。
答案1
不确定你是否要终止 sudo 超时,以便它不会超时,或者让它立即超时,但如果你想删除剩余的时间戳,你可以使用sudo -k
否则,如果您尝试取消超时以使 sudo 不会超时,我认为在当前会话中不可能做到这一点。我知道的唯一方法是更改文件timestamp_timeout
中的sudoers
并重新启动会话。
答案2
仅就你的观点之一:
但如果该会话中当前正在运行一个进程,则无法运行 sudo -k
这是命令行特有的,如果您想在其他进程运行时执行任何操作,您可以按Ctrl+Z暂停进程;然后您可以再次访问当前终端,做任何您想做的事情。完成后,您可以键入jobs
以获取进程列表,并在它们旁边显示数字。键入fg 1
(例如 -fg
如果只有一个作业,则只需键入)重新启动进程,将其提升到前台。同样,bg
执行相同的操作但让进程在后台运行。
示例会话
$ sudo apt-get install hello
<CTRL+Z>
[1]+ Stopped sudo apt-get install hello
$ sudo -k
$ jobs
[1]+ Stopped sudo apt-get install hello
$ fg 1
Loading database...
....
答案3
我找到了一个解决方案。因为我的搜索没有显示任何类似的东西,而且这是一个常见的问题:sudo 存储在文件系统的某个位置(例如在 /var/run/sudo 中),每个用户名一个目录,几个用作时间戳的文件,每个终端一个文件。删除这些文件,你的系统就会再次安全。请记住,这些文件只有 root 可见(否则入侵者可能会读取时间戳并将时钟时间设置回它们仍然有效的时间点——向任何人授予 root-ls 都是危险的)。因此在我的 /etc/pm/sleep/ 中,也许还有屏幕保护程序,我运行:
rm -f /var/db/sudo/*/*
当然是以 root 身份...
答案4
这无法做到。当子进程终止时,父 sudo 进程也会终止,终止父进程也会终止子进程。
也可以从外部终止它没有任何意义,因为你无法真正知道程序将在什么时候终止。程序流程将变得不可预测。