使用Bash在整个脚本中记住root密码

时间:2018-03-30 14:47:30

标签: bash passwords root sudo

背景

我有一个很长的bash脚本,可以设置一个互联软件的大环境,需要几个小时才能完成。它执行的一些任务需要以root身份运行,我使用sudo ...。然后暂停整个过程,直到用户注意到并输入root密码。我寻求某种方式让用户只在脚本开头输入root密码,然后在sudo稍后需要时自动提供。

我对可能(糟糕)解决方案的看法

我可以将密码直接存储在变量中,然后使用

提供
echo "${root_password}" | sudo -S ...

但有些事情告诉我这是不好的做法。

另一种解决方法是强制用户以root身份运行整个脚本,但是如果不使用sudo生成的所有文件会导致不同的权限?

2 个答案:

答案 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上询问。