Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
puppet-os-hardening — 이 puppet 모듈은 다양한 보안 관련 구성을 제공하여 전방위적인 기본 보호를 제공합니다. | Kitploit
도구/GitHubGitHub/dev-sec/puppet-os-hardening
Cloud Infrastructure SecurityVulnerability ScannersConfiguration AuditingNetwork SecurityDevSecOpsAuthentication
GitHubdev-sec/puppet-os-hardening

puppet-os-hardening

이 puppet 모듈은 다양한 보안 관련 구성을 제공하여 전방위적인 기본 보호를 제공합니다.

저장소 보기
291100141개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

Puppet OS 하드닝

Puppet Forge Version Puppet Forge Downloads Puppet Forge Endorsement Build Status

목차

  1. 모듈 설명 - 모듈이 무엇을 하는지 그리고 왜 유용한지
  2. 설정 - os_hardening 시작하기
    • 설정 요구사항
    • os_hardening 시작하기
  3. 사용법 - 구성 옵션 및 추가 기능
    • Puppet Enterprise에 대한 중요 사항
    • 매개변수
    • Hiera 사용법
    • 원하는/원하지 않는 패키지 및 비활성화된 서비스에 대한 참고 사항
  4. 제한 사항 - OS 호환성 등
  5. 개발 - 모듈 기여 가이드
  6. 테스트 - 코드 변경에 대한 품질 게이트
    • 로컬 테스트
    • PDK 테스트
    • 통합 테스트 (Docker)
    • 통합 테스트 (DigitalOcean)
    • PR 및 포크의 CI 테스트
  7. 연락하기
  8. 기여자 + 감사
  9. 라이선스 및 작성자

모듈 설명

이 Puppet 모듈은 하드닝을 통해 기본 OS의 보안 구성을 제공하며 DevSec 하드닝 프레임워크의 일부입니다.

설정

설정 요구사항

  • Puppet OpenSource 또는 Enterprise
  • 모듈 stdlib
  • 모듈 sysctl

os_hardening 시작하기

이 모듈을 추가한 후 다음 클래스를 사용할 수 있습니다:

root@kitploit:~
class { 'os_hardening': }

모든 매개변수는 기본 os_hardening 클래스에 포함되어 있으므로 다음과 같이 전달하기만 하면 됩니다:

root@kitploit:~
class { 'os_hardening':
  enable_ipv4_forwarding => true,
}

사용법

Puppet Enterprise에 대한 중요 사항

PE 환경에서 이 모듈을 사용하는 경우 pe_environment = true로 설정해야 합니다. 그렇지 않으면 Puppet이 오류(중복 리소스)를 발생시킵니다!

매개변수

  • system_environment = 'default' 시스템이 실행되는 컨텍스트를 정의합니다. 일부 옵션은 docker/lxc에서 작동하지 않습니다.
  • pe_environment = false Puppet Enterprise를 사용하는 경우 true로 설정하세요. 중요 - 위 참조
  • extra_user_paths = [] 사용자의 PATH 변수에 추가 경로를 추가합니다 (기본값은 비어 있음).
  • umask = undef useradd / newusers가 새 홈 디렉토리를 생성할 때 사용하는 umask (예: '027')
  • maildir = undef maildir 경로 (예: '/var/mail')
  • usergroups = true 각 사용자에 대해 별도의 그룹을 원하면 true, 그렇지 않으면 false
  • sys_uid_min = undef 및 sys_gid_min = undef login.defs의 기본 설정을 재정의합니다.
  • password_max_age = 60 최대 비밀번호 사용 기간

Hiera 사용법

Hiera에서 매개변수를 설정하는 것도 가능합니다:

root@kitploit:~
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']

원하는/원하지 않는 패키지 및 비활성화된 서비스에 대한 참고 사항

CIS 배포판 독립 Linux 벤치마크가 시스템 하드닝에 관한 좋은 출발점이므로 전체 모듈을 작성하고 싶지 않은 일회성 처리를 위한 쉬운 방법을 구현하는 것이 적절하다고 판단되었습니다.

예를 들어, Debian 시스템에서 CIS DIL 준수를 높이려면 다음을 설정해야 합니다:

root@kitploit:~
wanted_packages   => ['ntp'],
unwanted_packages => ['telnet'],
disabled_services => ['rsync'],

NTP의 기본 설정은 대부분의 상황에서 실제로 꽤 좋으므로 모듈을 즉시 구현할 필요는 없습니다. 그러나 이러한 서비스를 제어하기 위해 모듈을 사용한다면 물론 더 선호됩니다.

제한 사항

이 모듈은 테스트되었으며 대부분의 Linux 배포판에서 실행되어야 합니다. 지원되는 운영 체제의 전체 목록은 metadata.json을 참조하세요.

개발

기여하려면 기여 가이드를 따라주세요.

테스트

로컬 테스트

시스템에 Ruby 인터프리터가 설치되어 있어야 합니다. 이를 위해 rvm을 사용하는 것이 좋을 수 있습니다. 그 외에도 통합 테스트가 Docker 컨테이너에서 실행되므로 Puppet Development Kit PDK와 Docker Community Edition을 설치해야 합니다.

모든 통합 테스트에는 test-kitchen을 사용합니다. test-kitchen에 익숙하지 않다면 가이드를 참조하세요.

PDK 테스트

root@kitploit:~
# 구문 및 린트 테스트
pdk validate

# 단위 테스트
pdk test unit

통합 테스트 (Docker)

기본적으로 통합 테스트는 Docker 컨테이너에서 실행됩니다 - 불행히도 모든 테스트가 컨테이너 환경에서 실행될 수 있는 것은 아닙니다 (예: sysctl 설정).

root@kitploit:~
# 의존성 설치
gem install bundler
bundle install

# 모든 테스트 인스턴스 나열
bundle exec kitchen list

# 한 머신에서 빠른 테스트
bundle exec kitchen test ubuntu-16-04-puppet5

# 모든 머신에서 테스트
bundle exec kitchen test

통합 테스트 (DigitalOcean)

DigitalOcean에서 완전한 통합 테스트를 수행하려면 계정을 만들고 일부 환경 변수를 설정해야 합니다:

  • KITCHEN_LOCAL_YAML=kitchen.do.yml
  • DIGITALOCEAN_ACCESS_TOKEN - DigitalOcean 액세스 토큰
  • DIGITALOCEAN_SSH_KEY_IDS - ssh 키의 DigitalOcean ID, 자세한 내용은 이 문서 참조

ssh 키는 ~/.ssh/do_ci로 이름을 지정하고 DigitalOcean의 프로필에 추가해야 합니다. 이후 통합 테스트 (Docker)에 설명된 대로 테스트를 실행할 준비가 됩니다.

포크에서 Github Actions로 전체 통합 테스트를 실행하려면 포크 설정에 다음 환경 변수를 추가해야 합니다:

  • KITCHEN_LOCAL_YAML=kitchen.do.yml
  • DIGITALOCEAN_ACCESS_TOKEN - DigitalOcean 액세스 토큰
  • CI_SSH_KEY - 인스턴스에 대해 DigitalOcean에서 사용 가능한 ssh 키의 개인 키 부분, base64 인코딩 형식 (예: cat id_rsa | base64 -w0 ; echo)
  • DIGITALOCEAN_SSH_KEY_IDS - CI_SSH_KEY의 DigitalOcean ID, 자세한 내용은 이 문서 참조

PR 및 포크의 CI 테스트

패치는 Github Actions를 통해 자동으로 테스트됩니다. 테스트 요약은 Github의 PR에서 볼 수 있으며, 세부 정보는 연결된 테스트에서 확인할 수 있습니다.

연락하기

여러 가지 방법으로 연락할 수 있습니다:

  • Twitter의 @DevSecIO
  • 질문 및 일반 토론을 위한 메일링 리스트: [email protected] [구독]
  • 릴리스 공지용 메일링 리스트 (게시 불가): [email protected] [구독]

기여자 + 감사

  • Dominik Richter arlimus
  • Edmund Haselwanter ehaselwanter
  • Christoph Hartmann chris-rock
  • Thomas Dütsch a-tom
  • Patrick Meier atomic111
  • Artem Sidorenko artem-sidorenko
  • Kurt Huwig kurthuwig
  • Matthew Haughton 3flex
  • Reik Keutterling spielkind
  • Daniel Dreier danieldreier
  • Timo Goebel timogoebel
  • Tristan Helmich fadenb
  • Michael Geiger mcgege
  • Timo Bergemann LooOOooM

chef-os-hardening의 puppet 포팅 원본:

  • Artem Sidorenko artem-sidorenko
  • Frank Kloeker eumel8

모두 감사합니다!!

라이선스 및 작성자

  • 작성자:: Dominik Richter [email protected]
  • 작성자:: Deutsche Telekom AG

Apache License, Version 2.0 (the "License")에 따라 라이선스가 부여됩니다. 이 파일은 라이선스를 준수하지 않는 한 사용할 수 없습니다. 라이선스 사본은 다음에서 얻을 수 있습니다.

root@kitploit:~
  http://www.apache.org/licenses/LICENSE-2.0

해당 법률에 의해 요구되거나 서면으로 동의하지 않는 한, 이 라이선스에 따라 배포되는 소프트웨어는 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건 없이 "AS IS" 기준으로 배포됩니다. 라이선스에 따른 권한 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하세요.

도구 다운로드
  • password_min_age = 7 최소 비밀번호 사용 기간 (다른 비밀번호 변경을 허용하기 전)
  • password_warn_age = 7 비밀번호 변경 예정일 전 경고 일수
  • login_retries = 5 비밀번호가 잘못된 경우 최대 로그인 재시도 횟수 (일반적으로 PAM / auth_retries로 재정의됨)
  • login_timeout = 60 인증 제한 시간(초). 이 시간이 지나면 로그인이 종료됩니다.
  • chfn_restrict = '' 일반 사용자가 chfn을 사용하여 변경할 수 있는 필드
  • allow_login_without_home = false 홈 디렉토리가 없는 사용자의 로그인을 허용하려면 true
  • allow_change_user = false 사용자가 su를 사용하여 로그인을 변경할 수 있는지 여부
  • ignore_users = [] 하드닝되지 않아야 하는 시스템 사용자 계정 배열 (비밀번호 비활성화 및 셸을 /usr/sbin/nologin으로 설정)
  • folders_to_restrict = ['/usr/local/games','/usr/local/sbin','/usr/local/bin','/usr/bin','/usr/sbin','/sbin','/bin'] 그룹 및 기타 사용자가 해당 폴더 또는 내용에 쓰기 권한이 없도록 해야 하는 폴더
  • ignore_max_files_warnings = false /bin, /usr/bin 등 1000개 이상의 파일이 있는 폴더를 재귀적으로 검사할 때 puppet이 max_files 및 성능 경고를 기록하지 않도록 하려면 true
  • recurselimit = 5 재귀적 권한 검사를 위한 디렉토리 깊이
  • passwdqc_enabled = true PAM에서 passwdqc를 사용하여 강력한 비밀번호 검사를 사용하려면 true
  • auth_retries = 5 계정이 일정 시간 동안 잠기기 전 최대 인증 시도 횟수
  • auth_lockout_time = 600 너무 많은 실패한 인증 시도로 계정이 잠긴 경우 경과해야 하는 시간(초)
  • passwdqc_options = 'min=disabled,disabled,16,12,8' passwdqc에 전달하려는 옵션 라인(문자열)으로 설정
  • manage_pam_unix = false 이 모듈이 pam_unix를 관리하도록 하려면 true
  • enable_pw_history = true pam_unix가 비밀번호 재사용을 방지하기 위해 비밀번호 기록을 기억하도록 하려면 true (manage_pam_unix = true 필요)
  • pw_remember_last = 5 기억할 최근 비밀번호 수 (예: 5는 사용자가 최근 5개의 비밀번호를 재사용하지 못하게 함)
  • only_root_may_su = false root와 wheel 그룹의 구성원만 su를 사용할 수 있도록 하려면 true, CIS 벤치마크 준수를 위해 true가 필요합니다.
  • root_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6'] root에 등록된 TTY
  • whitelist = [] 설정된 경우 SUID/SGID 비트를 유지해야 하는 모든 파일 (사전 정의된 파일 화이트리스트와 결합됨)
  • blacklist = [] 설정된 경우 SUID/SGID 비트를 제거해야 하는 모든 파일 (사전 정의된 파일 블랙리스트와 결합됨)
  • remove_from_unknown = false blacklist에 명시적으로 구성되지 않은 파일에서 SUID/SGID 비트를 제거하려면 true. 이렇게 하면 모든 Puppet 실행이 마운트된 파일시스템을 검색하여 기본 및 사용자 블랙리스트에 구성되지 않은 SUID/SGID 비트를 찾습니다. SUID/SGID 비트를 찾으면 whitelist에 없는 한 제거됩니다.
  • dry_run_on_unknown = false 위의 remove_from_unknown과 유사하지만 SUID/SGID 비트가 제거되지 않습니다. 여전히 파일시스템을 검색하여 SUID/SGID 비트를 찾지만 로그에만 출력합니다. 이 옵션은 SUID/SGID 비트에 대해 remove_from_unknown을 처음 구성할 때만 권장됩니다. 변경되는 파일을 확인하고 whitelist 및 blacklist를 조정할 수 있기 때문입니다.
  • enable_module_loading = true 시스템이 실행 중일 때 커널 모듈 변경(예: modprobe, rmmod)을 허용하려면 true
  • load_modules = [] enable_module_loading이 false인 경우 initramfs를 통해 이 모듈을 로드합니다.
  • disable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf'] 비활성화해야 하는 파일시스템(커널 모듈) 배열
  • cpu_vendor = 'intel' enable_module_loading = false인 경우에만 필요: 로드할 모듈의 CPU 공급업체 설정
  • icmp_ratelimit = '100' 기본값 '100', 재정의 허용, String 필요
  • desktop_enabled = false Xorg, KDE/GNOME/Unity 등 데스크톱 시스템인 경우 true
  • enable_ipv4_forwarding = false 이 시스템이 IPv4에서 패킷 전달을 요구하는 경우 true (예: 라우터), 그렇지 않으면 false
  • manage_ipv6 = true ipv6 설정을 하드닝하려면 true, ipv6를 완전히 무시하려면 false
  • enable_ipv6 = false 이 시스템에서 ipv6를 비활성화하려면 false, 활성화하려면 true
  • enable_ipv6_forwarding = false 이 시스템이 IPv6에서 패킷 전달을 요구하는 경우 true (예: 라우터), 그렇지 않으면 false
  • arp_restricted = true ARP 알림 및 응답 동작을 제한하려면 true, 그렇지 않으면 false
  • arp_ignore_samenet = false true는 동일한 서브넷에서 오지 않은 패킷을 버립니다 (arp_ignore = 2), false는 대상 IP만 확인합니다 (arp_ignore = 1)
  • enable_sysrq = false 매직 sysrq 키를 활성화하려면 true, 그렇지 않으면 false
  • enable_core_dump = false 코어 덤프 생성을 방지하려면 false, 그렇지 않으면 true
  • enable_stack_protection = true 주소 공간 레이아웃 무작위화(ASLR)용. ASLR은 특정 유형의 버퍼 오버플로 공격을 방어하는 데 도움이 될 수 있습니다. ASLR은 프로세스의 주소 공간에서 베이스, 라이브러리, 힙 및 스택을 무작위 위치에 배치하여 공격 프로그램이 다음 명령의 메모리 주소를 예측하기 어렵게 만듭니다.
  • enable_rpfilter = true 역방향 경로 필터링을 활성화하려면 true (가짜 패킷 폐기), 그렇지 않으면 false
  • rpfilter_loose = false (enable_rpfilter가 true인 경우에만) true이면 느슨한 모드 (rp_filter = 2), 그렇지 않으면 엄격한 모드
  • enable_log_martians = true 의심스러운 / 라우팅 불가능한 네트워크 패킷에 대한 로깅을 활성화하려면 true, 그렇지 않으면 false 경고 - 이로 인해 대용량 로그 파일이 생성될 수 있습니다!
  • unwanted_packages = [] 시스템에서 제거해야 하는 패키지
  • wanted_packages = [] 시스템에 추가해야 하는 패키지
  • disabled_services = [] 활성화되지 않아야 하는 서비스
  • enable_grub_hardening = false 일부 grub 하드닝 규칙을 활성화하려면 true로 설정
  • grub_user = 'root' grub 프롬프트에서 구성을 변경할 때 제공해야 하는 grub 사용자 이름
  • grub_password_hash = '' grub-mkpasswd-pbkdf2로 생성된 grub_user와 연결된 비밀번호 해시
  • boot_without_password = true 기존 항목을 부팅할 때가 아닌 항목을 변경할 때만 비밀번호를 요구하도록 Grub 설정
  • system_umask = undef 이 변수가 설정된 경우 시스템의 모든 사용자에 대한 umask를 설정합니다 (예: '027')
  • manage_home_permissions = false 로컬 사용자 파일 및 디렉토리 권한을 관리하려면 true로 설정 (g-w,o-rwx)
  • ignore_home_users = [] manage_home_permissions에 의해 제한되지 않아야 하는 사용자 배열
  • manage_log_permissions = false 로그 파일 권한을 관리하려면 true로 설정 (g-wx,o-rwx)
  • restrict_log_dir = ['/var/log/'] 기본 로그 디렉토리 설정
  • ignore_restrict_log_dir = [] 기본 로그 디렉토리 아래에서 제외할 로그 디렉토리 배열
  • ignore_files_in_folder_to_restrict = [] folder_to_restrict 배열 아래의 디렉토리에서 하드닝할 파일을 무시하는 배열
  • manage_cron_permissions = false cron 파일 권한을 관리하려면 true로 설정 (og-rwx)
  • enable_sysctl_config = true sysctl 구성을 비활성화하려면 false로 설정
  • manage_system_users = true 시스템 사용자 관리(빈 비밀번호 및 nologin 셸 설정)를 비활성화하려면 false로 설정
  • shadow_group = undef /etc/shadow의 그룹 소유권 재정의
  • shadow_mode = undef /etc/shadow의 파일 권한 재정의