【发布时间】:2020-07-28 00:47:13
【问题描述】:
我们可以使用 Chef 资源在 /etc/passwd 文件中将 GID 从 101 更改为 100(或任何其他数字)吗?libuuid:x:100:101::/var/lib/libuuid:
对于 /etc/passwd 中所有带有 101 的 GID,如果需要更改 GID,使用 Chef 资源的方法是什么?
【问题讨论】:
标签: bash chef-infra chef-recipe passwd
我们可以使用 Chef 资源在 /etc/passwd 文件中将 GID 从 101 更改为 100(或任何其他数字)吗?libuuid:x:100:101::/var/lib/libuuid:
对于 /etc/passwd 中所有带有 101 的 GID,如果需要更改 GID,使用 Chef 资源的方法是什么?
【问题讨论】:
标签: bash chef-infra chef-recipe passwd
在提出解决方案之前,我想指出两点:
/etc/passwd 文件,因为这可能会导致问题。如果您仍想使用 Chef,可以在 ruby_block 资源中使用 Ruby 代码。
但是,处理此问题的最简洁方法是(单独)识别用户并使用用户资源。
例子:
# This will set gid as 1001 for user1, user2, user3
%w(
user1
user2
user3
).each do |u|
user u do
# add any other properties as required
gid '1001'
end
end
更新:
一个示例文件/tmp/userlist,内容如下:
john:x:100:101::/bin/bash:
david:x:207:100::/bin/bash:
joe:x:100:101::/bin/nologin:
mike:x:101:100::/bin/bash:
rich:x:103:207::/bin/bash:
fred:x:105:111::/bin/nologin:
不是 Ruby 方面的专家,但它就是这样。以下ruby_block 将从文件中读取行,并创建一个新文件,替换 GID 101 的行:
ruby_block "Write file" do
block do
puts
userlist = File.readlines('/tmp/userlist')
fp = File.open('/tmp/newuserlist', mode='w')
userlist.each do |line|
gid = line.split(':')[3]
if gid == '101'
fp.write line.sub(/.*\K101/, '1001')
else
fp.write line
end
end
fp.close
end
end
注意:使用 Ruby 或使用其他语言甚至是 Shell 脚本可能有一种更简洁、更简单的方法。请考虑相同。
【讨论】:
ruby_block 资源中文件中的行。我会用一个示例更新我的答案。
user 'a user' do
comment 'A random user'
uid 1234
gid 'groupname'
home '/home/random'
shell '/bin/bash'
password '$1$JJsvHslasdfjVEroftprNn4JHtDi'
end
【讨论】: