23 CentOS 서버 강화 보안 팁-2 부


이 문서에서는 CentOS 서버를 보호하고 강화하는 방법에 대한 이전 자습서를 계속하면서 아래 체크리스트에 제시 될 다른 보안 팁에 대해 설명합니다.

  1. 20 CentOS Server Hardening Security Tips – Part 1

21. 쓸모없는 SUID 및 SGID 명령 비활성화

setuid 및 setgid 비트가 바이너리 프로그램에 설정된 경우 이러한 명령은 심각한 보안 문제를 노출 할 수있는 루트 권한과 같은 다른 사용자 또는 그룹 권한으로 작업을 실행할 수 있습니다.

종종 버퍼 오버런 공격은 이러한 실행 파일 바이너리를 악용하여 루트 고급 사용자의 권한으로 무단 코드를 실행할 수 있습니다.

# find /  -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;

setuid 비트를 설정 해제하려면 아래 명령을 실행하십시오.

# chmod u-s /path/to/binary_file

setgid 비트를 설정 해제하려면 아래 명령을 실행하십시오.

# chmod g-s /path/to/binary_file

22. 소유되지 않은 파일 및 디렉터리 확인

유효한 계정이 소유하지 않은 파일 또는 디렉토리는 삭제하거나 사용자 및 그룹의 권한으로 할당해야합니다.

사용자 및 그룹이없는 파일 또는 디렉토리를 나열하려면 아래 find 명령을 실행하십시오.

# find / -nouser -o -nogroup -exec ls -l {} \;

23. 세계 기록 가능 파일 나열

누구나 쓸 수있는 파일을 시스템에 보관하는 것은 누구나 수정할 수 있기 때문에 위험 할 수 있습니다. 항상 세계 쓰기 가능한 Symlink를 제외한 단어 쓰기 가능 파일을 표시하려면 아래 명령을 실행하십시오.

# find / -path /proc -prune -o -perm -2 ! -type l –ls

24. 강력한 암호 만들기

최소 8 자의 암호를 생성하십시오. 암호에는 숫자, 특수 문자 및 대문자가 포함되어야합니다. pwmake를 사용하여/dev/urandom 파일에서 128 비트의 암호를 생성합니다.

# pwmake 128

25. 강력한 암호 정책 적용

/etc/pam.d/passwd 파일에 아래 줄을 추가하여 시스템이 강력한 암호를 사용하도록합니다.

password required pam_pwquality.so retry=3

위의 줄을 추가하면 입력 된 암호는 abcd와 같은 단조로운 순서로 3 개 이상의 문자와 1111과 같은 3 개 이상의 동일한 연속 문자를 포함 할 수 없습니다.

사용자가 모든 문자 클래스, 문자 시퀀스 및 연속 문자에 대한 강도 검사를 포함하여 최소 길이가 8자인 암호를 사용하도록하려면 /etc/security/pwquality.conf 파일에 다음 줄을 추가하십시오.

minlen = 8
minclass = 4
maxsequence = 3
maxrepeat = 3

26. 암호 에이징 사용

chage 명령은 사용자 암호 에이징에 사용할 수 있습니다. 45 일 후에 만료되도록 사용자 암호를 설정하려면 다음 명령을 사용하십시오.

# chage -M 45 username

암호 만료 시간을 비활성화하려면 다음 명령을 사용하십시오.

# chage -M -1 username

다음 명령을 실행하여 즉시 비밀번호 만료 (사용자가 다음 로그인시 비밀번호를 변경해야 함)를 강제 실행합니다.

# chage -d 0 username

27. 계정 잠금

사용자 계정은 passwd 또는 usermod 명령을 실행하여 잠글 수 있습니다.

# passwd -l username
# usermod -L username

계정을 잠금 해제하려면 passwd 명령에 -u 옵션을 사용하고 usermod에 대해 -U 옵션을 사용하십시오.

28. 계정 셸 액세스 방지

시스템 계정 (일반 계정 또는 서비스 계정)이 bash 셸에 액세스하지 못하도록하려면 아래 명령을 실행하여/etc/passwd 파일에서 루트 셸을/usr/sbin/nologin 또는/bin/false로 변경합니다.

# usermod -s /bin/false username

새 사용자를 만들 때 셸을 변경하려면 다음 명령을 실행하십시오.

# useradd -s /usr/sbin/nologin username

29. vlock으로 가상 사용자 콘솔 잠금

vlock은 Linux 콘솔에서 하나의 다중 세션을 잠그는 데 사용되는 프로그램입니다. 프로그램을 설치하고 아래 명령을 실행하여 터미널 세션 잠금을 시작하십시오.

# yum install vlock
# vlock

30. 중앙 집중식 시스템을 사용하여 계정 및 인증 관리

중앙 집중식 인증 시스템을 사용하면 계정 관리 및 제어를 크게 단순화 할 수 있습니다. 이러한 유형의 계정 관리를 제공 할 수있는 서비스는 IPA Server, LDAP, Kerberos, Microsoft Active Directory, Nis, Samba ADS 또는 Winbind입니다.

이러한 서비스 중 일부는 기본적으로 Kerberos와 같은 암호화 프로토콜 및 대칭 키 암호화를 사용하여 고도로 보안됩니다.

31. USB 미디어의 읽기 전용 마운트 강제

blockdev 유틸리티를 사용하면 모든 이동식 미디어를 읽기 전용으로 마운트 할 수 있습니다. "예를 들어, 다음 내용으로 /etc/udev/rules.d/ 디렉토리에 80-readonly-usb.rules라는 새 udev 구성 파일을 만듭니다.

SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"

그런 다음 아래 명령으로 규칙을 적용하십시오.

# udevadm control -reload

32. TTY를 통한 루트 액세스 비활성화

루트 계정이 모든 콘솔 장치 (TTY)를 통해 시스템 로그인을 수행하지 못하도록하려면 루트로 다음 명령 터미널 프롬프트를 입력하여 securetty 파일의 내용을 지 웁니다.

# cp /etc/securetty /etc/securetty.bak
# cat /dev/null > /etc/securetty

SSH를 통한 루트 로그인을 방지하려면/etc/ssh/sshd_config 파일을 편집하고 아래 행을 추가하십시오.

PermitRootLogin no

33. POSIX ACL을 사용하여 시스템 권한 확장

액세스 제어 목록은 단일 사용자 또는 그룹 이상의 액세스 권한을 정의 할 수 있으며 프로그램, 프로세스, 파일 및 디렉토리에 대한 권한을 지정할 수 있습니다. 디렉토리에 ACL을 설정하면 하위 항목이 동일한 권한을 자동으로 상속합니다.

예를 들면

# setfacl -m u:user:rw file
# getfacl file

34. 강제 모드에서 SELinux 설정

Linux 커널에 대한 SELinux의 향상된 기능은 MAC (Mandatory Access Control) 정책을 구현하여 사용자가 모든 사용자, 프로그램, 프로세스, 파일 및 장치에 대한 세분화 된 권한을 제공하는 보안 정책을 정의 할 수 있도록합니다.

커널의 액세스 제어 결정은 인증 된 사용자 ID가 아닌 모든 보안 관련 컨텍스트를 기반으로합니다.

Selinux 상태를 확인하고 정책을 적용하려면 아래 명령을 실행하십시오.

# getenforce
# setenforce 1
# sestatus

35. SELinux 추가 유틸리티 설치

SELinux 운영을위한 추가 Python 유틸리티 인 audit2allow, audit2why, chcat 및 semanage를 제공하는 policycoreutils-python 패키지를 설치합니다.

간단한 설명과 함께 모든 부울 값을 표시하려면 다음 명령을 사용하십시오.

# semanage boolean -l

예를 들어 httpd_enable_ftp_server의 값을 표시하고 설정하려면 아래 명령을 실행하십시오.

# getsebool httpd_enable_ftp_server

부울 값이 재부팅시 유지되도록하려면 다음 예제에 설명 된대로 setsebool에 -P 옵션을 지정합니다.

# setsebool -P httpd_enable_ftp_server on

36. 중앙 집중식 로그 서버 사용

중앙 집중식 로그 서버에 민감한 유틸리티 로그 메시지를 보내도록 rsyslog 데몬을 구성합니다. 또한 logwatch 유틸리티를 사용하여 로그 파일을 모니터링하십시오.

원격 서버에 로그 메시지를 보내면 시스템이 손상되면 악의적 인 사용자가 자신의 활동을 완전히 숨길 수 없으며 항상 원격 로그 파일에 흔적을 남깁니다.

37. 프로세스 계정 활성화

psacct 유틸리티를 설치하여 프로세스 계정을 활성화하고 lastcomm 명령을 사용하여 시스템 계정 파일에 기록 된대로 이전에 실행 된 명령에 대한 정보를 표시하고 sa를 사용하여 시스템 계정 파일에 기록 된대로 이전에 실행 된 명령에 대한 정보를 요약합니다.

38. /etc/sysctl.conf 강화

다음 커널 매개 변수 규칙을 사용하여 시스템을 보호하십시오.

net.ipv4.conf.all.accept_source_route=0
ipv4.conf.all.forwarding=0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

특별히 필요한 경우가 아니면 ICMP 리디렉션 패킷의 수락 및 전송을 비활성화합니다.

net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.all.rp_filter=2

모든 ICMP 에코 요청 무시 (활성화하려면 1로 설정)

net.ipv4.icmp_echo_ignore_all = 0

39. VPN 서비스를 사용하여 보호되지 않은 공용 네트워크를 통해 구내에 액세스

통신 업체가 인터넷을 통해 LAN 구내에 원격으로 액세스하려면 항상 VPN 서비스를 사용하십시오. 이러한 유형의 서비스는 OpenVPN과 같은 무료 오픈 소스 솔루션을 사용하거나 Cisco VPN (Epel Repositories에서 제공하는 vpnc 명령 줄 유틸리티 설치)과 같은 독점 솔루션을 사용하여 구성 할 수 있습니다.

40. 외부 시스템 검사 수행

다음과 같은 특정 도구를 사용하여 LAN을 통해 원격 지점에서 시스템을 스캔하여 취약점에 대한 시스템 보안을 평가합니다.

  1. Nmap – network scanner 29 Examples of Nmap Command
  2. Nessus – security scanner
  3. OpenVAS – used to scan for vulnerabilities and for comprehensive vulnerability management.
  4. Nikto – an excellent common gateway interface (CGI) script scanner Scan Web Vulnerability in Linux

41. 내부적으로 시스템 보호

바이러스, 루트킷, 맬웨어에 대한 내부 시스템 보호를 사용하고 다음과 같은 무단 활동 (DDOS 공격, 포트 검사)을 탐지 할 수있는 침입 탐지 시스템을 설치하는 것이 좋습니다.

  1. AIDE – Advanced Intrusion Detection Environment – http://aide.sourceforge.net/
  2. ClamAV – Antivirus Scanner https://www.clamav.net
  3. Rkhunter – Rootkit Scanner
  4. Lynis – Security Auditing and Scanning Tool for Linux
  5. Tripwire – Security and Data Integrity http://www.tripwire.com/
  6. Fail2Ban – Intrusion Network Prevention
  7. OSSEC – (HIDS) Host-based Intrusion Detection System http://ossec.github.io/
  8. Mod_Security – Protect Brute Force or DDoS Attacks

42. 사용자 환경 변수 수정

아래 명령을 실행하여 명령 실행을 저장할 날짜 및 시간 형식을 추가하십시오.

# echo 'HISTTIMEFORMAT="%d/%m/%y  %T  "' >> .bashrc'

명령을 입력 할 때마다 HISTFILE을 즉시 기록하도록 강제합니다 (로그 아웃 대신).

# echo ‘PROMPT_COMMAND="history -a"’ >> .bashrc

제한 시간 로그인 세션을 제한하십시오. 유휴 시간 동안 활동이 수행되지 않으면 자동으로 셸을 해체합니다. SSH 세션을 자동으로 연결 해제하는 데 매우 유용합니다.

# echo ‘TMOUT=120’ >> .bashrc

다음을 실행하여 모든 규칙을 적용합니다.

# source .bashrc

43. 백업 데이터

tar, cat, rsync, scp, LVM 스냅 샷 등과 같은 백업 유틸리티를 사용하여 시스템 복사본을 저장하십시오.

시스템이 손상되면 이전 백업에서 데이터 복원을 수행 할 수 있습니다.

마지막으로, 시스템을 안전하게 유지하기 위해 아무리 많은 보안 조치와 반대 조치를 취하더라도 컴퓨터가 연결되어 있고 전원이 켜져있는 한 100 % 완벽하게 보안을 유지할 수 없음을 잊지 마십시오.