如何使超级用户权限比使用sudo更长久?


25

有没有一种方法可以使该sudo命令授予我的权限比其默认时间更长的时间?

sudo当需要安装许多软件包时,必须不断输入密码可能很麻烦,因此,如果存在可以影响其使用期限的命令或配置,那将是很好的选择。


3
那么,没有人再使用su了?曾经吗
李斯特先生,2015年

9
@MrLister sudo -i,你有一个根壳,准备好让任何人在尽可能长的时间里帮助自己在脚上
射击

1
@DevRobot,您有相关资源吗?我很难相信Canonical会删除如此重要的命令,而我在Google上找不到任何有关它的信息。
DJMcMayhem 2015年

9
@DevRobot su需要root才能具有密码。默认情况下,Ubuntu的root用户没有密码。因此,您无法su扎根。su在这里按预期工作。请尝试使用任何具有密码的用户。
muru 2015年

3
@muru sudo su工作得很好,尽管有点重复。
coteyr

Answers:


27

的行为sudo已在/etc/sudoers文件中配置。有一个timestamp_timeout选项负责在特定时间后重新提示用户输入密码。

来自man sudoers

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.

要更改该设置,请执行以下操作:

  1. 在终端运行sudo visudovisudo用于专门编辑/etc/sudoers文件,默认情况下使用nano文本编辑器。
  2. 找到以开头的行Defaults。添加以下行

    Defaults        timestamp_timeout=x
    

    其中x是两次提示之间您想要的分钟数

  3. Ctrl+ 保存文件O


12

来自man sudoers

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.  This
                       can be used to allow users to create or delete their
                       own time stamps via “sudo -v” and “sudo -k” respec‐
                       tively.

如您所见,默认超时sudo为15分钟。您可以在中更改此值/etc/sudoers

您不直接编辑/etc/sudoers,而是使用visudo它来进行编辑。

来自man visudo

     visudo edits the sudoers file in a safe fashion, analogous to vipw(8).
     visudo locks the sudoers file against multiple simultaneous edits, pro‐
     vides basic sanity checks, and checks for parse errors.  If the sudoers
     file is currently being edited you will receive a message to try again
     later.

因此,键入sudo visudo一个终端,它将/etc/sudoersnano文本编辑器中打开文件。

查找以下行:

Defaults    env_reset

并加入 其中X是你想在几分钟内设置时间。timestamp_timeout=X

因此,例如:

Defaults    env_reset,timestamp_timeout=5

如果指定0,将始终询问您密码。如果您指定一个负值,则超时将永远不会过期。

完成后,保存并退出。

请参阅RootSudoTimeout


击败我29秒=)
Sergiy Kolodyazhnyy 2015年

1
你很好-_- b我在笔记本电脑上。。。也许我需要更多咖啡
Sergiy Kolodyazhnyy 2015年

您也可以将-1设置为超时-如果您从不希望触发密码提示。
米哈尔Żywiecki

8

尝试这个 。

  1. 在终端中运行以下命令:

    sudo visudo
    
  2. 向下滚动到如下所示的行:

    Defaults        env_reset
    
  3. 更改为例如:

    Defaults        env_reset,timestamp_timeout=30
    

将30更改为您希望它在超时之前等待的时间(以分钟为单位)。如果您每次运行sudo都要求输入密码,也可以将其更改为0,或者如果不想输入密码,则可以将其更改为-1。按Ctrl+ X完成编辑,按Y保存更改,按Enter退出。

这是来源:http : //lifehacker.com/make-sudo-sessions-last-longer-in-linux-1221545774


5

您可以编辑/etc/sudoers文件(sudo visudo注意:),并添加如下一行

Defaults:myname timestamp_timeout=15 

myname您的用户ID 在哪里。超时值以分钟为单位。您可以使用值-1永不过期,然后键入sudo -k以终止身份验证,因此您需要再次输入密码。

或者,您可以添加条目以说一条特定命令根本不需要密码。


1
+1表示sudo -k手动使缓存的身份验证无效。
字节指挥官

5

我不敢相信最简单的命令:

sudo -s

这里没有提到。“ -s”开关为您提供了具有root权限的控制台,该控制台一直持续到您退出它为止。无需费心使用默认设置。


1
为什么这被否决?
coteyr

3
我没有投票,但是这挫败了使用的优势sudo:记录了每个命令(因此您可以看到所做的事情)。当您打开根shell时,您将丢失该日志记录。
guntbert

1
@guntbert当然会记录每个命令,但要记录在root用户的历史记录中。
奥利弗·弗里德里希

@BeowulfOF不一定-bash历史记录与系统日志完全不同。
guntbert

1
真的,@ guntbert,如果您使用这样的身份验证日志,则会遇到不同的问题。
奥利弗·弗里德里希

1

到目前为止,所有其他答案似乎都围绕着更改默认超时(必须使用再次键入密码)多长时间sudo。但是,如果您只想以root身份运行命令而无需在每个命令前添加sudo,则可以使用以下命令获取root shell:

sudo -i

要么

sudo bash

要么

sudo <your preferred shell here>

尽管所有这些操作都只是以root用户身份启动单个进程,但是正好有一个问题的单个外壳恰好是一个外壳程序,可以让您以root用户身份启动任意多个其他进程,而无需进一步输入sudo或输入密码。:)

当然,能力越大,责任就越大,不要做愚蠢的事情,等等。


1
对此请务必谨慎。实际上,您将运行根shell。
hmayag

4
为什么这被否决?
coteyr

@hmayag是的,如果您启动了根shell,则实际上将在运行根shell。因此,最后发出警告的原因。
reirab

@coteyr可能由于与BeoWulf的回答相同的原因。
guntbert

1

在看到修改了配置文件的用户提出了太多问题之后,他们对软件包升级后为什么更改被覆盖感到困惑后,我会注意到,如果要修改timestamp_timeout,最好在中创建文件/etc/sudoers.d而不是在其中创建文件/etc/sudoers直接修改。

所以你应该做

sudo visudo -f /etc/sudoers.d/timeout

(文件名可以是任意名称,只要它不包含句点(.)或以波浪号(~)结尾)。而不是打开的/etc/sudoers在你选择的编辑器,它会打开/etc/sudoers.d/timeout,通常一个空文件,因为它不存在。把你的

Defaults timestamp_timeout=X

并像往常一样保存。然后,如果发布了新版本/etc/sudoers,则无需选择安装新版本还是进行更改-您将自动拥有两者。


1

如果您正在寻找一种不会更改配置文件的解决方案,例如,当您希望令牌在特定会话中使用更长的时间,或者仅在执行明确操作后才应用令牌,则可以尝试以下操作:

# Work as is with Bash 4.1.2(1)-release and later, this might require some adaptation for other shells
(while [ true ]; do sudo -v; sleep $((60*4)); done)&

基本上,前面的代码通过后台启动的过程每4分钟刷新一次sudo令牌

实际上,根据sudo手册所述:“ sudoers安全策略的默认密码提示超时为5分钟”。因此,根据系统特定的策略,您可以调整循环在两个周期之间休眠的时间。

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.