背景
我有一个很长的bash脚本,可以设置一个互联软件的大环境,需要几个小时才能完成。它执行的一些任务需要以root身份运行,我使用sudo ...
。然后暂停整个过程,直到用户注意到并输入root密码。我寻求某种方式让用户只在脚本开头输入root密码,然后在sudo
稍后需要时自动提供。
我对可能(糟糕)解决方案的看法
我可以将密码直接存储在变量中,然后使用
提供echo "${root_password}" | sudo -S ...
但有些事情告诉我这是不好的做法。
另一种解决方法是强制用户以root身份运行整个脚本,但是如果不使用sudo
生成的所有文件会导致不同的权限?
答案 0 :(得分:0)
您可以在脚本开头提示它,因此不能保存纯文本。
示例:
#!/bin/bash
read -s -p "[sudo] sudo password for $(whoami): " pass
echo $pass | sudo -S apt-get update
help read
:
-r不允许反斜杠转义任何字符
-s不回显来自终端的输入
答案 1 :(得分:0)
我建议您找出脚本使用SUDO运行所需的所有命令,确保脚本由特殊的非特权用户运行(例如 scriptuser ),然后编辑/ etc / sudoers允许 scriptuser 使用 NOPASSWD
运行这些命令举个例子:
scriptuser ALL = NOPASSWD: /bin/kill, /usr/bin/othercommand, etc.
如果您知道完整的命令(包括参数),这是理想的(这意味着攻击 scriptuser 帐户的攻击者只能以root身份运行这些特定命令)
Sudo在/ etc / sudoers中配置了 lot 选项。如果你man sudoers
,你应该看到所有这些。预警:此手册页很难理解。查找示例。测试他们。在StackExchange上询问。