终端启动时出现 2 条 sudo 消息

终端启动时出现 2 条 sudo 消息

在打开新的 xterminal 或在已经运行的 bash 中启动 bash 时,我收到两次令人惊讶的错误消息:

t201:~ > bash
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

由于我没有使用 sudo 调用 bash,所以我问自己,这可能是从哪里来的。

第一个怀疑的对象当然是 ~/.bashrc,我经常在那里添加小功能,但grep su ~/.bashrc只显示包含“su”的单词,例如 success 和 support,它们都在注释中。

因此我使用 bash -v 以详细方式调用 bash。

这向我展示了很多命令,直接或间接地从 .bashrc 触发,并且在行间如下:

# sudo hint
if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then
    case " $(groups) " in *\ admin\ *|*\ sudo\ *)
    if [ -x /usr/bin/sudo ]; then
    cat <<-EOF
    To run a command as administrator (user "root"), use "sudo <command>".
    See "man sudo_root" for details.

    EOF
    fi
    esac
fi
groups
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

除了 fi 之后的 3 行,它位于 /etc/bash.bashrc 中

好的。这是在寻找一个魔法文件 .sudo_as_admin_successful 。我记得一个命令

 find -empty -delete 

几个小时前发布,但在主目录中,不是应该发布的位置,而是空文件 - 谁在乎?

嗯,现在我在乎了。

我创建了一个新的:

t201:~ > touch .sudo_as_admin_successful 
t201:~ > bash
t201:~ > 

错误消失了。我需要对该文件有特殊权限吗?.hushlogin 是什么?我也没有这个。

答案1

~/.sudo_as_admin_successful是一个“标志文件”的示例,其中存在文件的格式很重要,内容则不重要。您会在脚本片段中注意到:

  • 如果~/.sudo_as_admin_successful存在,(实际上,“不存在”为假)则整个内容被跳过。
  • ~/.hushlogin是另一个“标志文件”,它的存在要求登录脚本格外安静。它是早期遗留下来的,但当用户设置时,会发出请求。
  • 然后,使用groups命令列出$USER的组(尝试一下 - 输入groups),检查是否是或组$USER的成员。adminsudo
  • 最后,检查可执行文件/usr/bin/sudo
  • 然后,如果这一切都是真的,则发出提示。

~/.sudo_as_admin_successful/usr/bin/sudo当您成功切换到UID 0时,设置如下。验证sudo strings /usr/bin/sudo | grep ".sudo_as_admin_successful":)。

现代系统管理实践会将文件放在其他地方,但该文件已经过时(但并非过时),并且是在 Canonical/Ubuntu 之外开发的。移动.sudo有利有弊,可用于各种 Linux 和 Unix 系统。它必须与所有系统兼容,因此是最简单的选择。~/.sudo_as_admin_successfulsudo~/.sudo_as_admin_successful

相关内容