如何/在哪里为Vagrant shell配置者提供sudo密码?

时间:2016-09-28 18:53:06

标签: linux shell vagrant sudo

我正在尝试构建一个由install.sh shell脚本配置的Vagrant框(CentOS)。这个脚本将做几件事,第一件事涉及在/opt下创建正确的目录结构,以便我的服务可以安装在那里并做其他事情,比如在那里写日志。

所以我的Vagrant项目(到目前为止)包括:

my-app-vagrant/
    Vagrantfile
    install.sh

install.sh的样子:

mkdir /opt/myapp
mkdir /opt/myapp/bin        # Where we will install binary to (later in this script)
mkdir /opt/myapp/logs       # Where the binary will write logs to

现在,二进制文件 not 需要提升权限才能运行(它通过命令行参数配置在哪里写入日志)。但是,我只是希望使用上述目录结构在/opt下生存,至少对于这台特定的机器而言。

问题是/optroot所有。这意味着我需要使用mkdirs运行这些sudo,为脚本提供sudo的密码,然后调整目录权限,以便在应用运行时,它有权运行和将日志写入我的预定目的地(同样是/opt/myapp/logs)。所以我调整install.sh看起来像这样:

mkdir /opt/myapp
mkdir /opt/myapp/bin
mkdir /opt/myapp/logs

chmod -R 777 /opt/myapp     # Now when the app runs as a normal non-privileged user, we can run + write logs

我知道我可以通过echo <rootPswd> | sudo -S sh install.sh(其中<rootPswd>是正确的root密码)为脚本提供密码。

现在我正试图弄清楚当Vagrant配置虚拟机时如何正常运行/正常工作。

我的Vagrant文​​件如下:

Vagrant.configure(2) do |config|
    config.vm.provision "shell", path: "install.sh"

    config.vm.box = "centos7"
    config.vm.box_url = "https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box"

    config.vm.network "private_network", ip: "10.0.1.2"

    config.vm.provider "virtualbox" do |vb|
        vb.memory = "2048"
    end
end

但我坚持的是:如何将整个“echo <rootPswd> | sudo -S sh install.sh”概念扩展到Vagrant?根据他们的文档,我可以使用privileged选项,但默认设置为true

但是在他们的文档中没有任何地方可以解释如何/在哪里提供应该使用的sudo密码(至少从我迄今为止能够找到的密码)。

所以我问:

  • 如何为Vagrant VM的shell配置程序的安装脚本提供sudo密码?和
  • 在给出我尝试使用的基本Vagrant框的情况下,哪里可以找到sudo密码?

1 个答案:

答案 0 :(得分:1)

事实证明(对于几乎所有 Vagrant框),vagrant用户在/etc/sudoers中列出ALL=(ALL) NOPASSWD:ALL权限,指示Linux 要求该用户使用“sudo密码”。

因此,您无需为privileged用户提供sudo密码。