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


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

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

[ 다음을 좋아할 수도 있습니다. 데이터 및 Linux 보안을 위한 유용한 팁 ]

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

시스템 보안에서 우리는 다음과 같은 핵심 사항에 집중할 것입니다.

<울> \u003cli\u003e액세스 권한 – 사용자 및 그룹 권한.\u003c/li\u003e\n\u003cli\u003ePAM 모듈로 비밀번호 정책을 시행합니다.\u003c/li\u003e\n

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

Linux의 모든 것은 파일로 간주된다는 말을 들어보셨을 것입니다. 그렇지 않은 경우 프로세스입니다. Linux 시스템의 모든 파일은 사용자와 그룹 사용자가 소유합니다. 또한 사용자(u), 그룹(g) 및 기타(o)의 3가지 사용자 범주에 대한 파일 권한을 보유합니다. 권한은 각 사용자 범주에 대한 읽기, 쓰기 및 실행( rwx )으로 표시됩니다.

rwx        rwx	     rwx
User       Group     Others

앞에서 본 것처럼 ls 명령에서 다음과 같이 표시됩니다.

$ ls -l

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

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

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

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

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

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

시스템 관리자가 보다 쉽게 \u200b\u200b권한을 관리할 수 있도록 전체 디렉토리에 대해 특수 권한 또는 접근 권한을 부여할 수 있습니다. 파일 또는 디렉토리의 삭제 및 수정을 제한하기 위해 적용할 수 있는 특수 권한 중 하나는 스티키 비트입니다.

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

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

디렉토리에서 스티키 비트를 켜려면 다음과 같이 chmod 명령을 사용하십시오.

$ chmod +t directory_name

아래 예에서는 test라는 디렉토리에 스티키 비트를 적용했습니다. 디렉토리의 경우 모든 내용은 스티키 비트 권한을 상속합니다. ls -ld 명령을 사용하여 고정 비트 권한을 확인할 수 있습니다. 파일 권한 끝에 있는 \u003ccode\u003et\u003c/code\u003e 기호를 확인하십시오.

$ ls -ld test

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

이것이 스틱 비트 파일 권한의 요지입니다.

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

SGID(그룹 ID 설정)를 사용하면 일반 사용자가 파일 그룹 소유자의 그룹 권한을 상속할 수 있습니다. 실행 권한에 대한 \u003ccode\u003ex\u003c/code\u003e 대신 파일 권한의 그룹 부분에 \u003ccode\u003es\u003c/code\u003e가 표시됩니다. SGID의 숫자 값은 2000입니다.

SUID 및 SGID 권한은 아무리 편리한 것으로 판명되었지만 보안 위험과 관련이 있으므로 어떤 경우라도 피해야 합니다. 일반 사용자에게 특별한 권한을 부여하기 때문입니다. 일반 사용자로 가장하는 침입자가 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 모듈( Pluggable Authentication Module )은 시스템 관리자가 Linux 시스템에서 암호 정책을 시행할 수 있게 해주는 모듈입니다. 이를 수행하려면 libpam_pwquality 라이브러리에서 제공하는 pam_pwquality 모듈이 필요합니다. pam_pwquality 모듈은 일련의 규칙 및 시스템 사전과 비교하여 암호의 강도를 확인하고 약한 암호 선택을 찾아냅니다.

Ubuntu 18.04 이상 버전에 pam_pwquality 모듈을 설치하려면 다음을 실행하십시오.

$ sudo apt install libpam_pwquality

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

$ sudo dnf install libpwquality

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

<울>

  • 데비안 시스템 – /etc/pam.d/common-password
  • RedHat 시스템 – /etc/pam.d/system-auth
  • PAM 구성 파일 수정을 시작하기 전에 먼저 암호 에이징 제어에 대한 통찰력을 수집하는 것을 고려해 보겠습니다.

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

    파일에는 다음과 같은 주요 암호 컨트롤이 포함되어 있습니다.

    <울> \u003cli\u003ePASS_MAX_DAYS: 비밀번호를 사용할 수 있는 최대 일수\u003c/li\u003e\n

  • PASS_MIN_DAYS: 최소 숫자입니다. 비밀번호 변경 사이에 허용되는 일 수.\u003c/li\u003e\n\u003cli\u003ePASS_WARN_AGE: 비밀번호가 만료되기 전에 주어진 경고 일수\u003c/li\u003e\n

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

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

    이것을 의미 있는 값으로 설정할 수 있습니다(예: 그림과 같이 30일).

    PASS_MAX_DAYS  30
    

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

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

    PASS_MAX_DAYS  15
    

    PASS_WARN_AGE 속성은 암호가 만료되기 전에 임박한 암호 만료에 대한 경고를 사용자에게 표시하는 일 수를 지정합니다. 예를 들어 그림과 같이 7일로 설정할 수 있습니다.

    PASS_MAX_DAYS  7
    

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

    /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 
    

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

    <울> \u003cli\u003eminlen\u003d10: 암호에 허용되는 최소 크기를 설정합니다. 이 경우 10자입니다.

  • \u003cli\u003edifok\u003d3: 이전 비밀번호에 존재하는 최대 문자 수입니다.\u003c/li\u003e\n\u003cli\u003elcredit\u003d-1: 비밀번호에 포함되어야 하는 최소 소문자 수입니다.\u003c/li\u003e\n\u003cli\u003eucredit\u003d-1: 비밀번호에 포함되어야 하는 최대 소문자 수입니다.\u003c/li\u003e\n\u003cli\u003edcredit\u003d-1: 비밀번호에 정의되어야 하는 최소 숫자 수입니다.\u003c/li\u003e\n\u003cli\u003eocredit\u003d-1: @, #, \u0026와 같은 특수 문자의 최소 수는 비밀번호에 정의되어야 합니다.\u003c/li\u003e\n\u003cli\u003ereject_username: 이 옵션은 비밀번호가 스트레이트 또는 리버스 형식의 사용자 이름인 경우 비밀번호 거부를 트리거합니다.\u003c/li\u003e\n

    암호 정책에 미치지 못하는 새 사용자를 만들려고 하면 표시된 것과 같은 오류가 발생합니다.

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