웹사이트 검색

LFCA: Linux 시스템 보안을 개선하는 방법 – 20부


우리 모두 알고 있듯이 루트 사용자는 왕이며 Linux 시스템에 대해 무제한의 권한을 행사합니다. 그러나 루트가 아닌 사용자는 기본 작업으로 제한됩니다. 또한 sudo 사용자에게는 루트 사용자가 특정 상승된 작업을 수행하는 데 적합하다고 간주하는 특정 수준의 루트 권한만 부여됩니다.

일반 사용자가 리소스에 대한 액세스 권한을 제어할 수 없거나 의도치 않게 루트로 에스컬레이션되면 문제가 발생합니다. 이는 위반, 원치 않는 수정 및 최악의 경우 시스템 충돌을 일으킬 수 있는 심각한 보안 위험입니다. 또 다른 잠재적 위험은 파일의 보안 수준이 낮은 파일 권한을 갖는 경우입니다. 예를 들어 전역 사용자에 대한 쓰기 권한이 있는 부팅 파일은 쉽게 수정되거나 손상되어 시스템이 손상될 수 있습니다.

우리는 물리적, 네트워크 및 데이터 보안을 구현할 수 있지만 악의적인 사용자는 보안 조치를 우회하고 이러한 보안 허점을 이용할 수 있습니다. 이러한 이유로 파일 시스템 보안을 심각하게 고려해야 합니다. 파일에 액세스하기 위해 보안 조치를 우회하는 데 큰 노력을 기울일 필요가 없는 악의적인 직원의 공격이나 내부자 위협에 대비하여 추가 방어 계층을 제공합니다.

시스템 보안에서는 다음과 같은 핵심 사항에 중점을 둘 것입니다.

  • 액세스 권한 – 사용자 및 그룹 권한.
  • PAM 모듈을 사용하여 비밀번호 정책을 시행하세요.

접근 권한 – 사용자와 그룹 분리

Linux에서는 모든 것이 파일로 간주된다는 말을 들어보셨을 것입니다. 그렇지 않다면 그것은 과정입니다. Linux 시스템의 모든 파일은 사용자와 그룹 사용자가 소유합니다. 또한 사용자(u), 그룹(g), 기타(o) 등 3가지 사용자 범주에 대한 파일 권한이 있습니다. 권한은 각 사용자 카테고리에 대해 읽기, 쓰기 및 실행( rwx )으로 표시됩니다.

rwx        rwx	     rwx
User       Group     Others

앞에서 본 것처럼 Linux 기본 섹션에서는 그림과 같이 긴 형식의 ls 명령을 사용하여 파일 권한을 볼 수 있습니다.

ls -l

요약하자면, 권한은 일반적으로 9자로 표시됩니다. 처음 세 문자는 파일을 소유한 실제 사용자의 액세스 권한을 나타냅니다. 두 번째 문자 집합은 파일 그룹 소유자의 권한을 나타냅니다. 마지막으로 다른 사용자나 글로벌 사용자를 위한 마지막 세트입니다. 이러한 문자는 항상 읽기, 쓰기, 실행(rwx) 순서로 나타납니다.

권한 뒤에는 사용자 및 그룹 소유권이 있고 그 뒤에는 파일 또는 디렉터리 크기, 수정 날짜, 마지막으로 파일 이름이 있습니다.

파일/디렉토리 권한 및 소유권 변경

파일 및 디렉토리의 사용자 권한은 적절하다고 판단되는 대로 수정될 수 있습니다. 경험상 최소 권한 보안 원칙을 사용하는 것이 좋습니다. 간단히 말해서 사용자가 작업을 완료하는 데 필요한 최소한의 액세스 권한 또는 권한을 얻도록 보장합니다.

최소 권한 원칙은 사용자를 특정 역할로만 제한함으로써 공격자가 낮은 수준의 사용자 계정을 활용하여 중요한 데이터에 액세스하고 수정하는 위험을 최소화합니다. 또한 공격자가 시스템을 제어할 경우 공격 표면을 줄이고 맬웨어 전파를 제한합니다.

따라서 사용자가 파일이나 디렉터리의 내용을 보기만 하면 되는 경우에는 실행 또는 쓰기 권한을 부여해서는 안 됩니다. 매우 기본적인 수준에서는 사용자가 작업을 수행하는 데 필요한 최소한의 권한과 소유권만 부여합니다. 기본 Linux 명령 주제에서 chmod 및 chown 명령을 사용하여 파일/디렉터리에 대한 사용자 권한 및 소유권을 수정하는 방법을 다루었습니다.

고정 비트 권한 모드

시스템 관리자가 보다 쉽게 권한을 관리할 수 있도록 전체 디렉터리에 특수 권한이나 액세스 권한을 부여할 수 있습니다. 파일이나 디렉터리의 삭제 및 수정을 제한하기 위해 적용할 수 있는 특수 권한 중 하나는 고정 비트입니다.

끈끈한 비트

시스템 또는 네트워크의 모든 사용자가 공유 디렉터리에 액세스할 수 있는 시나리오에서는 일부 사용자가 디렉터리 내의 파일을 삭제하거나 수정할 수 있는 잠재적인 위험이 있습니다. 디렉터리 내용의 무결성을 유지하려는 경우 이는 바람직하지 않습니다. 그리고 이것이 끈적끈적한 비트가 들어오는 곳입니다.

고정 비트는 파일 또는 전체 디렉토리에 설정된 특수 파일 권한입니다. 해당 파일/디렉터리의 소유자에게만 파일이나 디렉터리 내용을 삭제하거나 변경할 수 있는 권한을 부여합니다. 다른 사용자는 파일/디렉토리를 삭제하거나 수정할 수 없습니다. 기호 값은 t이고 숫자 값은 1000입니다.

디렉토리에서 고정 비트를 활성화하려면 다음과 같이 chmod 명령을 사용하세요.

chmod +t directory_name

아래 예에서는 test라는 디렉터리에 고정 비트를 적용했습니다. 디렉터리의 경우 모든 내용은 고정 비트 권한을 상속받습니다. ls -ld 명령을 사용하여 고정 비트 권한을 확인할 수 있습니다. 파일 권한 끝에 t 기호가 있는지 확인하세요.

ls -ld test

다른 사용자가 디렉터리를 삭제하거나 디렉터리 내의 파일을 수정하려고 하면 권한 거부됨 오류가 표시됩니다.

그리고 스틱비트파일 권한의 핵심이 바로 이것이다.

SUID 및 SGID 권한 모니터링

SUID(사용자 ID 설정)는 다른 일반 사용자가 파일 소유자의 파일 권한으로 파일을 실행할 수 있도록 허용하는 또 다른 특수 파일 권한입니다. 일반적으로 실행 권한을 나타내는 x 대신 사용자의 파일 권한 부분에 기호 값 s로 표시됩니다. SUID의 숫자 값은 4000입니다.

SGID(그룹 ID 설정)를 사용하면 일반 사용자가 파일 그룹 소유자의 그룹 권한을 상속받을 수 있습니다. 실행 권한에 대한 x 대신 파일 권한의 그룹 부분에 s가 표시됩니다. SGID의 숫자 값은 2000입니다.

아무리 편리하더라도 SUIDSGID 권한은 보안 위험과 연관되어 있으므로 어떤 대가를 치르더라도 피해야 합니다. 이는 일반 사용자에게 특별한 권한을 부여하기 때문입니다. 일반 사용자로 가장한 침입자가 SUID 비트가 설정된 루트 사용자 소유의 실행 파일을 발견하면 해당 허점을 이용하여 시스템을 악용할 수 있습니다.

Linux에서 SUID 비트가 설정된 모든 파일을 찾으려면 루트 사용자로 find 명령을 실행하십시오.

find / -perm -4000 type -f

디렉토리의 경우 다음을 실행하십시오.

find / -perm -4000 type -d

SGID 비트가 설정된 모든 파일을 찾으려면 다음을 실행하세요.

find / -perm -2000 type -f

디렉토리의 경우 다음을 실행하십시오.

find / -perm -2000 type -d

파일에서 SUID 비트를 제거하려면 다음과 같이 chmod 명령을 실행하십시오.

chmod u-s /path/to/file

파일에서 SGID 비트를 제거하려면 다음 명령을 실행하십시오.

chmod g-s filename /path/to/file

PAM 모듈을 사용하여 비밀번호 정책 시행

사용자가 취약한 비밀번호를 설정하는 것은 드문 일이 아닙니다. 좋은 숫자는 로그인 중에 비밀번호를 잊어버리지 않도록 짧고 단순하며 쉽게 추측할 수 있는 비밀번호를 설정하는 것입니다. 편리하지만 무차별 대입 공격 스크립트를 사용하면 취약한 비밀번호를 쉽게 뚫을 수 있습니다.

PAM 모듈( 플러그형 인증 모듈)은 시스템 관리자가 Linux 시스템에서 비밀번호 정책을 시행할 수 있는 모듈입니다. 이를 수행하려면 libpam_pwquality 라이브러리에서 제공하는 pam_pwquality 모듈이 필요합니다. pam_pwquality 모듈은 일련의 규칙 및 시스템 사전과 비교하여 비밀번호의 강도를 확인하고 취약한 비밀번호 선택을 찾아냅니다.

Ubuntu 18.04 및 이후 버전에 pam_pwquality 모듈을 설치하려면 다음을 실행하세요.

sudo apt install libpam_pwquality

RHEL/CentOS 8의 경우 다음 명령을 실행합니다.

sudo dnf install libpwquality

구성 파일은 다음 위치에 있습니다.

  • Debian 시스템 – /etc/pam.d/common-password
  • RedHat 시스템 – /etc/pam.d/system-auth

비밀번호 정책 구성

PAM 구성 파일 수정을 시작하기 전에 먼저 비밀번호 만료 제어에 대한 통찰력을 수집하는 것을 고려해 보겠습니다.

비밀번호 만료일 세부정보

이는 /etc/login.defs 파일에서 찾을 수 있습니다.

파일에는 다음과 같은 키 비밀번호 제어가 포함되어 있습니다.

  • PASS_MAX_DAYS: 비밀번호를 사용할 수 있는 최대 일수입니다.
  • PASS_MIN_DAYS: 최소 기간입니다. 비밀번호 변경 사이에 허용되는 일 수입니다.
  • PASS_WARN_AGE: 비밀번호가 만료되기 전에 경고가 표시되는 일수입니다.

기본값은 아래와 같습니다.

PASS_MAX_DAYS 속성은 사용자가 비밀번호를 사용할 수 있는 일수를 제한합니다. 이 값에 도달하거나 비밀번호가 만료되면 사용자는 시스템에 로그인하기 위해 비밀번호를 변경해야 합니다. 기본적으로 이 값은 99999로 설정되어 있으며 이는 273년을 의미합니다. 사용자가 평생 동안 비밀번호를 계속 사용할 수 있으므로 보안에 관한 한 이는 별 의미가 없습니다.

표시된 대로 30일이라는 의미 있는 값으로 설정할 수 있습니다.

PASS_MAX_DAYS  30

30일이 지나면 사용자는 비밀번호를 다른 비밀번호로 변경해야 합니다.

PASS_MIN_DAYS 속성은 사용자가 비밀번호를 변경하기 전에 비밀번호를 사용할 수 있는 최소 기간을 나타냅니다. 이것은 무엇을 의미 하는가? 예를 들어 이 값을 15일로 설정하면 사용자는 15일이 지나기 전에 비밀번호를 다시 변경할 수 없습니다.

PASS_MAX_DAYS  15

PASS_WARN_AGE 속성은 비밀번호가 만료되기 전에 사용자가 비밀번호 만료 임박에 대한 경고를 받는 일수를 지정합니다. 예를 들어 표시된 대로 이를 7일로 설정할 수 있습니다.

PASS_MAX_DAYS  7

참고: 이러한 비밀번호 제어는 기존 계정에서는 작동하지 않습니다. 규칙을 정의한 후 생성된 새 계정에만 적용됩니다.

PAM 모듈을 사용하여 비밀번호 복잡성 설정

/etc/pam.d/common-password 파일을 편집하기 전에 백업 사본을 생성하십시오. 이 예에서는 common-password.bak 백업 복사본 파일을 만들었습니다.

sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

그런 다음 파일을 엽니다.

sudo vim /etc/pam.d/common-password 

아래 표시된 줄을 찾으세요.

password        requisite          pam_pwquality.so retry=3

재시도 옵션은 오류가 발생하기 전에 올바른 비밀번호를 입력해야 하는 최대 횟수를 설정합니다. 기본적으로 이 값은 3으로 설정되어 있습니다. 이는 하나의 옵션일 뿐이며 여러 옵션을 포함하겠습니다.

줄에 다음 속성을 추가합니다.

minlen=10 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 reject_username 

이러한 속성을 구체화해 보겠습니다.

  • minlen=10: 비밀번호에 허용되는 최소 크기를 설정합니다. 이 경우 10자입니다.
  • difok=3: 이전 비밀번호에 표시되는 최대 문자 수입니다.
  • lcredit=-1: 비밀번호에 포함되어야 하는 최소 소문자 수입니다.
  • ucredit=-1: 비밀번호에 포함되어야 하는 최대 소문자 수입니다.
  • dcredit=-1: 비밀번호에 정의해야 하는 최소 숫자 수입니다.
  • ocredit=-1: 비밀번호에 정의해야 하는 특수 문자(예: @, #, &)의 최소 개수입니다.
  • reject_username: 이 옵션은 비밀번호가 직선 또는 역방향 형식의 사용자 이름인 경우 비밀번호 거부를 트리거합니다.

비밀번호 정책에 부합하지 않는 새 사용자를 생성하려고 하면 다음과 같은 오류가 발생하게 됩니다.

요약

이것으로 시스템 보안 및 보안 기본 사항 전반에 대한 주제를 마무리합니다. 전체 장에서 우리는 해커나 불만을 품은 직원과 같은 악의적인 사용자로부터 Linux 시스템을 보호하기 위해 구현할 수 있는 기본 보안 조치에 대해 설명했습니다.