202401to07
  • 2024.06.24.보안 day55
    2024년 06월 24일 10시 19분 22초에 업로드 된 글입니다.
    작성자: 202401to07

    오늘은 PAM , 셀리눅스 

     

    PAM (장착형 인증모듈) :  중요 포인트  : pam_tally2 / 복잡성
    pluggable authentication module


    리눅스 상에 인증방법을 제공하는 인증모듈
    정책에 따라서 정책에 맞는 인증 방식을 제공


    구성파일
    /etc/pam.d   => 적재된 서비스 pam 설정파일


    /lib/security
    /lib64/security => PAM에 의해 호출되는 라이브러리 파일 (.so) [모듈]


    /etc/security => pam모듈 실행에 필요한 추가 설정 파일

     

     

      128  mkdir /backup
      129  cp -a /etc/pam.d/ /backup/
      130  cd /etc/pam.d/
      131  vi passwd

    #password   substack    system-auth
    password    required    pam_cracklib.so try_first_pass retry=3  type=SEVAS_LINUX

    ***위같은 경우는 비번을 변경해도 적용이 안됨***

    [root@SEVAS210 pam.d]# cat passwd
    #%PAM-1.0
    password    required    pam_cracklib.so try_first_pass retry=3 type=SEVAS_LINUX
    auth       include      system-auth
    account    include      system-auth
    password   substack     system-auth
    -password   optional    pam_gnome_keyring.so

    ** 위치를 바꿔준뒤에 주석을 풀어주면 적용이 됨****

     

    passwd

    passwd sevas

    다시 10.10.10.10 에서 sevas로 로그인후  

    passwd하면 sevas 비번과 SEVAS_LINUX의 비번을 묻는다 

     

    테스트 후 vi passwd 원복하기 ~


     

    [TYPE] PAM에  어떤 타입의 인증이 사용될것인지 선언
    auth  :  사용자 인증에 대한 타입 
    account  :   인증이후 계정관리 수행 (접속관리) 
                     서비스에 대한 접근 허가/제한
    session :   서비스 시행전과 직후에 필요한 작업
                     (mount/로그인/로그아웃,로그기록등등....)
    password :      인증토큰 갱신시 필요, 주로 auth 모듈과 연결되서 사용됨 
                           (패스워드 변경 모듈 결정)



    [control] 모듈실행 결과 (성공/실패)에 대한 행동 지침
    required 모듈 실패시 다른모듈 인증요청 수행하나 최종적으로 거부 / 

                    일단 다 요구하는데 하나라도 실패면 결과는 무조건 실패가 나온다 , 보통 required를 많이 함 
    (성공시에는 다음 모듈 호출)
    모듈 실패 = 거부 모듈성공 = 다음모듈 호출
    requisite 모듈 실패시 즉시 실패  (성공시에는 다음 모듈 호출)
    optional   선택사항으로 모듈의 성공/실패가 불분명시 모듈의 결과에 따라 결정 (보통 안써)
    sufficient 모듈 인증 성공시 즉시 인증
    단 required의 실패 이후에 호출된 경우나 모듈 실패는 인증에 영향 X
    include 다른 PAM설정을 불러올때 적용


    [module PATH] 지정한 PAM 라이브러리를 호출 (/lib64/security)
    env 환경변수 호출
    unix.so 사용자에게 ID/Password 질의 응답내용 검증 (auth에서 사용)
    permit.so 무조건 성공
    deny.so 무조건 실패 (인증 마지막에 사용)
    access.so access control table 사용 가능 
    사용자 계정/호스트/도메인을 통해 시스템 접근 허용(account에 사용)
    limits.so 자원제한 (쓰기 어려워 잘안씀)
    listfile.so 파일 리스트 확인 후 허가/ 거부 (ftpusers)


    [module_argument] = 모듈마다 다르다
    debug 오류 발생시 syslog에 추가정보 제공
    no_warn 응용프로그램 경고 메세지 X
    use_first_pass 앞에 실행된 모듈로 PW정보를 받으나 틀린경우 재입력 요청  X (auth,password에서 사용)
    try_first_pass 앞에 실행된 모듈로 PW정보를 받으나 틀린경우 재입력 요청  (auth,password 에서 사용)
    추가적으로 try_first_pass  retry=3  식으로 쓰임
    use_uid 인증하는 UID가 아닌 현재 사용중이 UID로 대응


    PAM 실습  )

    sevas , test 계정에 대해 ssh 접속 막기 (putty 안들어가짐)
    /etc/pam.d/sshd 

     auth required pam_listfile.so  item=user sense=deny file=/login/sevas  onerr=succeed


      140  useradd test
      141  useradd sevas
      142  useradd sevas2
      143  passwd test
      144  passwd sevas
      145  passwd sevas2
      146  vi /login/sevas
      147  mkdir /login
      148  cat  > /login/sevas
    sevas
    test
    ^C

     

    결과 : sevas, test 는 putty안들어가짐

    sevas2는 들어가짐

     

    본사 DMZ) 10.10.10.10 vm1 ->192.168.10.10 / 192.168.10.2 vm 8


    2. /bin/bash가 아닌 쉘을 쓰는 사용자에 대해 ssh 접속불가 

    [root@www pam.d]# chsh sevas2
    Changing shell for sevas2.
    New shell [/bin/bash]: /bin/csh
    Shell changed.
    [root@www pam.d]# tail -3 /etc/passwd |grep sevas
    sevas2:x:1002:1002::/home/sevas2:/bin/csh

    sevas2로 로그인 확인 
    vi /etc/pam.d/sshd
    #auth      required     pam_listfile.so  item=user sense=deny file=/login/sevas  onerr=succeed
    auth       required     pam_listfile.so  item=shell sense=allow file=/login/sevas  onerr=succeed

    vi /login/sevas
    /bin/bash

    sevas 로그인 확인 (접속가능)
    sevas2 로그인 확인 (막힘) 


     vi /etc/pam.d/passwd

     

    pam_permit.so   :  무조건 통과  :

    auth       sufficient   pam_permit.so

     

    pam_deny.so     : 무조건 거부  :

    auth      requisite    pam_deny.so

     

    pam_rootok.so  : root인 경우에만 성공

    auth           sufficient      pam_rootok.so
    #auth            sufficient      pam_wheel.so trust use_uid

     

    pam_wheel.so         wheel 그룹 사용자 적용 

    #auth           sufficient      pam_rootok.so
    auth            sufficient      pam_wheel.so trust use_uid

    usermod -G wheel sevas2

    sevas2에서 su 를 쓰면 그룹에 가입되서 비번 (X) 통과 

     

    pam_succeed_if.so     : 조건 식 

    auth       required     pam_succeed_if.so  uid > 1000
    auth       required     pam_sepermit.so

    quiet_fail       결과에 따라 syslog에 알리지 않음
    quiet_success 결과에 따라 syslog에 남김

     

    pam_issue.so

    auth       optional     pam_issue.so    issue=/etc/sevas_issue

    auth type에서만 사용가능 / 주로 optional 로 설정이 됨.
    사용자로그인전  issue파일 내용 출력

    *** centos7로 오면서 디폴트 값으로 /etc/issue 바뀜 ****

     

     

    pam_motd.so 

    session    optional     pam_motd.so     motd=/etc/motd2

    주로 session에서만 사용가능

    인증할때 /etc/motd2  내용 출력 / 기본적으로 /etc/motd 를 쓰면 인증완료후 메세지를 띄움 

    **issue 는 로그인전 타이틀 내용 출력을 하고   
    motd 는 인증완료후 내용출력하는부분이 다름 **

     

     

    pam_access.so 

    auth  requied pam_access.so

    모든 type에서 사용가능

    + - : 허가 거부

    origins  터미널명(tty),컴퓨터이름,도메인,아이피,ALL,LOCAL

    설정은 /etc/security/access.conf에서 설정

    [ permission(+/-) : users : origins ]

    ex) 

    + : ALL EXCEPT  sevas sevas2 : 100.100.100.  (sevas와 sevas2를 제외하고 다른사람은 100.100.100.0/24 에서만 접속을 허가한다) 
    -  : ALL : ALL (모든 사용자는 어디에서든 접속을 허용하지 않는다)
    *** 둘다 설정해줘야되용~ ***

     

     

    pam_unix.so   

    auth sufficent pam_unix.so nullok try_first_pass

    사용자에게 ID/Password 를 질의하고 응답 받은 정보를 검증
    nullok : null 사용 허용
    try_first_pass : 이전 모듈에서 입력받은 패스워드로 먼저 인증을 시도하고 없으면 사용자에게 패스워드를 물어봄


     pam_tally2  (계정 잠금 정책)

     

    system-auth 는 로컬
    password-auth 는 원격

     

    실습 ) 로컬계정 3번 실패시 접속불가 (root는 제외)

     

     vi system-auth

    auth        required      pam_env.so
    auth        required      pam_tally2.so deny=3 unlock   
    auth        sufficient    pam_unix.so nullok try_first_pass

     

    (임계값 1분 제한시에는 unlock 대신 unlock_time=60 )

     

     

    결과  : sevas 비번 3회 이상 비번 틀리면 막힘 

     pam_tally2   로 확인 가능 

    횟수 초기화 

     pam_tally2 -u sevas -r 


    PW복잡성 설정

     pam_pwquality.so : 비밀번호 복잡성 모듈

     vi system-auth

    #password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
    password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=SEVAS_PASSWORD minlen=10 dcredit=-1 ucredit=-1 ocredit=-1

    *** 설정파일로 바꿀때는 /etc/security/pwquality.conf 를 바꿔줘도 됨 

    etry  : 패스워드 입력 실패 시 재시도횟수             
    difok  : 기존 패스워드와 비교. 기본값10 (50%)             
    minlen :  크레디트를 더한 패스워드최소길이               
    dcredit  : 정수 / 숫자에 주어지는 크레디트값. 기본 1             
    udredit  : 영어대문자에 주어지는 크레디트값               
    lcredit  : 영어 문자에 주어지는 크레디트값              
    ocredit : 숫자, 영어대/소문자를 제외한 특수문자

    -1 값을 주면 반드시 해당하는 문자를 포함

    적용 결과 : 

     

     

     

    정리 : PAM은 인증 방법 설정하는 인증 모듈이다 ~

     모듈 종류가 너무 많다~


    SELINUX

    리눅스 보안 

    보안 약함 

     

    그동안은 항상 셀리눅스 비활성화 하고 실습 했었다 

     cat /etc/selinux/config

    #SELINUX=enforcing
    SELINUX=disabled

     

    getsebool -a

     

    [root@localhost login]# ll / |head -3
    합계 24
    drwxr-xr-x    3 root root   19  6월 23 18:10 backup
    lrwxrwxrwx.   1 root root    7  4월 24 17:01 bin -> usr/bin

                      ^ 이 점 : '.selinux' 표시 

     

    SELINUX

    enforcing - SELinux security policy is enforced. 강제적활성  <------------------- 기본값
    permissive - SELinux prints warnings instead of enforcing. 로깅수행
    disabled - No SELinux policy is loaded. 비활성화

     

    SELINUXTYPE
    targeted - Targeted processes are protected, 부분 프로세스 수행     <------------------- 기본값
    mls - Multi Level Security protection. 레벨에 따른 안전 보호


    실습을 위해 이제 se리눅스 키자 

    vi /etc/selinux/config

    SELINUX=enforcing
    #SELINUX=disabled

     

    init 6 

     

    sestatus : 상태확인

    setenforce 1 : enforcing        정책설정 
    setenforce  0 : permissive      정책설정

    getenforce : 정책확인 

    **재부팅 시 유지는 되지 않음 **

     


    selinux 콘솔 패키지

     

     

    yum install setools-console

    rpm -ql setools-console 

     

    yum install policycoreutils-python

    rpm -ql policycoreutils-python

     

    cd /login
    ls -Z        : 디렉토리 보안 설정을 봄

    ps -efZ    : 해당 데몬 정책 확인할때 사용

     

    [root@localhost login]# mkdir /samba
    [root@localhost login]# ls -dZ /samba
    drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /samba

    unconfined_u 사용자 seinfo -u , semanage login -l
    object_r        시스템 자원을 통제

    subject_r  사용자나 프로세스 통제

    samba_share_t 타입
    s0                  레벨

     

    사용자 
    selinux 사용자 ID
    마지막에  _u로 표시

    unconfined => 제한되지 않은

     

    역활
    객체와 주체의 역활
    마지막에 _r로 표시
    object_r   시스템 자원을 통제
    subject_r  사용자나 프로세스 통제
    RBAC접근 통제를 사용함
    ps -Z

     

     

    레벨 
    MLS (다중레벨보안(레벨로 보안 지정)) / MCS (여러 카테고리 보안(카테고리로 보안 지정))
    S0:S0-0  :  낮은 보안
    s0-s0:c0.c1023   낮은보안 - 높은보안
    s0:c0.c1023  : 높은 보안


    ACCESS 접근제어

    : DAC(계정으로 관리)/ MAC (권한으로 관리 )

    DAC (Discretionary Access Control) => 개인 그룹 (계정/그룹) = 임의적 접근 통제  =setuid       / Ex) rootkit

    관리자는 맘대로 일반은 제한적 
    장 : 정보레벨을 손쉽게 제어
    단 : 중앙집중적인 접근 제어가 불가능
         관리자의 권한에 의존 트로이목마,악성코드,서비스적 침투에 약함

    MAC (MAC - Mandatory Access Control)=> 주체 오브젝트 권한 (보통 셀리눅스 / 서비스 및 시스템 범위 ) 

    =강제접근 통제  (소유권허권으로 강제 통제)

    소유권 허가권 주는것

    장 : 중앙집중적인 관리

    단 : 객체단위 세밀한 설정불가
         정책으로 인한 성능저하및 구현의 복잡성


    정보 보안 모델

    **계정이 아닌 문서 이야기이다

    쓰기=보안등급변경

    읽기=보안등급확인**

    1. 벨라파둘라(기밀성(인가된사용자만접근허용) 접근통제 모델)   

    단순보안 규칙 : 주체는 자신보다 높은 등급의 객체를 읽을 수 없음 /낮은 권한을 가진 주체가 높은 레벨의 객체에 접근 하는것을 통제           

    ==> 하이라키 Hierarchy 구조

     

    상위레벨 읽기금지정책 : 낮은 보안레벨에서 높은 보안문서 읽기 금지
    하위레벨 쓰기금지정책:  높은 보안모델에서 낮은 보안모델 쓰기 금지

     

    낮은 권한이 높은거 못봐 / 위가 아래 감시 가능 

    2. 비바(무결성(변조x위조x) 통제 모델)

    무결성에 기반하여 주체는 자신보다 낮은 등급에 있는 객체를 읽을수 없음

     

    하위레벨 읽기 금지정책 : 낮은 보안레벨에서 높은보안문서 읽기 가능 낮은 보안문서 읽기 불가
    상위레벨 쓰기 금지정책 : 낮은 보안레벨의 문서에서 높은 보안문서로 높일수 없음
                                           낮은 보안문서로 낮출순 있음 (한번 내려감 못올라감)

     

    한번 올라가면 낮은건 신경안쓰는거 / 내려갈수는있는데한번내려가면 못 올라감 

     

    https://blog.naver.com/365blackstar/223332723434

     

    접근 통제 모델

    문제6) 아래의 접근 통제 보안 모델에 대하여 설명 하시오. 가. 벨 라파듈라(BLP) 모델 나. 비바(BIB...

    blog.naver.com

    ㄴ 여기 자세함 이거 보셈


     

     

    yum install setools-console

     

    [정책리스트보기]

    seinfo -r  역활정책
    seinfo -t  타입정책
    seinfo -a  속성정책

     

    [보안정책로그]

    tail -4 /var/log/audit/audit.log

     

    yum install setroubleshoot-server  (보안로그 분석툴)

     

    [객체에 대한 정책 초기화]
    restorecon -v [파일/디렉토리]

    [복구시 자동 설정 정책(제안만해주고 바꾸지 않음)]
    matchpathcon [파일/디렉토리]

    [객체별 사전에 설정된 정책 조회]
    semanage fcontext -l | grep /var/www


    실습 ) 

    정책은 상속된다 

    디렉토리마다 정책 다르다 

     

    ps -ZC httpd       : 프로세스 정책확인

    http://192.168.10.10/setest.html

     

    chcon -t admin_home_t  /var/www/html/setest.html    : 파일 타입 변경

    http://192.168.10.10/setest.html    ===> forbidden 뜸

     

     restorecon -v setest.html     : 정책 초기화 (원복)

     

     

     chcon -t admin_home_t /var/www/html/setest.html

     matchpathcon  setest.html          : 제안만 해줌 바꾸지 않음

     

    [ 객체별 사전에(원래) 설정된 정책 조회 ]

    semanage fcontext -l | grep /var/www

     

    tail -5 /var/log/messages

    sealert -l 5c6203f6-49ad-4aac-907e-02f9702fa6dc     : 제안 자세히 보기 


    포트 정책 바꾸기 

    [ 특정포트 정책확인 ]
    seinfo --portcon=80

     

    [ 사용가능 포트 확인 ]

    semanage port -l | grep http_port_t
    semanage port -l | grep http

     

     

    포트에 대한 허용정책 확인
    sesearch  -A  -t  http_port_t  -s  httpd_t  -d          


    sesearch  -A  -t  http_cache_port_t  -s  httpd_t  -d  

     

     

    vi /etc/httpd/conf/httpd.conf 
         42 #Listen 80
         43 Listen 8888
    service httpd restart ===> 에러가 나면서 permission denied 발생

     

    이걸 해야돼

    semanage  port  -a  -t  http_port_t  -p tcp  8888   :허용포트 추가

    semanage  port  -l  |  grep  http_port_t  : 추가한것 확인

    netstat -lntup |grep httpd                      : 추가한것 확인 

    ㄴ 8888 되는것 확인 가능

     

    귀찮고 복잡하지? 

    그래서 처음부터 selinux를 disabled하고 시작하는거야 

     

    셀리눅스 끝~

     


    이제 도커랑 쿠버네티스 시작

     

    도커설치 

    도커 이미지 

    도커허브 올리는거 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    '보안' 카테고리의 다른 글

    2024.06.28.보안 day59  (0) 2024.06.28
    2024.06.27.보안 day58  (0) 2024.06.27
    2024.06.21.보안 day54  (0) 2024.06.21
    2024.06.20.보안 day53  (0) 2024.06.20
    2024.06.19.보안 day52  (0) 2024.06.19
    댓글