在使用Vagrant和Ansible同步文件夹时,root用户的主目录

时间:2016-03-01 17:56:12

标签: ubuntu vagrant ansible

我正在使用Ansible建立一个Ubuntu Vagrant环境(使用VirtualBox提供程序)。我正在将主机/本地计算机上的目录与guest / Vagrant计算机同步。

are issues有同步文件夹的权限,所以我在我的Vagrantfile中指定同步文件夹,如下所示:

config.vm.synced_folder "./path/to/local/dir",
  "/home/deploy/webapps/myapp",
  owner: 5000, group: 5000, mount_options: ['dmode=775', 'fmode=664']

然后在Ansible任务中,当我创建deploy用户和组时,我将其uidgid指定为5000。这似乎是公认的做事方式之一。

但是,这会导致deploy用户的主目录归root所有,并且没有完整的文件补充:

deploy@vagrant-ubuntu-trusty-64:~$ ls -al /home
total 20
drwxr-xr-x  5 root    root    4096 Mar  1 17:20 .
drwxr-xr-x 23 root    root    4096 Mar  1 17:20 ..
drwxr-xr-x  5 root    root    4096 Mar  1 17:23 deploy
drwxr-xr-x  3 ubuntu  ubuntu  4096 Mar  1 17:19 ubuntu
drwxr-xr-x  5 vagrant vagrant 4096 Mar  1 17:20 vagrant

deploy@vagrant-ubuntu-trusty-64:~$ ls -al /home/deploy
total 24
drwxr-xr-x  5 root   root   4096 Mar  1 17:23 .
drwxr-xr-x  5 root   root   4096 Mar  1 17:20 ..
-rw-r--r--  1 root   root    213 Mar  1 17:23 .bashrc
drwxr-xr-x 12 deploy deploy 4096 Mar  1 17:26 .pyenv
drwx------  2 deploy deploy 4096 Mar  1 17:20 .ssh
drwxr-xr-x  3 root   root   4096 Mar  1 17:20 webapps

deploy@vagrant-ubuntu-trusty-64:~$ ls -al /home/deploy/webapps
total 8
drwxr-xr-x 3 root   root   4096 Mar  1 17:20 .
drwxr-xr-x 5 root   root   4096 Mar  1 17:23 ..
drwxrwxr-x 1 deploy deploy  850 Mar  1 14:53 myapp

相比之下,如果我没有在Vagrantfile中同步该文件夹,则存在显着差异:

deploy@vagrant-ubuntu-trusty-64:~$ ls -al /home
total 20
drwxr-xr-x  5 root    root    4096 Mar  1 17:30 .
drwxr-xr-x 23 root    root    4096 Mar  1 17:30 ..
drwxr-xr-x  5 deploy  deploy  4096 Mar  1 17:37 deploy
drwxr-xr-x  3 ubuntu  ubuntu  4096 Mar  1 17:30 ubuntu
drwxr-xr-x  5 vagrant vagrant 4096 Mar  1 17:30 vagrant

deploy@vagrant-ubuntu-trusty-64:~$ ls -al /home/deploy/
total 32
drwxr-xr-x  5 deploy deploy 4096 Mar  1 17:37 .
drwxr-xr-x  5 root   root   4096 Mar  1 17:30 ..
-rw-r--r--  1 deploy deploy  220 Apr  9  2014 .bash_logout
-rw-r--r--  1 deploy deploy 3850 Mar  1 17:33 .bashrc
drwx------  2 deploy deploy 4096 Mar  1 17:37 .cache
-rw-r--r--  1 deploy deploy  675 Apr  9  2014 .profile
drwxr-xr-x 12 deploy deploy 4096 Mar  1 17:37 .pyenv
drwx------  2 deploy deploy 4096 Mar  1 17:30 .ssh

那么,在同步该目录时,为什么/home/deploy拥有root?为什么deploy用户不会获得.profile.bash_logout等文件?而且,最重要的是,我该如何纠正这个问题?

1 个答案:

答案 0 :(得分:2)

我不太了解Ubuntu等100%确定这是正在发生的事情,但这似乎是合理的......

我认为在/home/deploy/webapps/myapp创建同步文件夹时,Vagrant可以理解地创建/home/deploy目录及其内容。它的所有者:组是root:root

所以,稍后,当我的Ansible playbook创建deploy用户时,它会看到它已经有一个主目录,并且不打算创建其.bashrc等,或者重新设置其用户:组权限。

所以,为了避免这种情况,我已经在/webapps/myapp处同步了该文件夹,并将我的Ansible剧本改为期望该位置。似乎工作。