mirror of
https://github.com/ansible-lockdown/RHEL9-CIS.git
synced 2025-12-27 15:33:06 +00:00
initial RTD testing
Signed-off-by: Mark Bolwell <mark.bollyuk@gmail.com>
This commit is contained in:
parent
33cfc54a5e
commit
7ec8b73375
14 changed files with 1142 additions and 0 deletions
16
docs/.readthedocs.yaml
Normal file
16
docs/.readthedocs.yaml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
build:
|
||||||
|
os: "ubuntu-20.04"
|
||||||
|
tools:
|
||||||
|
python: "3.8"
|
||||||
|
python:
|
||||||
|
# Install our python package before building the docs
|
||||||
|
install:
|
||||||
|
- method: pip
|
||||||
|
path: .
|
||||||
|
sphinx:
|
||||||
|
fail_on_warning: true
|
||||||
|
formats:
|
||||||
|
- pdf
|
||||||
|
- epub
|
||||||
181
docs/Makefile
Normal file
181
docs/Makefile
Normal file
|
|
@ -0,0 +1,181 @@
|
||||||
|
# Makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line.
|
||||||
|
SPHINXOPTS = "-W"
|
||||||
|
SPHINXBUILD = sphinx-build
|
||||||
|
PAPER =
|
||||||
|
BUILDDIR = build
|
||||||
|
|
||||||
|
# User-friendly check for sphinx-build
|
||||||
|
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
||||||
|
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Internal variables.
|
||||||
|
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||||
|
PAPEROPT_letter = -D latex_paper_size=letter
|
||||||
|
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||||
|
# the i18n builder cannot share the environment and doctrees with the others
|
||||||
|
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||||
|
|
||||||
|
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Please use \`make <target>' where <target> is one of"
|
||||||
|
@echo " html to make standalone HTML files"
|
||||||
|
@echo " dirhtml to make HTML files named index.html in directories"
|
||||||
|
@echo " singlehtml to make a single large HTML file"
|
||||||
|
@echo " pickle to make pickle files"
|
||||||
|
@echo " json to make JSON files"
|
||||||
|
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||||
|
@echo " qthelp to make HTML files and a qthelp project"
|
||||||
|
@echo " applehelp to make an Apple Help Book"
|
||||||
|
@echo " devhelp to make HTML files and a Devhelp project"
|
||||||
|
@echo " epub to make an epub"
|
||||||
|
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||||
|
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||||
|
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||||
|
@echo " text to make text files"
|
||||||
|
@echo " man to make manual pages"
|
||||||
|
@echo " texinfo to make Texinfo files"
|
||||||
|
@echo " info to make Texinfo files and run them through makeinfo"
|
||||||
|
@echo " gettext to make PO message catalogs"
|
||||||
|
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||||
|
@echo " xml to make Docutils-native XML files"
|
||||||
|
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||||
|
@echo " linkcheck to check all external links for integrity"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BUILDDIR)/*
|
||||||
|
rm source/auto_*
|
||||||
|
|
||||||
|
html:
|
||||||
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
|
|
||||||
|
dirhtml:
|
||||||
|
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||||
|
|
||||||
|
singlehtml:
|
||||||
|
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||||
|
|
||||||
|
pickle:
|
||||||
|
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the pickle files."
|
||||||
|
|
||||||
|
json:
|
||||||
|
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the JSON files."
|
||||||
|
|
||||||
|
htmlhelp:
|
||||||
|
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||||
|
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||||
|
|
||||||
|
qthelp:
|
||||||
|
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||||
|
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||||
|
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/openstack-ansible.qhcp"
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/openstack-ansible.qhc"
|
||||||
|
|
||||||
|
applehelp:
|
||||||
|
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
|
||||||
|
@echo "N.B. You won't be able to view it unless you put it in" \
|
||||||
|
"~/Library/Documentation/Help or install it in your application" \
|
||||||
|
"bundle."
|
||||||
|
|
||||||
|
devhelp:
|
||||||
|
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished."
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# mkdir -p $$HOME/.local/share/devhelp/openstack-ansible"
|
||||||
|
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/openstack-ansible"
|
||||||
|
@echo "# devhelp"
|
||||||
|
|
||||||
|
epub:
|
||||||
|
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||||
|
|
||||||
|
latex:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||||
|
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||||
|
"(use \`make latexpdf' here to do that automatically)."
|
||||||
|
|
||||||
|
latexpdf:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through pdflatex..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
latexpdfja:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
text:
|
||||||
|
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||||
|
|
||||||
|
man:
|
||||||
|
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||||
|
|
||||||
|
texinfo:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||||
|
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||||
|
"(use \`make info' here to do that automatically)."
|
||||||
|
|
||||||
|
info:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo "Running Texinfo files through makeinfo..."
|
||||||
|
make -C $(BUILDDIR)/texinfo info
|
||||||
|
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||||
|
|
||||||
|
gettext:
|
||||||
|
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||||
|
|
||||||
|
changes:
|
||||||
|
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||||
|
@echo
|
||||||
|
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||||
|
|
||||||
|
linkcheck:
|
||||||
|
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||||
|
@echo
|
||||||
|
@echo "Link check complete; look for any errors in the above output " \
|
||||||
|
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||||
|
|
||||||
|
xml:
|
||||||
|
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||||
|
|
||||||
|
pseudoxml:
|
||||||
|
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
||||||
8
docs/README.md
Normal file
8
docs/README.md
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
To generate the documentation on a RHEL/CentOS 7 system, take the following steps:
|
||||||
|
1. Install required packages:
|
||||||
|
* `yum install python3-pip python-sphinx`
|
||||||
|
2. Install the requirements:
|
||||||
|
* `sudo pip3 install -r requirements.txt`
|
||||||
|
3. Generate the documentation:
|
||||||
|
* `make singlehtml`
|
||||||
|
|
||||||
9
docs/requirements.txt
Normal file
9
docs/requirements.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# The order of packages is significant, because pip processes them in the order
|
||||||
|
# of appearance. Changing the order has an impact on the overall integration
|
||||||
|
# process, which may cause wedges in the gate later.
|
||||||
|
|
||||||
|
# this is required for the docs build jobs
|
||||||
|
sphinx>1.8
|
||||||
|
sphinx_rtd_theme
|
||||||
|
Jinja2
|
||||||
|
PyYAML
|
||||||
0
docs/source/_static/.gitkeep
Normal file
0
docs/source/_static/.gitkeep
Normal file
1
docs/source/_static/MPG-logo-mono-blue.svg
Normal file
1
docs/source/_static/MPG-logo-mono-blue.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 5.2 KiB |
350
docs/source/conf.py
Normal file
350
docs/source/conf.py
Normal file
|
|
@ -0,0 +1,350 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# Set Variables
|
||||||
|
# Used to try and allow multiple benchmark versions to use the same layout
|
||||||
|
BENCHMARK_TYPE = "CIS"
|
||||||
|
BENCHMARK_OS = "RedHat Enterprise Linux 9"
|
||||||
|
BENCHMARK_OS_SHORT = "RHEL9"
|
||||||
|
BENCHMARK_VERSION = "V0.5 beta"
|
||||||
|
BENCHMARK_REL_DATE = "TBC"
|
||||||
|
LOCKDOWN_URL = "https://github.com/ansible-lockdown/{BENCHMARK_OS_SHORT}-{BENCHMARK_TYPE}"
|
||||||
|
TESTED_OS = '''\
|
||||||
|
* RHEL9
|
||||||
|
* ROCKY9
|
||||||
|
* ALMALINUX9\
|
||||||
|
'''.format(length='multiline',ordinal='second')
|
||||||
|
|
||||||
|
"""Documentation configuration for Ansible Lockdown roles."""
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
# implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# This file is execfile()d with the current directory set to its
|
||||||
|
# containing dir.
|
||||||
|
#
|
||||||
|
# Note that not all possible configuration values are present in this
|
||||||
|
# autogenerated file.
|
||||||
|
#
|
||||||
|
# All configuration values have a default; values that are commented out
|
||||||
|
# serve to show the default.
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
# import pbr.version
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
sys.path.insert(0, os.path.join(os.path.abspath('.'), '_exts'))
|
||||||
|
|
||||||
|
# NOTE(mhayden): Since the security role docs are fairly lengthy and deeply
|
||||||
|
# nested in places, sphinx occasionally throws a pickling error as shown in
|
||||||
|
# Launchpad bug 1627732. Sphinx 1.4 now prints a recommendation in these
|
||||||
|
# situations to increase Python's recursion limit a bit higher to avoid the
|
||||||
|
# pickling error.
|
||||||
|
sys.setrecursionlimit(4000)
|
||||||
|
|
||||||
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
|
# needs_sphinx = '1.0'
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = [
|
||||||
|
'ansiblelockdown_docs',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
# templates_path = ['_templates']
|
||||||
|
|
||||||
|
# The suffix(es) of source filenames.
|
||||||
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
# The encoding of source files.
|
||||||
|
# source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
|
# The master toctree document.
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# General information about the project.
|
||||||
|
author = 'MindPoint Group'
|
||||||
|
category = 'Security'
|
||||||
|
copyright = '2022, MindPoint Group'
|
||||||
|
description = '{BENCHMARK_TYPE} compliance for {BENCHMARK_OS_SHORT} systems'
|
||||||
|
project = 'Ansible-lockdown {BENCHMARK_OS_SHORT}-{BENCHMARK}'
|
||||||
|
role_name = '{BENCHMARK_OS_SHORT}-{BENCHMARK_TYPE}'
|
||||||
|
target_name = '{BENCHMARK_OS_SHORT}-{BENCHMARK_TYPE}'
|
||||||
|
title = 'Ansible-Lockdown {BENCHMARK_OS_SHORT}-{BENCHMARK_TYPE} Documentation:'
|
||||||
|
|
||||||
|
rst_prolog = """
|
||||||
|
.. |benchmark_name| replace:: {BENCHMARK_TYPE}
|
||||||
|
.. |benchmark_os| replace:: {BENCHMARK_OS}
|
||||||
|
.. |benchmark_os_short| replace:: {BENCHMARK_OS_SHORT}
|
||||||
|
.. |benchmark_version| replace:: {BENCHMARK_VERSION}
|
||||||
|
.. |benchmark_release_date| replace:: {BENCHMARK_REL_DATE}
|
||||||
|
.. |lockdown_url| replace:: {LOCKDOWN_URL}
|
||||||
|
.. |tested_oss| replace:: {TESTED_OS}
|
||||||
|
"""
|
||||||
|
|
||||||
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
# |mindpointversion| and |release|, also used in various other places throughout the
|
||||||
|
# built documents.
|
||||||
|
#
|
||||||
|
# The short X.Y version.
|
||||||
|
# version_info = pbr.version.VersionInfo(target_name)
|
||||||
|
# The full version, including alpha/beta/rc tags.
|
||||||
|
# release = version_info.version_string_with_vcs()
|
||||||
|
# The short X.Y version.
|
||||||
|
# version = version_info.canonical_version_string()
|
||||||
|
|
||||||
|
# openstackdocstheme options
|
||||||
|
# repository_name = 'mindpointgroup/' + target_name
|
||||||
|
# bug_project = project.lower()
|
||||||
|
# bug_tag = ''
|
||||||
|
|
||||||
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
|
# for a list of supported languages.
|
||||||
|
#
|
||||||
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
|
# Usually you set "language" from the command line for these cases.
|
||||||
|
language = None
|
||||||
|
|
||||||
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
|
# non-false value, then it is used:
|
||||||
|
# today = ''
|
||||||
|
# Else, today_fmt is used as the format for a strftime call.
|
||||||
|
# today_fmt = '%B %d, %Y'
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
exclude_patterns = [
|
||||||
|
'developer-notes/*.rst',
|
||||||
|
'stig-notes/*.rst',
|
||||||
|
]
|
||||||
|
|
||||||
|
# The reST default role (used for this markup: `text`) to use for all
|
||||||
|
# documents.
|
||||||
|
# default_role = None
|
||||||
|
|
||||||
|
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||||
|
# add_function_parentheses = True
|
||||||
|
|
||||||
|
# If true, the current module name will be prepended to all description
|
||||||
|
# unit titles (such as .. function::).
|
||||||
|
# add_module_names = True
|
||||||
|
|
||||||
|
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||||
|
# output. They are ignored by default.
|
||||||
|
# show_authors = False
|
||||||
|
|
||||||
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
|
# A list of ignored prefixes for module index sorting.
|
||||||
|
# modindex_common_prefix = []
|
||||||
|
|
||||||
|
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||||
|
# keep_warnings = False
|
||||||
|
|
||||||
|
# -- STIG Ansible Docs extension config items -----------------------------
|
||||||
|
stig_metadata_dir = '../metadata' # relative path from the doc source dir
|
||||||
|
stig_ansible_dir = '../../' # relative path from doc source
|
||||||
|
stig_ansible_task_filenames = ['fix-cat1.yml', 'fix-cat2.yml', 'fix-cat3.yml']
|
||||||
|
stig_xccdf_file = 'U_Red_Hat_Enterprise_Linux_7_STIG_V2R1_Manual-xccdf.xml' # filename only this should be placed in metadata dir
|
||||||
|
stig_xccdf_namespace = "{http://checklists.nist.gov/xccdf/1.1}"
|
||||||
|
stig_control_statuses = {
|
||||||
|
'default': 'Implemented',
|
||||||
|
'rhel7stig_complex': 'Complexity High',
|
||||||
|
'rhel7stig_disruptive': 'Disruption High',
|
||||||
|
'missing': 'Not Implemented',
|
||||||
|
}
|
||||||
|
stig_control_statuses_order = ['Implemented', 'Complexity High', 'Disruption High', 'Not Implemented']
|
||||||
|
stig_control_severities = ['high', 'medium', 'low']
|
||||||
|
|
||||||
|
# -- STIG Ansible Docs extension config items -----------------------------
|
||||||
|
|
||||||
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
html_theme = 'sphinx_rtd_theme'
|
||||||
|
|
||||||
|
html_theme_options = {
|
||||||
|
'display_version': True,
|
||||||
|
'prev_next_buttons_location': 'bottom',
|
||||||
|
'sticky_navigation': True,
|
||||||
|
'collapse_navigation': False,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add any paths that contain custom themes here, relative to this directory.
|
||||||
|
# html_theme_path = []
|
||||||
|
|
||||||
|
# The name for this set of Sphinx documents. If None, it defaults to
|
||||||
|
# "<project> v<release> documentation".
|
||||||
|
# html_title = None
|
||||||
|
|
||||||
|
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||||
|
# html_short_title = None
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top
|
||||||
|
# of the sidebar.
|
||||||
|
html_logo = '_static/MPG-logo-mono-blue.svg'
|
||||||
|
|
||||||
|
# The name of an image file (within the static path) to use as favicon of the
|
||||||
|
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
|
# pixels large.
|
||||||
|
# html_favicon = None
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
html_static_path = ['_static']
|
||||||
|
|
||||||
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
|
# directly to the root of the documentation.
|
||||||
|
# html_extra_path = []
|
||||||
|
|
||||||
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
|
# using the given strftime format.
|
||||||
|
html_last_updated_fmt = '%Y-%m-%d %H:%M'
|
||||||
|
|
||||||
|
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||||
|
# typographically correct entities.
|
||||||
|
# html_use_smartypants = True
|
||||||
|
|
||||||
|
# Custom sidebar templates, maps document names to template names.
|
||||||
|
# html_sidebars = {}
|
||||||
|
|
||||||
|
# Additional templates that should be rendered to pages, maps page names to
|
||||||
|
# template names.
|
||||||
|
# html_additional_pages = {}
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
# html_domain_indices = True
|
||||||
|
|
||||||
|
# If false, no index is generated.
|
||||||
|
html_use_index = False
|
||||||
|
|
||||||
|
# If true, the index is split into individual pages for each letter.
|
||||||
|
# html_split_index = False
|
||||||
|
|
||||||
|
# If true, links to the reST sources are added to the pages.
|
||||||
|
# html_show_sourcelink = False
|
||||||
|
|
||||||
|
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||||
|
# html_show_sphinx = True
|
||||||
|
|
||||||
|
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||||
|
# html_show_copyright = True
|
||||||
|
|
||||||
|
# If true, an OpenSearch description file will be output, and all pages will
|
||||||
|
# contain a <link> tag referring to it. The value of this option must be the
|
||||||
|
# base URL from which the finished HTML is served.
|
||||||
|
# html_use_opensearch = ''
|
||||||
|
|
||||||
|
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||||
|
# html_file_suffix = None
|
||||||
|
|
||||||
|
# Output file base name for HTML help builder.
|
||||||
|
htmlhelp_basename = target_name + '-docs'
|
||||||
|
|
||||||
|
# If true, publish source files
|
||||||
|
html_copy_source = False
|
||||||
|
|
||||||
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
|
latex_elements = {
|
||||||
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
|
# 'papersize': 'letterpaper',
|
||||||
|
|
||||||
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
|
# 'pointsize': '10pt',
|
||||||
|
|
||||||
|
# Additional stuff for the LaTeX preamble.
|
||||||
|
# 'preamble': '',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
# (source start file, target name, title,
|
||||||
|
# author, documentclass [howto, manual, or own class]).
|
||||||
|
latex_documents = [
|
||||||
|
(master_doc, target_name + '.tex',
|
||||||
|
title, author, 'manual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
# the title page.
|
||||||
|
# latex_logo = None
|
||||||
|
|
||||||
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
|
# not chapters.
|
||||||
|
# latex_use_parts = False
|
||||||
|
|
||||||
|
# If true, show page references after internal links.
|
||||||
|
# latex_show_pagerefs = False
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
# latex_show_urls = False
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
# latex_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
# latex_domain_indices = True
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ---------------------------------------
|
||||||
|
|
||||||
|
# One entry per manual page. List of tuples
|
||||||
|
# (source start file, name, description, authors, manual section).
|
||||||
|
man_pages = [
|
||||||
|
(master_doc, target_name,
|
||||||
|
title, [author], 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
# man_show_urls = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
|
|
||||||
|
# Grouping the document tree into Texinfo files. List of tuples
|
||||||
|
# (source start file, target name, title, author,
|
||||||
|
# dir menu entry, description, category)
|
||||||
|
texinfo_documents = [
|
||||||
|
(master_doc, target_name,
|
||||||
|
title, author, project,
|
||||||
|
description, category),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
# texinfo_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
# texinfo_domain_indices = True
|
||||||
|
|
||||||
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||||
|
# texinfo_show_urls = 'footnote'
|
||||||
|
|
||||||
|
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||||
|
# texinfo_no_detailmenu = False
|
||||||
|
|
||||||
|
# -- Options for PDF output --------------------------------------------------
|
||||||
|
|
||||||
|
pdf_documents = [
|
||||||
|
(master_doc, target_name,
|
||||||
|
title, author)
|
||||||
|
]
|
||||||
52
docs/source/controls-contrib.rst
Normal file
52
docs/source/controls-contrib.rst
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
Additional Controls
|
||||||
|
===================
|
||||||
|
|
||||||
|
Although the |benchmark_name| documentation guide contains a
|
||||||
|
comprehensive set of security configurations, some contributors want to add
|
||||||
|
extra security configurations to the role. The *contrib* portion of the
|
||||||
|
role is designed to implement those configurations as an optional set of tasks.
|
||||||
|
|
||||||
|
In general, *contrib* controls are limited to items to meet backwards compatibility
|
||||||
|
with the `Openstack Ansible Hardening`_ project. It is recommended that new *contrib*
|
||||||
|
items (things that don't address specific items) should be addressed in a separate
|
||||||
|
Ansible role.
|
||||||
|
|
||||||
|
.. _Openstack Ansible Hardening: https://github.com/openstack/ansible-hardening
|
||||||
|
|
||||||
|
**BELOW IS NOT YET IMPLEMENTED IN THIS ROLE**
|
||||||
|
|
||||||
|
*The below configurations and variables are not yet implemented. This page and
|
||||||
|
message are being kept until it is implemented.*
|
||||||
|
|
||||||
|
The *contrib* hardening configurations are disabled by default, but they can
|
||||||
|
be enabled by setting the following Ansible variable:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rhel7stig_security_contrib_enabled: yes
|
||||||
|
|
||||||
|
The individual tasks are controlled by Ansible variables in
|
||||||
|
``defaults/main.yml`` that are defined under the
|
||||||
|
``rhel7stig_security_contrib:`` variable.
|
||||||
|
|
||||||
|
Kernel
|
||||||
|
------
|
||||||
|
|
||||||
|
Disable IPv6
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Some systems do not require IPv6 connectivity and the presence of link local
|
||||||
|
IPv6 addresses can present an additional attack surface for lateral movement.
|
||||||
|
Deployers can set the following variable to disable IPv6 on all network
|
||||||
|
interfaces:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rhel7_stig_security_contrib:
|
||||||
|
disable_ipv6: yes
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
Deployers should test this change in a test environment before applying it
|
||||||
|
in a production deployment. Applying this change to a production system
|
||||||
|
that relies on IPv6 connectivity will cause unexpected downtime.
|
||||||
110
docs/source/controls.rst
Normal file
110
docs/source/controls.rst
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
.. _controls_label:
|
||||||
|
|
||||||
|
Controls
|
||||||
|
========
|
||||||
|
|
||||||
|
This role follows the |benchmark_name| `implementation guide`_.
|
||||||
|
The guide has over 200 controls that apply to various parts of a Linux system, and it
|
||||||
|
is updated regularly by the Defense Information Systems Agency (DISA). DISA is part of the
|
||||||
|
United States Department of Defense. The current version of this role follows |stig_version|
|
||||||
|
of the |benchmark_os_short| |benchmark_name|.
|
||||||
|
|
||||||
|
Controls are divided into groups based on the following properties:
|
||||||
|
|
||||||
|
Control Severities
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
:ref:`High (CAT I) <severity-high>`
|
||||||
|
These controls have a large impact on the security of a
|
||||||
|
system. They also have the largest operational impact to a system and
|
||||||
|
deployers should test them thoroughly in non-production environments.
|
||||||
|
|
||||||
|
:ref:`Medium (CAT II) <severity-medium>`
|
||||||
|
These controls are the bulk of the items in the STIG and
|
||||||
|
they have a moderate level of impact on the security of a system.
|
||||||
|
Many controls in this category will have an operational impact on
|
||||||
|
a system and should be tested thoroughly before implementation.
|
||||||
|
|
||||||
|
:ref:`Low (CAT III) <severity-low>`
|
||||||
|
These controls have a smaller impact on overall security, but they
|
||||||
|
are generally easier to implement with a much lower operational impact.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation Status
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
It is important to understand the implementation status of each control and
|
||||||
|
the potential impact each task can have on a system. Some controls are not
|
||||||
|
implemented for various technical reasons. Some are implemented but disabled
|
||||||
|
by default. And others are just peform a check and report back if manual
|
||||||
|
changes need to be made to meet the STIG control.
|
||||||
|
|
||||||
|
:ref:`Implemented <status-Implemented>`
|
||||||
|
These controls are fully implemented and they may have configurations which
|
||||||
|
can be adjusted. The notes for each control will identify which configuration
|
||||||
|
options are available.
|
||||||
|
|
||||||
|
:ref:`Complexity High <status-Complexity-High>`
|
||||||
|
These controls are deemed too complex to safely rememdiate via automated
|
||||||
|
controls. The tasks for these controls perform automated checks and will
|
||||||
|
report the result of the check in Ansible task output. The purpose of this
|
||||||
|
output is to alert deployers to items that would fail an audit against the
|
||||||
|
STIG and should be rememdiated manually. Execution and reporting from these
|
||||||
|
tasks can be enabled or disabled via the appropriate variables.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rhel7stig_complexity_high: no
|
||||||
|
rhel7stig_audit_complex: yes
|
||||||
|
|
||||||
|
:ref:`Disruption High <status-Disruption-High>`
|
||||||
|
These controls are classified as having a high likelihood of distruption on a
|
||||||
|
system and disabled by default. Automatic rememdiation can be enabled by
|
||||||
|
setting the appropriate variables, however the deployer should be aware
|
||||||
|
that they are often disabled because they could cause harm to a subset of
|
||||||
|
systems. Each control has notes that explains the caveats of the control
|
||||||
|
and how to enable it if needed.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rhel7stig_disruption_high: no
|
||||||
|
rhel7stig_audit_disruptive: yes
|
||||||
|
|
||||||
|
:ref:`Not Implemented <status-Not-Implemented>`
|
||||||
|
These are controls that have not yet been implemented. The goal of this project
|
||||||
|
is to have no controls in this status. This does not mean 100% of the controls
|
||||||
|
will be fully implemented. Just that 100% of the controls will be in one of the
|
||||||
|
above status categories. We welcome any help in getting these controls implemented.
|
||||||
|
|
||||||
|
Deployers should review the full list of controls
|
||||||
|
:ref:`sorted by implementation status <controls-by-status>`.
|
||||||
|
|
||||||
|
|
||||||
|
Control Deviation
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The role deviates from some of the STIG's requirements when a security control
|
||||||
|
could cause significant issues with production systems. Additionally specific
|
||||||
|
control settings, which are controlled by role variables, can deviate from
|
||||||
|
the mandated STIG settings. Deployers should review and update the default
|
||||||
|
configurations to meet the needs of their environment.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
All of the default configurations are found within ``defaults/main.yml``.
|
||||||
|
|
||||||
|
|
||||||
|
.. _Security Technical Implementation Guide (STIG): http://iase.disa.mil/stigs/os/unix-linux/Pages/red-hat.aspx
|
||||||
|
|
||||||
|
Controls
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
auto_controls-all.rst
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
auto_controls-by-severity.rst
|
||||||
|
auto_controls-by-status.rst
|
||||||
131
docs/source/customization.rst
Normal file
131
docs/source/customization.rst
Normal file
|
|
@ -0,0 +1,131 @@
|
||||||
|
iRole Customization
|
||||||
|
==================
|
||||||
|
|
||||||
|
This role can be fully customized to fit your specific environment. In fact
|
||||||
|
for most users it is recommended that they customize/tweak the role variables
|
||||||
|
before applying across their envirnoment.
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:local:
|
||||||
|
:backlinks: none
|
||||||
|
|
||||||
|
Tailoring
|
||||||
|
---------
|
||||||
|
|
||||||
|
It is recommended that you tailor this roles tasks for your environment by using
|
||||||
|
the comprehensive set of variables defined in ``defaults/main.yml``. There are
|
||||||
|
several ways to override default role variables in Ansible. We cover the recommended
|
||||||
|
techniques below.
|
||||||
|
|
||||||
|
Using ``group_vars``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The easiest way to tailor this role to your environment is by using ``group_vars``:
|
||||||
|
|
||||||
|
**NEED CONTENT**
|
||||||
|
|
||||||
|
*insert example for group_vars tailoring*
|
||||||
|
|
||||||
|
Variables
|
||||||
|
---------
|
||||||
|
The role has a large number of variables that allow the deployer to control the execution
|
||||||
|
of specific tasks (on/off) as well as the configuration or settings for the tasks and the
|
||||||
|
controls they implement. For example the deployer can choose to enable or disable tasks
|
||||||
|
by severity/category *cat1 | high, cat2 | medium, cat3 | low*. The deployer can also set
|
||||||
|
things like whether any *GUI* related tasks should run or tailor specific STIG settings
|
||||||
|
like the logon banner text or password complexity settings. We don't cover all the variables
|
||||||
|
in this section but we do cover some of the major ones. Generally the variables that control
|
||||||
|
specific tasks or control configurations are detailed in the
|
||||||
|
:ref:`controls documentation <stig_controls_label>`.
|
||||||
|
|
||||||
|
Enable tasks by category/severity
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
These variables allow enabling/disabling cat1, cat2, or cat3 rules in bulk. Disabling these
|
||||||
|
will take precedence over individual task variables but enabling them will not. i.e. If the
|
||||||
|
``rhel7stig_cat3_patch`` variable is set to ``no`` then all *cat3* tasks will be skipped
|
||||||
|
regardless of their :ref:`individual settings <individual_rule_vars>`. However if the *cat3*
|
||||||
|
variable is enabled individual tasks could still be skipped if their variable is disabled.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rhel7stig_cat1_patch: yes
|
||||||
|
rhel7stig_cat2_patch: yes
|
||||||
|
rhel7stig_cat3_patch: yes
|
||||||
|
|
||||||
|
Complex tasks
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
There are several variables that control the execution or behavior of tasks that the
|
||||||
|
implementers of this role have deemed to be too complex or risky to automatically
|
||||||
|
remediate. These rules have tasks that audit the system and will optionally report
|
||||||
|
``changed`` and will report back (via debug statements) if the system would fail
|
||||||
|
the check. The deployer can use this information to manually remediate the finding.
|
||||||
|
The execution and reporting behavior of these tasks is controlled by two variables:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
# Controls execution of these tasks
|
||||||
|
rhel7stig_complexity_high: no
|
||||||
|
|
||||||
|
# Controls whether the tasks reports changed or not
|
||||||
|
rhel7stig_audit_complex: yes
|
||||||
|
|
||||||
|
Disruptive tasks
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
These varaibles are similar to the *complex task* variables. They control the
|
||||||
|
execution or behavior of tasks that perform automated remediation but are shown
|
||||||
|
to be potentially disruptive to systems when used in production environments.
|
||||||
|
The risk of automated remediation of with these tasks is high.
|
||||||
|
These rules have tasks that audit the system and will optionally report
|
||||||
|
``changed`` and will report back (via debug statements) if the system would fail
|
||||||
|
the check. The deployer can use this information to manually remediate the finding.
|
||||||
|
The execution and reporting behavior of these tasks is controlled by two variables:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
# Controls execution of these tasks
|
||||||
|
rhel7stig_disruption_high: no
|
||||||
|
|
||||||
|
# Controls whether the tasks reports changed or not
|
||||||
|
rhel7stig_audit_disruptive: yes
|
||||||
|
|
||||||
|
Required system services
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
These variables allow the deployer to specify that services are required by the system
|
||||||
|
to perform its mission. Except for ``ssh``, it is important to note that having these
|
||||||
|
services installed and enabled are deviations from the STIG benchmark and should have
|
||||||
|
corresponding documentation approved by the system owner or other signing authority.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rhel7stig_ssh_required: yes
|
||||||
|
rhel7stig_vsftpd_required: no
|
||||||
|
rhel7stig_tftp_required: no
|
||||||
|
rhel7stig_autofs_required: no
|
||||||
|
rhel7stig_kdump_required: no
|
||||||
|
rhel7stig_ipsec_required: no
|
||||||
|
|
||||||
|
Graphical User Interface items
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
This variable enables or disables all tasks related to *GUI* packages. i.e. These
|
||||||
|
generally would only apply to a system with the ``GNOME`` package installed. This
|
||||||
|
is not to say that ``KDE``, ``XFCE``, or one of the many other desktop systems
|
||||||
|
would not need to have similar controls in place, but the STIG currently only
|
||||||
|
covers ``GNOME`` settings.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rhel7stig_gui: no
|
||||||
|
|
||||||
|
.. _individual_rule_vars:
|
||||||
|
|
||||||
|
Individual STIG rules
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
These variables enable or disable individual rules or more specifically tasks or
|
||||||
|
blocks of tasks that enforce individual STIG rules. Each STIG item with an ID
|
||||||
|
following the format *RHEL-07-###### (ex. RHEL-07-010010)* will have a corresponding
|
||||||
|
variable in the below format. For more information on each rule and its default state
|
||||||
|
please see the :ref:`controls documentation <stig_controls_label>`.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rhel_07_######: true
|
||||||
43
docs/source/developer-guide.rst
Normal file
43
docs/source/developer-guide.rst
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
Developer Guide
|
||||||
|
===============
|
||||||
|
|
||||||
|
Building a development environment
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
**NEED CONTENT**
|
||||||
|
|
||||||
|
*Insert dev environment setup and test running instructions.*
|
||||||
|
|
||||||
|
|
||||||
|
Writing documentation
|
||||||
|
---------------------
|
||||||
|
Documentation for individual controls is automatically generated where possible.
|
||||||
|
There is also the ability to add deployer notes for individual tasks that discuss
|
||||||
|
the specific implementation or risks with running the task/etc. Variables that
|
||||||
|
control the execution of each task are automatically pulled from the Ansible task
|
||||||
|
files themselves.
|
||||||
|
|
||||||
|
Deployer notes
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
Deployer notes are optional and can be added for each control that needs
|
||||||
|
additional data to be provided to role users. The notes are simply rST
|
||||||
|
(reStructuredText) fragments and can contain simple blocks of text or
|
||||||
|
more complex rST formatted text. The system matches deployer notes to STIG
|
||||||
|
controls based on the note filename, which should follow the format
|
||||||
|
``RHEL-07-010010.rst``.
|
||||||
|
|
||||||
|
All of the notes are found within ``doc/metadata/notes``. Here is an example:
|
||||||
|
|
||||||
|
.. literalinclude:: ../metadata/notes/example-note.rst
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
The note should be brief, but it must answer a few critical questions:
|
||||||
|
|
||||||
|
* What does the change do to a system?
|
||||||
|
* What is the value of making this change?
|
||||||
|
* How can a deployer opt out or opt in for a particular change?
|
||||||
|
* Is there additional documentation available online that may help a deployer
|
||||||
|
decide whether or not this change is valuable to them?
|
||||||
|
|
||||||
|
Run ``make html`` from the ``doc/`` directory to rebuild the documentation
|
||||||
|
and review your changes.
|
||||||
69
docs/source/faq.rst
Normal file
69
docs/source/faq.rst
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
FAQ
|
||||||
|
===
|
||||||
|
|
||||||
|
Does this role work only with |benchmark_os_short|?
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
No -- it works on multiple distributions!
|
||||||
|
|
||||||
|
The |benchmark_name| guidance is designed to ONLY be applicable to |benchmark os|
|
||||||
|
systems and if you are using this role in a regulated organization you should be aware
|
||||||
|
that applying these settings to distributions other than listed is unsupported
|
||||||
|
and may run afoul of your organization or regulatory bodies guidelines during a compliance
|
||||||
|
audit. It is on YOU to understand your organizations requirements and the laws and regulations
|
||||||
|
you must adhere to before applying this role.
|
||||||
|
|
||||||
|
See :ref:`system_applicability_ref_label` below for more details on applying this role to non-RedHat EL 7
|
||||||
|
or CentOS 7 systems.
|
||||||
|
|
||||||
|
Why should this role be applied to a system?
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
There are three main reasons to apply this role to production Linux systems:
|
||||||
|
|
||||||
|
Improve security posture
|
||||||
|
The configurations from the |benchmark_name| add security and rigor around multiple
|
||||||
|
components of a Linux system, including user authentication, service
|
||||||
|
configurations, and package management. All of these configurations add up
|
||||||
|
to an environment that is more difficult for an attacker to penetrate and use
|
||||||
|
for lateral movement.
|
||||||
|
|
||||||
|
Meet compliance requirements
|
||||||
|
Some deployers may be subject to industry compliance programs, such as
|
||||||
|
PCI-DSS, ISO 27001/27002, or NIST 800-53. Many of these programs require
|
||||||
|
hardening standards to be applied to systems.
|
||||||
|
|
||||||
|
Deployment without disruption
|
||||||
|
Security is often at odds with usability. The role provides the greatest
|
||||||
|
security benefit without disrupting production systems. Deployers have the
|
||||||
|
option to opt out or opt in for most configurations depending on how their
|
||||||
|
environments are configured.
|
||||||
|
|
||||||
|
.. _system_applicability_ref_label:
|
||||||
|
|
||||||
|
Which systems are covered?
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
This role and the |benchmark_name| guidance it implements are fully applicable to servers
|
||||||
|
(physical or virtual) and containers running the following Linux distributions:
|
||||||
|
|
||||||
|
* |benchmark_os|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
The role is tested against each distribution to ensure that tasks run properly.
|
||||||
|
it is idempotent, and an Audit is used to run a compliance scan after the role
|
||||||
|
is applied to test compliance with the STIG standard.
|
||||||
|
|
||||||
|
Which systems are not covered?
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
This role will run properly against a container (docker or other), however
|
||||||
|
this is not recommended and is only really useful during the development and
|
||||||
|
testing of this role (ie most CI systems provide containers and not full VMs),
|
||||||
|
so this role must be able to run on and test against containers.
|
||||||
|
|
||||||
|
Again for those in the back...applying this role against a container
|
||||||
|
in order to secure it is generally a *BAD* idea. You should be applying this
|
||||||
|
role to your container hosts and then using other hardening guidance that is
|
||||||
|
specific to the container technology you are using (docker, lxc, lxd, etc)
|
||||||
102
docs/source/getting-started.rst
Normal file
102
docs/source/getting-started.rst
Normal file
|
|
@ -0,0 +1,102 @@
|
||||||
|
Getting started
|
||||||
|
===============
|
||||||
|
|
||||||
|
This role is part of the `Ansible Lockdown`_ project and can be used as a
|
||||||
|
standalone role or it can be used along with other Ansible roles and playbooks.
|
||||||
|
|
||||||
|
.. _Ansible Lockdown: https://github.com/ansible-lockdown
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:local:
|
||||||
|
:backlinks: none
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
This documentation assumes that the reader has completed the steps within the
|
||||||
|
`Ansible installation guide <http://docs.ansible.com/ansible/intro_installation.html>`_.
|
||||||
|
and has a good understanding of using ansible
|
||||||
|
`Ansible User Guide <https://docs.ansible.com/ansible/latest/user_guide/index.html>`_.
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
The recommended installation methods for this role are
|
||||||
|
``ansible-galaxy`` (recommended) or ``git``.
|
||||||
|
|
||||||
|
Using ``ansible-galaxy``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The easiest installation method is to use the ``ansible-galaxy`` command that
|
||||||
|
is provided with your Ansible installation:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
ansible-galaxy install git+|lockdown_url|
|
||||||
|
|
||||||
|
The ``ansible-galaxy`` command will install the role into
|
||||||
|
``/etc/ansible/roles/`` and this makes it easy to use with
|
||||||
|
Ansible playbooks.
|
||||||
|
|
||||||
|
Using ``git``
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Start by cloning the role into a directory of your choice:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
mkdir -p ~/.ansible/roles/
|
||||||
|
git clone |lockdown_url| ~/.ansible/roles/|benchmark_os_short|-|benchmark_name|
|
||||||
|
|
||||||
|
|
||||||
|
Ansible looks for roles in ``~/.ansible/roles`` by default.
|
||||||
|
|
||||||
|
If the role is cloned into a different directory, that directory must be
|
||||||
|
provided with the ``roles_path`` option in ``ansible.cfg``. The following is
|
||||||
|
an example of a ``ansible.cfg`` file that uses a custom path for roles:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[DEFAULTS]
|
||||||
|
roles_path = /etc/ansible/roles:/home/myuser/custom/roles
|
||||||
|
|
||||||
|
With this configuration, Ansible looks for roles in ``/etc/ansible/roles`` and
|
||||||
|
``~/custom/roles``.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
This role works well with existing playbooks. The following is an
|
||||||
|
example of a basic playbook that uses this role:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
- hosts: servers
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- role: |benchmark_os_short|-|benchmark_name|
|
||||||
|
when:
|
||||||
|
- ansible_os_family == 'RedHat'
|
||||||
|
- ansible_distribution_major_version | version_compare('7', '=')
|
||||||
|
|
||||||
|
The role is fully customizable by setting the variables provided in the ``defaults/main.yml``.
|
||||||
|
These variables are designed so that categories/severities or individual rules can be enabled,
|
||||||
|
disabled, or can alter configuration for various items in the role. For more details
|
||||||
|
on the available variables, refer to the :ref:`controls_label`
|
||||||
|
section.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
The role requires elevated privileges and must be run as a user with ``sudo``
|
||||||
|
access. The example above uses the ``become`` option, which causes Ansible to use
|
||||||
|
sudo before running tasks.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
It is strongly recommended to run the role in check mode (often called a
|
||||||
|
`dry run`) first before making any modifications. This gives the deployer
|
||||||
|
the opportunity to review all of the proposed changes before applying the
|
||||||
|
role to the system. Use the ``--check`` parameter with ``ansible-playbook``
|
||||||
|
to use check mode.
|
||||||
70
docs/source/index.rst
Normal file
70
docs/source/index.rst
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
=========================================================
|
||||||
|
Automated security hardening for Linux hosts with Ansible
|
||||||
|
=========================================================
|
||||||
|
|
||||||
|
.. image:: https://secure.travis-ci.org/MindPointGroup/RHEL7-STIG.svg?branch=devel
|
||||||
|
:alt: Build Status Badge
|
||||||
|
:target: https://travis-ci.org/MindPointGroup/RHEL7-STIG
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<p><iframe src="https://ghbtns.com/github-btn.html?user=MindPointGroup&repo=RHEL7-STIG&type=watch&count=true&size=large&v=2"
|
||||||
|
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe></p>
|
||||||
|
|
||||||
|
What does the role do?
|
||||||
|
----------------------
|
||||||
|
This role uses the |benchmark_name| `Security Technical Implementation Guide (STIG)`_ guidance
|
||||||
|
from the `Defense Information Systems Agency (DISA)`_. The STIG is released with a
|
||||||
|
public domain license and it is commonly used to secure systems at public and private
|
||||||
|
organizations around the world.
|
||||||
|
|
||||||
|
We analyze each configuration hardening item from the applicable STIG benchmark
|
||||||
|
to determine what impact it has on a live production environment and how to
|
||||||
|
best implement it using Ansible. Tasks are added to the role that configure a host
|
||||||
|
to meet the configuration requirements. Each task is documented to explain what was
|
||||||
|
changed, why it was changed, and what deployers need to understand about the change.
|
||||||
|
|
||||||
|
Deployers have the option to enable/disable STIG items that do not suit their environments
|
||||||
|
needs. Each STIG item has an associated variable that can be used to switch it on or off.
|
||||||
|
Additionally, the items that have configurable values, i.e. number of password attempts, will
|
||||||
|
generally have a corresponding variable that allows for customization of the applied value.
|
||||||
|
It is imperative for each deployer to understand the regulations and compliance requirements
|
||||||
|
that their organization and specific environments are responsible for meeting in order to
|
||||||
|
effeectively implement the controls in the |benchmark_name_short| STIG.
|
||||||
|
|
||||||
|
.. _Security Technical Implementation Guide (STIG): http://iase.disa.mil/stigs/os/unix-linux/Pages/red-hat.aspx
|
||||||
|
.. _Defense Information Systems Agency (DISA): http://www.disa.mil/
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following documentation applies to the devel branch and is currently under
|
||||||
|
active development. Documentation for the latest stable and previous stable
|
||||||
|
releases will be generated and available once the first stable release is cut.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
getting-started.rst
|
||||||
|
customization.rst
|
||||||
|
controls.rst
|
||||||
|
controls-contrib.rst
|
||||||
|
developer-guide.rst
|
||||||
|
faq.rst
|
||||||
|
|
||||||
|
Releases
|
||||||
|
--------
|
||||||
|
|
||||||
|
devel
|
||||||
|
~~~~~~
|
||||||
|
|
||||||
|
* **Status:** Active development
|
||||||
|
|
||||||
|
* **STIG Version:**
|
||||||
|
|benchmark_name_short| |stig_version| *(Published on* |stig_release_date| *)*
|
||||||
|
|
||||||
|
* **Supported Operating Systems:**
|
||||||
|
|
||||||
|
* Red Hat Enterprise Linux 7
|
||||||
|
* CentOS 7
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue