不使用密码执行sudo?

Bha*_*wan 396 command-line root sudo password

受到这个问题的启发......

我是唯一一个在 12.04 上使用我的系统的人。
每次我发出sudo命令;系统要求输入用户密码(这有其自身的好处)。
然而我在想;无需激活root账户;如何执行不会要求用户密码进行身份验证的 sudo 命令。

注意:我想在不通过密码进行身份验证的情况下执行 sudo 命令;只有当它们通过终端执行时。
我不想从其他功能中删除这一额外的安全层,例如在使用“Ubuntu 软件中心”或通过将 something.sh 文件拖放到终端来执行 bash 脚本时。

Oct*_*ves 712

您可以配置sudo为从不询问您的密码。

打开终端窗口并输入:

sudo visudo
Run Code Online (Sandbox Code Playgroud)

在文件底部,添加以下行:

$USER ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

$USER您系统上的用户名在哪里。保存并关闭 sudoers 文件(如果您没有更改默认的终端编辑器(如果您更改了,您会知道),按Ctl + x退出nano,它会提示您保存)。

从 Ubuntu 19.04 开始,文件现在应该看起来像

sudo visudo
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以sudo <whatever you want>在终端窗口中键入而不会提示您输入密码。

这仅适用sudo于在终端中使用命令。如果您(例如)尝试从软件中心安装软件包,系统仍会提示您输入密码

gui密码提示

  • 建议使用 `sudo visudo` 而不是直接编辑。此外,更改 sudoers 的权限可能会将您自己锁定。使用 `vim` 编辑时,使用 `:wq!` 写入只读文件并退出编辑器。这样,权限 644 就不是必需的。 (19认同)
  • @BrunoPereira 如果您打算运行不受信任的脚本,那么*那* 就是安全风险(即使 sudo 要求输入密码,恶意脚本也总是可以执行 `rm -rf ~` 来搞砸很多事情)。总的来说,我不会将“严重的安全风险”称为从 sudo 中简单地删除密码提示。 (17认同)
  • 这是一个严重的安全风险,任何使用 sudo 权限接管任何帐户的人都可以控制整个系统并锁定对这台计算机的任何进一步访问,严重不推荐。 (12认同)
  • @wil93 您没有抓住重点:在这种情况下,调用 `sudo install crapware` 的脚本不会要求输入密码,并且可能会弄乱您拥有的所有内容,而且您不需要亲自靠近机器来分发脚本我上次检查... 这只是一个例子。 (8认同)
  • 同意@wil93。在运行不受信任的脚本时,输入密码只不过是取消进程的机会,而我怀疑这对大多数人来说没有用。关键是你知道脚本的来源和作用。 (7认同)
  • 值得一提的是,`username ALL=(ALL) NOPASSWD: ALL` 必须放在**之后** `%sudo ALL=(ALL) NOPASSWD: ALL`。否则如果用户是 sudo 组的成员,就会发生一些奇怪的事情。 (4认同)
  • 作为对安全风险的回应,我会说这将取决于情况。如果您在日常工作中使用的真实操作系统上打开 sudo,那么您肯定会面临漏洞和攻击的世界。另一方面,如果您打算对 Virtualbox 中的某些内容执行此操作,该内容具有在每个会话结束时恢复到的设置状态,并且您是唯一使用它的人,那么一定要这样做。 (3认同)
  • @wil93 定义“不受信任”...在运行之前,您是否阅读了下载的每个脚本?不,那会很麻烦。此外,我说这只是许多情况下的一个例子。 (2认同)
  • @BrunoPereira 我并不总是需要运行从互联网下载的脚本,但当我这样做时,我会阅读它们:)。另外,我说我认为这是“风险”,但不是“严重的安全风险”。 (2认同)
  • 回复:第一条评论:要测试对 sudoers 文件的更改(不会无意中将自己锁定),请使用单独的 shell/登录并在编辑器仍处于打开状态时测试 `sudo` 命令;或者,在编辑时(通过 `sudo visudo`),保存(但不要退出)sudoers 文件(vim 中的 `:w`),输入 `ctrl-z` 暂停编辑器,尝试使用 `sudo ls`,如果一切都按预期工作,然后使用 `fg` 返回编辑器。 (2认同)
  • 是否可以仅针对特定命令执行此操作?喜欢 (2认同)

Bru*_*ira 92

sudo -i 如果您不想在系统(或其他系统)中进行修改时每 10 分钟输入一次密码,并且您不想修改任何系统文件,那么这是一种可行的方法。

它会使用您的sudo用户密码将您切换到 root ,当您关闭控制台或键入时,exit您将返回到您的普通用户。

  • 这并不能真正回答问题,因为此时您仍然需要输入密码才能成为 root。 (3认同)
  • 我只输入一次密码,直到我不退出,这是否成立?天气 5 小时。或 15.... 发出任何 sudo 命令时,系统不会要求通过密码进行身份验证。 (2认同)
  • @Z9iT 直到您键入 `exit` 或直到您关闭终端模拟器窗口。 (2认同)
  • 谢谢.. 接受这个答案,因为它的目的是在 n 小时内发出 sudo 命令而无需密码身份验证,直到我们不会退出为止。不修改系统文件是一个加分项。 (2认同)
  • 如果您在安全环境中运行虚拟机,并且您只想立即执行某些操作并且不想处理密码,则不会。这个答案并没有回答这个问题,虽然它可以说是有用的信息。我同意亚当 F (2认同)

use*_*671 48

授予个人(或组)权限的首选方法是在 /etc/sudoers.d

这将本地更改与默认策略分开,并在分发 sudoers 文件更改时节省时间。

要使当前登录的用户成为 sudoer 并且sudo不提示他们输入密码,请使用

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为/etc/sudoers.d/$USER(其中$USER是您运行该命令时登录的用户的用户名)的文件,明确哪些用户被授予权限。

如果你想为不同的用户这样做,只需$USER在上面的命令中用其他用户名替换两个实例。

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser
Run Code Online (Sandbox Code Playgroud)

同样,一个文件可用于管理多个指令:

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local
Run Code Online (Sandbox Code Playgroud)

查看/etc/sudoers.d/READMEman sudoers了解更多信息。

  • 正确的方法是使用`tee` 命令。 (2认同)
  • 这是一种更好的工作方式:`sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" &gt; /etc/sudoers.d/$(logname)'`,然后是 `sudo chmod 440 /etc/sudoers.d/$(logname)` (2认同)
  • tee 方法,无权限问题: `echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/用户名` (2认同)

小智 46

根 sudo 超时是执行此操作的最简单和最安全的方法。我将列出所有示例,但请注意,您这样做的任何方式都非常危险,尽管这种方式更安全:

sudo visudo
Run Code Online (Sandbox Code Playgroud)

这将打开一个编辑器并将其指向 sudoers 文件——Ubuntu 默认为 nano,其他系统使用 Vi。您现在是编辑系统上最重要文件之一的超级用户。无压力!

(使用(vi!)标注的 Vi 特定说明。如果您使用的是 nano,请忽略这些说明。)

使用箭头键移动到Defaults行尾。

(vi!)按 A(大写“a”)键移动到当前行的末尾并进入编辑模式(附加在行的最后一个字符之后)。

现在输入:

,timestamp_timeout=X
Run Code Online (Sandbox Code Playgroud)

其中 X 是以分钟为单位的超时到期时间。如果您指定 0,您将始终被要求输入密码。如果指定负值,则超时将永不过期。例如Defaults env_reset,timestamp_timeout=5

(vi!) 按Escape 返回命令模式。现在,如果您对编辑感到满意,请输入:w Enter以写入文件并:q Enter退出 vi。如果你犯了一个错误,也许最简单的方法是从头开始重做,不保存退出(点击Escape进入命令模式),然后输入 :q! Enter.

点击Ctrl+ X,然后Y,然后Enter保存您的文件并退出 nano。

您可能需要阅读 sudoers 和 vi 手册页以获取更多信息。

man sudoers
man vi
Run Code Online (Sandbox Code Playgroud)

使用以下方法重置超时值:

sudo -k
Run Code Online (Sandbox Code Playgroud)

这些说明是为了在使用 sudo 命令时删除输入密码的提示。sudo 命令仍然需要用于 root 访问。

编辑 sudoers 文件

打开终端窗口。输入sudo visudo. 将以下行添加到文件的 END(如果不是在最后,它可以被后面的条目取消):

<username> ALL=NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

替换<username>为您的用户名(不带<>)。这是假设 Ubuntu 已经创建了一个与您的用户名同名的组,这是典型的。您可以交替使用组用户或您所在的任何其他此类组。只需确保您在该组中。这可以通过转到系统 -> 管理 -> 用户和组来检查。

例子:

michael ALL=NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

输入 ^X ( Ctrl+ X) 退出。这应该会提示选择保存文件,输入 Y 进行保存。

注销,然后重新登录。现在应该允许您运行 sudo 命令而不会提示您输入密码。

根帐户

启用根帐户

很少需要启用 root 帐户。作为 Ubuntu 系统的管理员,您需要做的几乎所有事情都可以通过 sudo 或 gksudo 完成。如果您确实需要持久的 root 登录,最好的替代方法是使用以下命令模拟 Root 登录 shell:

sudo -i
Run Code Online (Sandbox Code Playgroud)

但是,如果您必须启用 root 登录,您可以这样做:

sudo passwd root
Run Code Online (Sandbox Code Playgroud)

重新禁用您的根帐户

如果由于某种原因您启用了 root 帐户并希望再次禁用它,请在终端中使用以下命令:

sudo passwd -dl root
Run Code Online (Sandbox Code Playgroud)

全系统组 sudo

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
Run Code Online (Sandbox Code Playgroud)

注销,然后重新登录。

重置 sudo 超时

您可以通过运行以下命令确保 sudo 下次要求输入密码:

sudo -k
Run Code Online (Sandbox Code Playgroud)


Joh*_*ber 8

当然不推荐你想做的事情。一段时间后,虽然进入sudo变得如此自动化,以至于它的用处减少了。

另一种方法是保留您的 sudoers 文件原样,并在对数百台服务器做一些复杂的事情时,输入sudo bash. 这将为您提供一个 shell,在您退出它之前,它将以 root 身份进行身份验证。

  • `sudo -s` 或 `sudo -i` 可能都是比 `sudo bash` 更好的想法,因为它们确保环境是健全的。 (12认同)
  • “理智和事物”通常不在“更好的想法”领域,有人可以就为什么 sudo -s 或 sudo -i 比 sudo bash 更好给出技术解释吗?(编辑:这是一个相关问题 http://askubuntu.com/questions/376199/sudo-su-vs-sudo-i-vs-sudo-bin-bash-when-does-it-matter-which-is-用过的 ) (3认同)
  • 许多 `sudo` 命令(特别是考虑 `sudo pip ...`)需要 `sudo -H`(设置 HOME)才能使命令正常运行。在其他情况下,可能需要`sudo -E`(保留环境)。运行 `sudo bash` 可能在大多数情况下都有效,但不是在所有情况下都有效,如果无效,则不清楚原因。 (2认同)

小智 7

不错的单行删除当前用户的 sudo 提示

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'
Run Code Online (Sandbox Code Playgroud)

  • 我想你可以这样做:`echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudo`,毕竟只有`visudo` 需要`sudo`(在默认配置IIRC 中甚至不需要`env`)。 (2认同)

par*_*oid 7

这是一种单行解决方案,它也更改文件权限,如中所述/etc/sudoers.d/README

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' && sudo chmod 440 /etc/sudoers.d/$(logname)
Run Code Online (Sandbox Code Playgroud)


Win*_*nix 5

来自超级用户的回答很好:

使用 -S 开关从 STDIN 读取密码:

echo <password> | sudo -S <command>
Run Code Online (Sandbox Code Playgroud)

替换<password>为您的密码。

  • 不建议这样做,因为密码在 shell 历史文件中保留为 cleartype。改用任何其他解决方案。 (7认同)
  • `HISTCONTROL` 变量需要包含 `ignorespace` 以在前缀为“”时不被保存。这似乎是 Ubuntu 上的默认设置,但可以更改......密码仍然可以显示在 `ps` 输出中...... sudoers 中的 NOPASSWD(理想情况下仅限于某些命令)似乎更安全...... (5认同)
  • @HappyCactus 你能在 `echo` 前面放一个空格,让它不出现在历史中吗? (2认同)
  • 是的,这将避免将明文密码暴露给历史文件。但是你总是记得添加它吗?:-) (2认同)
  • @HappyCactus 我倾向于不小心添加前导空间,然后在无法回忆历史时感到恼火:) 无论如何,超级用户有 129 个赞成票,所以我认为离开这里是一个很好的答案。人们会阅读我们的评论并了解风险和风险规避步骤。 (2认同)

小智 5

一个班轮

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'


归档时间:

查看次数:

747496 次

最近记录:

4 年,2 月 前