카테고리 없음

[8월 25일] 리눅스 시스템 보안 (shadow,umask,authselect)

ljm 2025. 8. 25. 14:00
cat /etc/passwd

 

cat /etc/shadow

 

 

root계정 암호화

 

/etc/shadow 파일의 역할

shadow 파일은 보안을 위해 일반 사용자는 접근할 수 없도록 루트(root) 사용자만 읽을 수 있게 설정되어 있다. 사용자의 비밀번호 해시값, 마지막 비밀번호 변경일, 비밀번호 사용 유효기간 등 민감한 정보가 포함되어 있어, 시스템의 보안을 유지하는 데 매우 중요한 역할을 한다.

 

root:$6$Pg/6dTzRVN5vV...:19820:0:99999:7:::

  1. 사용자 이름 (root): 첫 번째 필드는 계정의 사용자 이름
  2. 암호화된 비밀번호 (...): 두 번째 필드는 암호화된 비밀번호(패스워드 해시)
    • $로 시작하는 문자열은 해싱 알고리즘을 나타냅니다. $6$는 SHA-512 알고리즘을 사용했음을 의미하며, 이는 현재 리눅스에서 주로 사용하는 강력한 암호화 방식
    • 그 뒤의 문자열 Pg/6dTzRVN5vV...는 비밀번호 해시와 **솔트(salt)**가 결합된 값입니다. 솔트는 무지개 테이블 공격(Rainbow Table Attack) 같은 공격을 방지하기 위해 해시에 무작위로 추가되는 값
    • ! 또는 * 기호가 이 필드에 있으면 해당 계정은 비밀번호로 로그인할 수 없는 상태. 이미지의 systemd-coredump, dbus 같은 계정들이 여기에 해당
  3. 마지막 비밀번호 변경일 (19820): 세 번째 필드는 1970년 1월 1일(Unix Epoch)을 기준으로 비밀번호가 마지막으로 변경된 날짜를 나타냄. 
    • 19820은 2024년 4월 20일을 의미 (19820일 + 1970년 1월 1일 = 2024년 4월 20일)
  4. 비밀번호 변경 가능 최소 일수 (0): 네 번째 필드는 비밀번호를 변경한 후 다시 변경하기까지 기다려야 하는 최소 일수를 나타냄. 0은 언제든지 비밀번호를 바꿀 수 있다는 뜻.
  5. 비밀번호 변경 필요 최대 일수 (99999): 다섯 번째 필드는 비밀번호를 변경하지 않고 사용할 수 있는 최대 일수. 99999는 거의 무기한에 가까운 값으로, 비밀번호를 강제로 변경할 필요가 없다는 의미.
  6. 경고 기간 (7): 여섯 번째 필드는 비밀번호 만료일로부터 며칠 전부터 만료 경고 메시지를 보낼지 설정하는 값. 7은 비밀번호 만료 7일 전부터 경고한다는 뜻.
  7. 계정 비활성화 기간 ( ): 일곱 번째 필드는 비밀번호가 만료된 후 계정이 완전히 잠기기까지의 유예 기간을 나타냄. 비어 있으면 이 기능이 설정되지 않은 것.
  8. 계정 만료일 ( ): 여덟 번째 필드는 계정이 완전히 비활성화되는 날짜를 Unix Epoch를 기준으로 나타냄. 비어 있으면 계정 만료일이 설정되지 않은 것.
  9. 예약 필드 ( ): 아홉 번째 필드는 향후 사용을 위해 예약된 필드.

 

ls -al /etc

umask

 

umask는 새로운 파일 또는 디렉토리가 생성될 때 적용되는 접근 권한 마스크를 설정하는 명령어이다.

umask는 기본 권한에서 특정 권한을 제거하는 방식으로 동작한다. 기본 파일 권한은 666(읽기/쓰기), 디렉토리 권한은 777(읽기/쓰기/실행)이다. umask 값만큼의 권한이 이 기본값에서 차감되어 최종 권한이 결정된다.

  • 최종 권한 = 기본 권한 - umask 값

예를 들어, umask 값이 022일 경우, 새로운 파일의 최종 권한은 666에서 022를 뺀 644가 된다. 이는 소유자에게는 읽기/쓰기 권한을, 그룹과 기타 사용자에게는 읽기 권한만을 부여함을 의미한다.

 

일반적인 umask 값별 설명

1. 0022 (기본값)

  • 계산:
    • 파일: 666 - 022 = 644
    • 디렉토리: 777 - 022 = 755
  • 설명: 대부분의 리눅스 시스템에서 기본으로 사용되는 값이다. 소유자에게는 읽기(r)와 쓰기(w) 권한을 모두 부여하고, 그룹기타 사용자에게는 읽기(r)와 실행(x) 권한만 부여한다. 쓰기 권한은 소유자에게만 허용되어 보안성이 높다.

2. 0002

  • 계산:
    • 파일: 666 - 002 = 664
    • 디렉토리: 777 - 002 = 775
  • 설명: 동일한 그룹에 속한 사용자들이 파일을 자유롭게 수정할 수 있도록 허용하는 값이다. 소유자그룹 모두 읽기/쓰기 권한을 가지며, 기타 사용자는 읽기/실행 권한만 가진다. 여러 명이 공동 작업하는 서버 환경에서 주로 사용된다.

3. 0077

  • 계산:
    • 파일: 666 - 077 = 600
    • 디렉토리: 777 - 077 = 700
  • 설명: 가장 엄격한 보안 설정이다. 파일과 디렉토리에 대한 모든 권한을 소유자에게만 부여하며, 그룹기타 사용자의 접근을 완전히 차단한다. 개인 서버나 민감한 데이터를 다루는 환경에서 사용된다.
vi /etc/login.defs

 

vi /etc/security/pwquality.conf

 

vi /etc/pam.d/system-auth
authselect

 

authselect 명령어

authselect는 RHEL(Red Hat Enterprise Linux) 7.4 이상의 시스템에서 사용되는, 인증 프로파일을 관리하는 도구입니다. 기존 authconfig를 대체하며, 시스템의 인증 및 사용자 계정 관리 설정을 보다 안전하고 유연하게 변경하는 데 사용된다.


주요 역할

authselect는 /etc/pam.d/ 및 /etc/nsswitch.conf 파일들을 관리하여 시스템의 인증 방식을 중앙에서 쉽게 바꿀 수 있게 한다. 미리 정의된 **프로파일(profile)**을 통해 설정을 적용하므로, 직접 파일을 수정할 때 발생할 수 있는 오류를 방지한다.


주요 명령어

  • authselect list 사용 가능한 프로파일과 기능을 목록으로 보여준다. with-mkhomedir (홈 디렉토리 자동 생성), with-faillock (로그인 실패 잠금), with-smartcard (스마트카드 인증) 등의 추가 기능도 확인 가능하다.
  • authselect current 현재 시스템에 적용된 프로파일과 활성화된 기능들을 표시한다.
  • authselect select [프로필] [기능] 지정된 프로파일과 기능을 시스템에 적용한다. 이 명령어를 실행하면 관련된 시스템 설정 파일들이 자동으로 수정된다.
    • 예시: authselect select sssd with-mkhomedir 이 명령은 SSSD(System Security Services Daemon) 프로파일을 선택하고, 사용자가 로그인할 때 홈 디렉토리가 자동으로 생성되는 기능을 추가한다.
  • authselect backup [백업_이름] 현재 설정을 백업한다. 문제가 발생할 경우 백업을 이용해 복원할 수 있다.

장점

authselect는 직접 설정을 수정하는 것보다 훨씬 안전하고 간편하다. 잘못된 설정으로 시스템에 로그인하지 못하는 문제를 예방하고, 시스템 전반에 걸쳐 일관된 인증 정책을 유지하는 데 도움이 된다.

 

cat /var/log/secure
cat /var/log/lastlog
cat /var/log/messages

 

head : 위에서부터 10줄
head -5 : 위에서부터 5줄
tail 아래에서부터 10줄
tail -5 : 아래에서부터 5줄
grep "53" messages : 53 키워드가 들어간 줄만 출력

 

 

ls /var/run

utmp

 

btmp lastb 실패한 로그인 정보
lastlog 마지막 로그인 정보
utmp wtmp 

 

 

authpriv.*

var/log/secure

민감한 인증정보

 

vi /etc/ryslog.conf
*.crit   /var/log/critical.log
local3.notice    /var/log/myteset.log
*.debug;authpriv.none   /var/log/all_except_auth.log

 

vi /etc/httpd/conf/httpd.conf
vi /etc/httpd/logs
cat /etc/httpd/
journalctl -xe
systemctl cat logrotate.timer
vi /etc/logrotate.conf
vi /etc/logrotate.d