Notice
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

정보통신공학과 노선변경기

리눅스 관리 7일차 SELinux, semanage (fcontext, port) context type 중심, 포트레이블(Port Label) 본문

Sub3_리눅스 관리

리눅스 관리 7일차 SELinux, semanage (fcontext, port) context type 중심, 포트레이블(Port Label)

HEONPOLI 2021. 5. 18. 23:49

*SELinux

Security Enhanced Linux

system을 더 안전하게 사용

강제접근 모델인 MAC 사용하여 시스템의 보안을 강화하는 리눅스 커널모듈

<<MAC(Mandatory Access Control)>>

강제 접근 제어 모델, 주체와 객체에 부여된 보안 레이블과 정책 허용 스위치에 의해서 접근을 제어
주체의 보안레이블이 객체에 접근할 수 있는 경우 접근허용

 

**동작모드

selinux를 동작 할것인가에 대한 활성화, 비활성화 여부

getenforce 현재 동작모드 확인 명령어

disabled 모드 : 실행안함, 사용자 권한으로만 접근제어 하겠다(DAC). 부팅상태에서는 적용안됨

        selinux 설정파일 : /etc/selinux/config

        에서 SELINUX=동작모드 설정

        selinux 모델 실행불가, setenforce 1 0 로 변경안됨

enforcing 모드 : setenforce 1 로 교체, selinux 규칙 사용하겠다.

permissive 모드 : setenforce 0 로 교체, 활성화 되어있지만 임시로 비활성화 하겠다

            selinux 정책을 강제하지 않는다.








**컨텍스트(context)

파일이나 디렉토리에 설정하는 규칙

selinux 활성화 => 모든 프로세스 파일 디렉토리에 context 부여 

ps Z, ls -Z 명령어로 컨텍스트 확인가능

system_u:object_r:admin_home_t: s0

    사용자      역할     유형 컨텍스트    민감도레벨

 

***컨텍스트 수정

chcon : 컨텍스트 일시적으로 변경하는 명령어, 테스트할 때는 쓰되 일반적으로는 사용X

    type 바꾸기 = chcon -t tmp_t anacoda-ks.cfg,,,, anaconda 컨텍스트 타입 tmp_t로 교체

 

restorecon : 컨텍스트를 복구하는 명령어, 원래 설정으로 되돌린다.

    [options] -R -r = 디렉토리가 인자라면 하위 디렉토리까지 지정

          -F     = context 강제로 재설정

          -v     = context 변경사항 출력

restorecon -RFv DIRECTORY => 해당 디렉토리&하위 파일 컨텍스트 기본값으로 설정

디렉토리의 기본 설정값을 따라가서 context 적용된다 

 

semanage fcontext : 영구적으로 컨텍스트 적용

    [options] -a = context 추가

          -t = context 유형지정

          -l = 등록한 context 확인

    semanage fcontext -a -t “CONTEXT” “DIRECTORY(/.*)?” => 기본값 변경,설정할 때

 

적용순서는 semanage => restorecon

****예제****

디렉토리의 기본 설정값을 따라가서 context 적용된다 

ex) /tmp 에서 touch fileA => tmp 디렉토리 하위 파일이므로 tmp_t 유형

cp fileA /mnt 하면 /mnt밑에 fileA를 하나더 똑같이 만들겠다는 뜻이므로, type도 /mnt의 type을 따라간다.

 

mv fileA /mnt/filec 하면 위치만 바꿔주는 것이므로 기존의 context를 그대로 가져간다.

 

restorecon -Rv /mnt => filec의 type이 default_t 로 변경된다.

semanage fcontext -a -t ‘mnt_t’ ‘/mnt(/.*)?’ =>  /mnt 밑의 파일 디렉토리 전부다에 영구적 기본값을 mnt_t 해주겠다는 뜻

하고 다시 restorecon -Rv /mnt 해주면 filec의 type context가 mnt_t가 된다.

/.* == 모든 문자열

***********************************************

**부울(SELinux Boolean)

컨텍스트 유형이 맞지않더라도 동작이 필요할 때, 동작 단위의 제어를 할 때 사용하는 속성값

 

**포트 레이블(SELinux Port Label)

네트워크로 접근하는 서비스에 대해서 특정 네트워크 포트를 어떤 서비스용도로 사용할지 지정해주는 규칙 

semanage port -a -t “LABEL”  PORT_NUM -p [TCP | UDP] => 특정 포트번호에 이름 부여

            포트레이블 이름 

기존에 있던 이름 바꾸기 -m, 없애기 -d 

***port설정==== httpd 예시

/etc/httpd/conf/httpd.conf 에서 listen port 8888 지정해줬다면

systemctl restart httpd 안될거임, 왜냐하면 http_port_t 에 포트번호 8888 지정을 해줘야함

semanage port -a -t http_port_t 8888 -p tcp 로 지정

semanage port -l | grep 8888 로 포트번호 들어갔는지 확인

systemctl restart 됨, curl localhost:8080 이런식으로 접속해야 접속가능(포트번호 80에서 8888로 바꿔줬으니까)

 

내가 해본것

/etc/httpd/conf/httpd.conf 에서 listen 9245로 지정

semanage port -l | grep 9245 로 사용중인 포트인지 확인, 사용중 아닌 포트로 지정할거니까 뜨면 안돼

위에서 설정해준 8888은 grep 검색하면 http_port_t 에 있다고 나옴

 

semanage port -a -t http_port_t 9245 -p tcp 로 포트를 지정해주고 확인

 

semanage port -l | grep -w 'http_port_t'

semanage port -l | grep 9245

두가지 방법으로 확인가능 

 

최종적으로는 지정한 포트번호로 방화벽을 열어줘야 접속가능

firewall-cmd --add-port=9245/tcp