在打开新的 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
的成员。admin
sudo
- 最后,检查可执行文件
/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_successful
sudo
~/.sudo_as_admin_successful