创建用户的简单食谱缺少什么?

45次阅读
没有评论

问题描述

在学习使用Chef时,尝试创建一个简单的用户,并遇到了问题。他使用了一个Chef食谱来创建用户,但是在尝试使用私钥登录时遇到了“Permission denied (publickey)”的错误。他怀疑自己的食谱可能有一些问题,导致无法成功登录。

以下是用户提供的Chef食谱的代码:

user 'foox' do
  comment 'test me'
  uid '6711'
  home '/home/foox'
  shell '/bin/bash'
  password '<password_shadow_here>'
end

directory "/home/foox" do
  owner "foox"
  group "foox"
  mode 00755
  action :create
end

directory "/home/foox/.ssh" do
  owner "foox"
  group "foox"
  mode 00600
  action :create
end

file '/home/foox/.ssh/authorized_keys' do
  owner "foox"
  group "foox"
  mode "00600"
  content IO.read('/root/.ssh/authorized_keys')
  action :create
end

用户猜测可能是自己的食谱存在问题,导致无法正确登录。他希望了解解决方案,找出可能缺少的部分。

解决方案

用户的猜测基本上是正确的,问题可能出在权限设置上。另外,还有一些改进的地方可以让食谱更加简洁和可靠。

修正权限问题

在食谱中,用户创建了目录/home/foox/.ssh并设置了权限为00600,这意味着只有用户本人才有权限访问该目录。然而,SSH要求私钥文件和~/.ssh目录的权限必须非常严格,不允许其他用户访问。为了修正这个问题,将权限改为0700,确保只有用户本人可以访问该目录。

使用manage_home属性

user资源有一个名为manage_home的属性,它可以帮助自动创建用户的家目录,从而避免重复的资源设置。通过将manage_home属性设置为true,你可以让Chef自动创建用户的家目录。这样可以使你的食谱更简洁,并避免重复的资源设置。

以下是修正后的食谱代码:

user 'foox' do
  comment 'test me'
  uid '6711'
  home '/home/foox'
  shell '/bin/bash'
  password '<password_shadow_here>'
  manage_home true # 自动创建用户家目录
end

directory "/home/foox/.ssh" do
  owner "foox"
  group "foox"
  mode "0700" # 修正权限为0700
  action :create
end

file '/home/foox/.ssh/authorized_keys' do
  owner "foox"
  group "foox"
  mode "0600" # 授权文件权限改为0600
  content IO.read('/root/.ssh/authorized_keys')
  action :create
end

修正后的食谱将权限设置修正为了07000600,并添加了manage_home属性来自动创建用户的家目录。

通过以上修正,你的食谱应该可以成功创建用户,并允许你使用私钥进行登录了。

请注意,以上解决方案基于你提供的信息和最佳回答。如果你遇到其他问题或有其他需求,请随时提问。

正文完