Vagrant:如何设置默认的所有者和组权限

Vagrant:如何设置默认的所有者和组权限,vagrant,vagrantfile,vagrant-provision,Vagrant,Vagrantfile,Vagrant Provision,在创建Ubuntu虚拟机时,我提供了一个配置脚本,以便在安装来宾操作系统后安装一些软件包 config.vm.provision :shell, :path => "vm_provision/provision-node01.sh" bash脚本包含: #!/usr/bin/env bash # Intended for Ubuntu 14.04 (Trusty) # Update the Ubuntu sudo apt-get -y update sudo apt-get -y i

在创建Ubuntu虚拟机时,我提供了一个配置脚本,以便在安装来宾操作系统后安装一些软件包

config.vm.provision :shell, :path => "vm_provision/provision-node01.sh"
bash脚本包含:

#!/usr/bin/env bash

# Intended for Ubuntu 14.04 (Trusty)

# Update the Ubuntu
sudo apt-get -y update
sudo apt-get -y install build-essential

mkdir zookeeper
https://github.com/apache/zookeeper
创建虚拟机时,也会很好地执行上面的shell脚本命令。但是,文件夹“zookeeper”的默认所有者和组权限都设置为根

vagrant@ubuntu-14:~$ ls -lrt
total 4
drwxr-xr-x 4 root root 4096 Mar 30 08:55 zookeeper
我希望它是流浪,这样我就不会有改变超级用户所有的时间

提供了设置共享文件夹的所有者/组权限的步骤,但这是通过Vagrantfile设置的

在我的配置shell脚本中,我尝试在创建文件夹和克隆github repo之前更改用户(如下图所示),但没有帮助

su - vagrant

默认情况下,vagrant以root用户身份运行provisioner,您可以使用以下选项更改此行为

config.vm.provision :shell, :path => "vm_provision/provision-node01.sh", privileged: false

使用
privileged:false运行时(请参阅),provisioner将与
vagrant
用户一起运行。在您的情况下,这很好,因为您的脚本已经作为sudo用于运行apt命令,默认情况下,vagrant以root用户身份运行provisioner,您可以使用以下选项更改此行为

config.vm.provision :shell, :path => "vm_provision/provision-node01.sh", privileged: false

使用
privileged:false运行时(请参阅),provisioner将与
vagrant
用户一起运行。在您的情况下,这很好,因为您的脚本已经作为sudo运行apt命令

它只做了一个小的更改:config.vm.provision:shell,:path=>“vm_provision/provision-node01.sh”,特权:false小问题:您能告诉我如何将默认用户名从“vagrant”更改为“user1”,并为其设置密码吗?我尝试了config.ssh.username和config.ssh.password,但我想我仍然缺少一些东西。谢谢,我修复了引号-对于ssh用户名,需要定义user1。如果您使用packer构建一个框,那么在packer中会有一个用户创建脚本,您可以在其中更改名称。否则,您需要首先在vagrant中创建用户,然后才能更改
config.ssh.username
valueNo,我自己没有使用packer,但我会找到从vagrant本身创建用户的方法。谢谢你的指点。嗨,亨利,我找到了这篇文章。但是,在创建VM之后,我们似乎必须显式地创建这个用户,然后通过Vegrant(重新)配置,以便能够执行ssh。我理解得对吗?似乎没有办法自动化这个过程。它只做了一个小改动:config.vm.provision:shell,:path=>“vm_provision/provision-node01.sh”,privileged:falsellittle无关的问题:你能告诉我如何将默认用户名从“vagrant”改为“user1”并为其设置密码吗?我尝试了config.ssh.username和config.ssh.password,但我想我仍然缺少一些东西。谢谢,我修复了引号-对于ssh用户名,需要定义user1。如果您使用packer构建一个框,那么在packer中会有一个用户创建脚本,您可以在其中更改名称。否则,您需要首先在vagrant中创建用户,然后才能更改
config.ssh.username
valueNo,我自己没有使用packer,但我会找到从vagrant本身创建用户的方法。谢谢你的指点。嗨,亨利,我找到了这篇文章。但是,在创建VM之后,我们似乎必须显式地创建这个用户,然后通过Vegrant(重新)配置,以便能够执行ssh。我理解得对吗?似乎没有办法使这一过程自动化。