3 回答
TA贡献1848条经验 获得超2个赞
如何使用autoexpect将密码传递到命令中:
这些步骤在Ubuntu 12.10桌面上进行了说明。您分发的确切命令可能略有不同。
这很危险,因为您可能会将使用的任何密码暴露给可以读取autoexpect脚本文件的任何人。
请勿通过这样的方式通过管道传递您的root密码或超级用户密码。根工具包将立即发现此问题,您的盒子将归拥有。
EXPECT产生一个进程,读取输入的文本,然后发送脚本文件中预定义的文本。
请确保您有expect与autoexpect安装:
sudo apt-get install expect
sudo apt-get install expect-dev
阅读它:
man expect
man autoexpect
转到您的主目录:
cd /home/el
用户el无法将文件授予root用户,必须输入密码:
touch testfile.txt
sudo chown root:root testfile.txt
[enter password to authorize the changing of the owner]
这是我们要自动执行的密码输入。重新启动终端,以确保sudo再次要求我们提供密码。再次转到/ home / el并执行以下操作:
touch myfile.txt
autoexpect -f my_test_expect.exp sudo chown root:root myfile.txt
[enter password which authorizes the chown to root]
autoexpect done, file is my_test_expect.exp
您已创建my_test_expect.exp文件。您的超级秘密密码以纯文本格式存储在此文件中。这会让您非常不舒服。通过尽可能地限制权限和所有权来减轻不适感:
sudo chown el my_test_expect.exp //make el the owner.
sudo chmod 700 my_test_expect.exp //make file only readable by el.
您会在以下内容的底部看到这些命令my_test_expect.exp:
set timeout -1
spawn sudo chown root:root myfile.txt
match_max 100000
expect -exact "\[sudo\] password for el: "
send -- "YourPasswordStoredInPlaintext\r"
expect eof
您将需要验证上述期望命令是否合适。如果autoexpect脚本过于敏感或不够敏感,则它将挂起。在这种情况下,这是可以接受的,因为期望值正在等待始终到达的文本。
以el用户身份运行expect脚本:
expect my_test_expect.exp
spawn sudo chown root:root myfile.txt
[sudo] password for el:
my_test_expect.exp中包含的密码由用户el通过管道传递给root用户。要查看密码是否被接受,请查看myfile.txt:
ls -l
-rw-r--r-- 1 root root 0 Dec 2 14:48 myfile.txt
之所以有效,是因为它是root用户,并且el从未输入密码。如果使用此脚本公开您的root,sudo或超级用户密码,那么在您的机器上获取root将会很容易。这是对安全系统的惩罚,这种安全系统可以使每个人都没有问题。
TA贡献1846条经验 获得超7个赞
您可以使用该-S标志从标准输入中读取。在下面找到一个示例:
function shutd()
{
echo "mySuperSecurePassword" | sudo -S shutdown -h now
}
- 3 回答
- 0 关注
- 1253 浏览
添加回答
举报