使用chef添加用户资源不会创建主目录

时间:2014-05-13 13:04:08

标签: linux chef chef-recipe

在流浪盒上精确64(ubuntu 12.04)

使用Chef创建用户资源时,不会创建主目录:

我的食谱:

user "myuser" do
  supports :manage_home => true
  shell "/bin/bash"
  home "/home/myuser"
  comment "Created by Chef"
  password "myencryptedpassword"
  system true
  provider Chef::Provider::User::Useradd
  action :create
end

当我进行身份验证时:

$ su - myuser
Password: 
No directory, logging in with HOME=/

更新 - precision64(Ubuntu 12.04 64位)

的解决方法
directory "/home/myuser" do
  owner "myuser"
  group "myuser"
  mode 00755
  action :create
end

3 个答案:

答案 0 :(得分:3)

虽然系统用户通常没有家庭目录,但是如果您指定home,即使系统用户也会创建家庭目录。我已经尝试过了,无法重现这个问题。

正在发生的事情是文档中隐藏的一点点。 chef documentations说:

  

系统|用于创建系统用户。此属性可以与useradd一起用作提供程序,以创建将-r标志传递给useradd的系统用户。

如果查看useradd的手册页:

-r, --system
     Create a system account.

   System users will be created with no aging information in /etc/shadow, 
   and their numeric identifiers are chosen in the SYS_UID_MIN-SYS_UID_MAX
   range, defined in >/etc/login.defs, instead of UID_MIN-UID_MAX 
   (and their GID counterparts for the creation of groups).

   Note that useradd will not create a home directory for such an user,
   regardless of the default setting in /etc/login.defs (CREATE_HOME). 
   You have to specify the -m options if you want a home directory for
   a system account to be created.

但是,如果指定主目录,似乎主厨 明确地传递-m选项。因此,我无法重现这个问题。

答案 1 :(得分:1)

在用户创建后,您是否已将home属性添加到配方中?当我第一次开始创建系统用户时,我没有在管理配方并确认用户已创建之前添加:manage_home和home位到配方。在添加主目录管理后,后续运行配方并且home属性实际上不起作用,直到我删除用户并再次运行配方。

我认为如果用户已经存在,useradd将不再执行,因此通过配方添加-m将不会发生,除非用户被删除并且配方重新运行干净的系统并发送useradd - RM。

答案 2 :(得分:1)

我能够重现这个问题并解决它。 提示是user resource的厨师文档。 "除非/etc/login.defs中的CREATE_HOME设置为no"否则将创建[homedir]。在新的Ubuntu安装上,该行不存在。如果失踪,也许默认为否。

在/etc/login.defs中我添加了:

CREATE_HOME  yes 

一旦添加,我的厨师运行将完成并创建homedir,允许我然后修改用户homedir的内容。此方法可能比为每个用户手动创建homedirs更简单。