如何为Chef Infra的sudo资源编写Chef InSpec测试及相关疑问
版本信息
- Chef Workstation 版本: 22.7.1006
- Chef InSpec 版本: 4.56.20
- Chef CLI 版本: 5.6.1
- Chef Habitat 版本: 1.6.420
- Test Kitchen 版本: 3.3.1
- Cookstyle 版本: 7.32.1
- Chef Infra Client 版本: 17.10.0
我使用Test Kitchen部署了3台虚拟机:
- Ubuntu 16.04
- Ubuntu 20.04
- Ubuntu 22.04
并在kitchen.yml中进行如下配置:
platforms: - name: ubuntu-16.04 - name: ubuntu-20.04 - name: ubuntu-20.04
注:提及以上信息是因为sudo在不同Ubuntu版本中的表现可能存在差异。
目标
编写Chef Infra配方,让指定用户能够执行sudo命令,并编写对应的Chef InSpec测试进行验证。
已尝试的操作
根据Chef官方文档,我在配方中添加了以下代码:
sudo 'admin' do user 'user' end
该代码会创建/etc/sudoers.d/admin文件,内容如下:
# This file is managed by Chef Infra Client. Changes will be overwritten. user ALL=(ALL) ALL
但并未将用户user添加到sudo用户组中。
随后我根据Chef InSpec用户资源文档编写了如下测试:
describe user('user') do its('groups') { should include('sudo') } end
测试失败,原因是用户user未被添加到sudo组中。不过当我以user身份登录时,确实可以执行sudo命令。
我查阅了旧问题并尝试了以下代码:
group 'sudo' do group_name 'sudo' members 'user' action :modify append true end
此时测试可以通过。但现在出现了两种为用户赋予sudo权限的方法,我不确定它们是否等效。
我知道可以编写测试来验证/etc/sudoers.d/admin的内容,但这似乎不是最佳方案,尤其是不同Ubuntu版本可能生成不同的文件。
疑问
- 针对我要支持的Ubuntu版本,Chef Infra的sudo资源是否完成了赋予用户sudo权限所需的全部操作?
- 是否存在对应的Chef InSpec sudo审计资源?
- 若不存在,应如何编写Chef InSpec测试来验证用户拥有sudo权限?
内容的提问来源于stack exchange,提问作者Craftonix - AA
相关产品推荐
相关产品推荐

