我正在尝试构建一个由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
下生存,至少对于这台特定的机器而言。
问题是/opt
归root
所有。这意味着我需要使用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
密码(至少从我迄今为止能够找到的密码)。
所以我问:
sudo
密码?和sudo
密码?答案 0 :(得分:1)
事实证明(对于几乎所有 Vagrant框),vagrant
用户在/etc/sudoers
中列出ALL=(ALL) NOPASSWD:ALL
权限,指示Linux 不要求该用户使用“sudo密码”。
因此,您无需为privileged
用户提供sudo密码。