【发布时间】:2018-10-13 15:50:15
【问题描述】:
我正在开发一个运行 CIS 合规性命令的 InSpec 控件。 在使用 MySQL 时,我被困在这里:
执行以下SQL语句确定datadir的值:
show variables where variable_name = 'datadir';
我需要从上面的命令中提取输出并在下一个命令中重用它:
ls -l <THE OUTPUT OF THE PREVIOUS COMMAND>/.. | egrep "^d[r|w|x]{3}------\s*.\s*mysql\s*mysql\s*\d*.*mysql"
问题是第一个命令是 SQL 请求,第二个命令是终端命令。
如何将它们(在获得第一个命令的输出并将其放入第二个命令后)放入 InSpec 控件,如下所示:
control "mysql1" do
impact 1.0
title "Use dedicated Least Privileged Account for MySQL Daemon/Service"
desc "May reduce the impact of a MySQL-born vulnerability"
describe command ('ps -ef |e grep "^mysql.*$"') do
its('stdout') { should match ''}
end
end
感谢您的帮助@Matt
我已阅读您的回答,发现它真的很有帮助,除了最后一段代码:是否
egrep "^d[r|w|x]{3}------\s*.\s*mysql\s*mysql\s*\d*.*mysql"
意思
it { expect(subject).to_not be_owned_by 'mysql' }
it { expect(subject).to_not be_grouped_into 'mysql' }
it { expect(subject).to_not be_executable_by 'mysql' }
?
另外,我确实尝试了您之前编写的所有块,但它们都不起作用。是的,我使用的是 linux 16.04
【问题讨论】:
-
问题和代码块中的第二个命令不同。哪个是正确的命令?
-
块只是一个例子