
Este módulo puppet fornece inúmeras configurações relacionadas à segurança, oferecendo proteção base abrangente.
Este módulo Puppet fornece uma configuração segura do seu SO base com endurecimento e faz parte do DevSec Hardening Framework.
Após adicionar este módulo, você pode usar a classe:
class { 'os_hardening': }
Todos os parâmetros estão contidos na classe principal os_hardening, então você só precisa passá-los assim:
class { 'os_hardening':
enable_ipv4_forwarding => true,
}
Se você estiver usando este módulo em um ambiente PE, você deve definir pe_environment = true
Caso contrário, o puppet exibirá um erro (recurso duplicado)!
system_environment = 'default'
define o contexto no qual o sistema opera. Algumas opções não funcionam para docker/lxcpe_environment = false
defina como true se você estiver usando Puppet Enterprise IMPORTANTE - veja acimaextra_user_paths = []
adiciona caminhos adicionais à variável PATH do usuário (o padrão é vazio).umask = undef
umask usado para a criação de novos diretórios home por useradd / newusers (ex.: '027')maildir = undef
caminho para maildir (ex.: '/var/mail')usergroups = true
true se você quiser grupos separados para cada usuário, false caso contráriosys_uid_min = undef e sys_gid_min = undef
substitui a configuração padrão de login.defspassword_max_age = 60
idade máxima da senhapassword_min_age = 7
idade mínima da senha (antes de permitir qualquer outra alteração de senha)password_warn_age = 7
dias de aviso antes do vencimento da alteração de senhalogin_retries = 5
o número máximo de tentativas de login se a senha estiver incorreta (normalmente substituído por PAM / auth_retries)login_timeout = 60
tempo limite de autenticação em segundos, então o login será encerrado se esse tempo passarchfn_restrict = ''
quais campos podem ser alterados por usuários comuns usando chfnallow_login_without_home = false
true para permitir que usuários sem home façam loginallow_change_user = false
se um usuário pode usar su para alterar seu loginignore_users = []
array de contas de usuários do sistema que não devem ser endurecidas (senha desabilitada e shell definido para /usr/sbin/nologin)folders_to_restrict = ['/usr/local/games','/usr/local/sbin','/usr/local/bin','/usr/bin','/usr/sbin','/sbin','/bin']
pastas para garantir que grupo e outros não tenham acesso de escrita a elas ou a qualquer um de seus conteúdosignore_max_files_warnings = false
true se você não quiser que o puppet registre avisos de max_files e desempenho na recursão de pastas com > 1000 arquivos, ex.: /bin /usr/binrecurselimit = 5
profundidade do diretório para verificação recursiva de permissõespasswdqc_enabled = true
true se você quiser usar verificação forte de senha no PAM usando passwdqcauth_retries = 5
o número máximo de tentativas de autenticação, antes que a conta seja bloqueada por algum tempoauth_lockout_time = 600
tempo em segundos que precisa passar, se a conta foi bloqueada devido a muitas tentativas de autenticação falhaspasswdqc_options = 'min=disabled,disabled,16,12,8'
defina para qualquer linha de opção (como uma string) que você queira passar para passwdqcmanage_pam_unix = false
true se você quiser que o pam_unix seja gerenciado por este móduloenable_pw_history = true
true se você quiser que o pam_unix lembre o histórico de senhas para evitar a reutilização de senhas (requer manage_pam_unix = true)pw_remember_last = 5
o número das últimas senhas (ex.: 5 impedirá que o usuário reutilize qualquer uma de suas últimas 5 senhas)only_root_may_su = false
true quando apenas root e membros do grupo wheel podem usar su, necessário ser true para conformidade com o CIS Benchmarkroot_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6']
TTYs registrados para rootwhitelist = []
todos os arquivos que devem manter seus bits SUID/SGID se definidos (serão combinados com a lista de permissões pré-definida de arquivos)blacklist = []
todos os arquivos que devem ter seus bits SUID/SGID removidos se definidos (serão combinados com a lista de bloqueio pré-definida de arquivos)remove_from_unknown = false
true se você quiser remover bits SUID/SGID de qualquer arquivo que não esteja explicitamente configurado em uma blacklist. Isso fará com que cada execução do Puppet procure nos sistemas de arquivos montados por bits SUID/SGID que não estejam configurados na lista de bloqueio padrão e do usuário. Se encontrar um bit SUID/SGID, ele será removido, a menos que este arquivo esteja na sua whitelist.dry_run_on_unknown = false
como remove_from_unknown acima, apenas que os bits SUID/SGID não são removidos. Ainda procurará nos sistemas de arquivos por bits SUID/SGID, mas apenas os imprimirá no seu log. Esta opção só é recomendada quando você configura remove_from_unknown pela primeira vez para bits SUID/SGID, para que possa ver os arquivos que estão sendo alterados e fazer ajustes na sua whitelist e blacklist.enable_module_loading = true
true se você quiser permitir alterar módulos do kernel enquanto o sistema está em execução (ex.: modprobe, rmmod)load_modules = []
carrega estes módulos via initramfs se enable_module_loading for falsedisable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf']
array de sistemas de arquivos (módulos do kernel) que devem ser desabilitadoscpu_vendor = 'intel'
apenas necessário se enable_module_loading = false: define o fabricante da CPU para os módulos a carregaricmp_ratelimit = '100'
valor padrão '100', permite sobrescrever, precisa ser Stringdesktop_enabled = false
true se este é um sistema desktop, ex.: Xorg, KDE/GNOME/Unity/etcenable_ipv4_forwarding = false
true se este sistema requer encaminhamento de pacotes em IPv4 (ex.: Roteador), false caso contráriomanage_ipv6 = true
true para endurecer a configuração do ipv6, false para ignorar o ipv6 completamenteenable_ipv6 = false
false para desabilitar o ipv6 neste sistema, true para habilitarenable_ipv6_forwarding = false
true se este sistema requer encaminhamento de pacotes em IPv6 (ex.: Roteador), false caso contrárioarp_restricted = true
true se você quiser que o comportamento de anunciar e responder ao ARP seja restrito, false caso contrárioarp_ignore_samenet = false
true descartará pacotes que não são da mesma sub-rede (arp_ignore = 2), false apenas verificará o IP de destino (arp_ignore = 1)enable_sysrq = false
true para habilitar a tecla mágica sysrq, false caso contrárioenable_core_dump = false
false para impedir a criação de core dumps, true caso contrárioenable_stack_protection = true
para Randomização do Layout do Espaço de Endereço. A ASLR pode ajudar a derrotar certos tipos de ataques de estouro de buffer. A ASLR pode localizar a base, bibliotecas, heap e pilha em posições aleatórias no espaço de endereço de um processo, o que dificulta que um programa atacante preveja o endereço de memória da próxima instrução.enable_rpfilter = true
true para habilitar a filtragem de caminho reverso (descartar pacotes falsos), false caso contráriorpfilter_loose = false
(apenas se enable_rpfilter for true) modo flexível (rp_filter = 2) se true, modo estrito caso contrárioenable_log_martians = true
true para habilitar o registro de pacotes de rede suspeitos / sem rota, false caso contrário AVISO - isso pode gerar arquivos de log enormes!unwanted_packages = []
pacotes que devem ser removidos do sistemawanted_packages = []
pacotes que devem ser adicionados ao sistemadisabled_services = []
serviços que não devem ser habilitadosenable_grub_hardening = false
defina como true para habilitar algumas regras de endurecimento do grubgrub_user = 'root'
o nome de usuário do grub que precisa ser fornecido ao alterar a configuração no prompt do grubgrub_password_hash = ''
um hash de senha criado com grub-mkpasswd-pbkdf2 que está associado ao grub_userboot_without_password = true
configura o Grub para que exija senha apenas ao alterar uma entrada, não ao inicializar uma entrada existentesystem_umask = undef
se esta variável for definida, configura o umask para todos os usuários do sistema (ex.: '027')manage_home_permissions = false
defina como true para gerenciar permissões de arquivos e diretórios de usuários locais (g-w,o-rwx)ignore_home_users = []
array para usuários que não devem ser restringidos por manage_home_permissionsmanage_log_permissions = false
defina como true para gerenciar permissões de arquivos de log (g-wx,o-rwx)restrict_log_dir = ['/var/log/']
define o diretório principal de logsignore_restrict_log_dir = []
array para excluir diretórios de log sob o diretório principal de logsignore_files_in_folder_to_restrict = []
array para ignorar arquivos a serem endurecidos em diretórios sob o array folder_to_restrictmanage_cron_permissions = false
defina como true para gerenciar permissões de arquivos cron (og-rwx)enable_sysctl_config = true
defina como false para desabilitar a configuração do sysctlmanage_system_users = true
defina como false para desabilitar o gerenciamento de usuários do sistema (senha vazia e definição do shell nologin)shadow_group = undef
substitui a propriedade de grupo de /etc/shadowshadow_mode = undef
substitui as permissões de arquivo de /etc/shadowTambém é possível definir os parâmetros no Hiera assim:
os_hardening::password_max_age: 90
os_hardening::password_min_age: 0
os_hardening::password_warn_age: 14
os_hardening::unwanted_packages: ['telnet']
os_hardening::ignore_users: ['git','githook','ansible','apache','puppetboard']
Como o CIS Distribution Independent Linux Benchmark é um bom ponto de partida em relação ao endurecimento de sistemas, considerou-se apropriado implementar uma maneira fácil de lidar com casos pontuais para os quais não se deseja escrever um módulo inteiro.
Por exemplo, para aumentar a conformidade com o CIS DIL em um sistema Debian, deve-se definir o seguinte:
wanted_packages => ['ntp'],
unwanted_packages => ['telnet'],
disabled_services => ['rsync'],
As configurações padrão do NTP são na verdade bastante boas para a maioria das situações, então não é imediatamente necessário implementar um módulo. No entanto, se você usar um módulo para controlar esses serviços, isso é obviamente preferível.
Este módulo foi testado e deve funcionar na maioria das distribuições Linux. Para uma lista extensa de sistemas operacionais suportados, consulte metadata.json
Se você quiser contribuir, siga nosso guia de contribuição.
Você deve ter o interpretador Ruby instalado no seu sistema. Pode ser uma boa ideia usar rvm para esse propósito. Além disso, você precisa instalar o Puppet Development Kit PDK e o Docker Community Edition, pois os testes de integração são executados em contêineres Docker.
Para todos os nossos testes de integração usamos test-kitchen. Se você não está familiarizado com test-kitchen, consulte o guia deles.
# Testes de sintaxe e lint
pdk validate
# Testes de unidade
pdk test unit
Por padrão, os testes de integração serão executados em contêineres docker - infelizmente nem todos os testes podem ser executados em ambientes de contêiner (ex.: configurações do sysctl).
# Instalar dependências
gem install bundler
bundle install
# listar todas as instâncias de teste
bundle exec kitchen list
# teste rápido em uma máquina
bundle exec kitchen test ubuntu-16-04-puppet5
# teste em todas as máquinas
bundle exec kitchen test
Para testes de integração completos com DigitalOcean, você precisa ter uma conta lá e configurar algumas variáveis de ambiente:
KITCHEN_LOCAL_YAML=kitchen.do.ymlDIGITALOCEAN_ACCESS_TOKEN - token de acesso para DigitalOceanDIGITALOCEAN_SSH_KEY_IDS - ID no DigitalOcean da sua chave ssh, veja isto para mais informaçõesA chave ssh deve ser nomeada ~/.ssh/do_ci e adicionada ao seu perfil no DigitalOcean.
Depois disso, você está pronto para executar os testes conforme descrito em Testes de Integração (Docker).
Se você quiser executar os testes de integração completos com Github Actions no seu fork, você precisará adicionar estas variáveis de ambiente nas configurações do seu fork:
KITCHEN_LOCAL_YAML=kitchen.do.ymlDIGITALOCEAN_ACCESS_TOKEN - token de acesso para DigitalOceanCI_SSH_KEY - parte privada de uma chave ssh, disponível no DigitalOcean para suas instâncias, em formato codificado em base64 (ex.: cat id_rsa | base64 -w0 ; echo)DIGITALOCEAN_SSH_KEY_IDS - ID no DigitalOcean de CI_SSH_KEY, veja isto para mais informaçõesSeus patches serão automaticamente testados via Github Actions. O resumo do teste é visível no Github no seu PR, detalhes podem ser encontrados nos testes vinculados.
Você pode nos alcançar de várias maneiras:
Para a portabilidade original de chef-os-hardening para puppet:
Muito obrigado a todos!!
Licenciado sob a Apache License, Versão 2.0 (a "Licença"); você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
Salvo quando exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído em uma base "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para os idiomas específicos que regem as permissões e limitações sob a Licença.