You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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版本可能生成不同的文件。

疑问

  1. 针对我要支持的Ubuntu版本,Chef Infra的sudo资源是否完成了赋予用户sudo权限所需的全部操作?
  2. 是否存在对应的Chef InSpec sudo审计资源?
  3. 若不存在,应如何编写Chef InSpec测试来验证用户拥有sudo权限?

内容的提问来源于stack exchange,提问作者Craftonix - AA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:10:27