我知道存在安全风险,但我正在家里放置的一台很少使用的旧 *nix 机器上执行此实验/练习。所以做这个练习不会给我的机器带来任何安全风险。话虽如此,请不要发表任何有关安全的评论。
我也知道我可以更改sudoers
以禁用密码提示,但我对此不感兴趣。
我找到了一个命令:
echo "password" | sudo -S su
但效果很奇怪。我输入它,域名保持不变;我不会变成root。我还缺少其他东西还是有更好的方法来做到这一点?
我做过的事情:
\n
在密码末尾添加了一个:密码验证不正确。- 省略
su
: 打印出如何sudo
正确使用的用法
答案1
这很奇怪,但这对我有用:
% echo -e "password\n" | sudo -S su
<myusername>'s password:HOSTNAME: Undefined variable.
% sudo -S su
因此,在第一步中,密码被传递到sudo
(使用-e
标志来回显,因此这\n
实际上是一个换行符),并且在第二次运行中,身份验证将在不提示输入任何密码的情况下进行。
(第二行的返回可能是由于系统设置不当......)
编辑:在该 xterm 会话中,我可以sudo -S <command>
根据需要多次调用...这可能是因为我在 sudo 密码只需输入一次的时间限制内。
答案2
我用了以下
echo password | sudo -S su - user_to_switch_to
然后运行
sudo -S su - user_to_switch_to
切换到您想要的用户,无需手动输入密码。
(注意用您的密码和用户替换密码和 user_to_switch_to )
答案3
我有一种挥之不去的感觉,你正在尝试在执行 I/O 重定向时运行 su (和朋友)的交互式 shell。我认为这不会起作用,echo passwd|
即会在密码后给你一个 eof (文件结尾)。我认为您将需要诸如 Expect 或拨号脚本实用程序之类的东西。 Expect 有一个传递模式,可以在脚本末尾调用。如果您的命令不像 xterm 那样是交互式的(尽管完全交互式,但不需要标准输入),则不需要这样做。还要注意从标准错误中读取的一些密码,这至少可以说使事情变得有趣。(他们这样做是为了我/o 重定向不太可能干扰您的密码提示)