在一个stream浪的盒子精确64(Ubuntu的12.04)
使用Chef创build用户资源时,不会创build主目录:
我的食谱:
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
当我authentication时:
$ su - myuser Password: No directory, logging in with HOME=/
directory "/home/myuser" do owner "myuser" group "myuser" mode 00755 action :create end
虽然系统用户通常没有家庭主机,但是如果您指定了家庭,厨师甚至会为系统用户创建主目录。 我试过了,不能重现这个问题。
发生了什么是在文件中隐藏了一点点。 厨师文件说:
系统| 用来创建一个系统用户。 这个属性可以和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
选项。 因此我无法重现这个问题。
在创建用户之后,您是否已将home属性添加到配方中? 当我第一次创建一个系统用户时,我并没有将manage_home和home位添加到配方中,直到我运行配方并验证用户已经创建。 在添加主目录管理和主属性之后,配方的后续运行实际上并不起作用,直到我删除用户并再次运行配方。
我假设如果用户已经存在,useradd将不会再执行,所以除非直到用户被删除,并且配方重新运行在一个干净的系统上并发送useradd -rm,否则通过配方添加-m将不会发生。
我能够重现这个问题并解决它。 提示是在用户资源的厨师文档。 “除非将/etc/login.defs中的CREATE_HOME设置为no,否则将创建[homedir]。 在新鲜的Ubuntu安装该行不存在。 如果缺失,它可能默认为no。
在/etc/login.defs中我添加了:
CREATE_HOME yes
一旦添加了我的厨师跑将完成并创建homedir,允许我然后修改用户homedir的内容。 此方法可能比为每个用户手动创建homedirs更简单。