정보통신공학과 노선변경기
리눅스 관리 7일차 SELinux, semanage (fcontext, port) context type 중심, 포트레이블(Port Label) 본문
리눅스 관리 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
'Sub3_리눅스 관리' 카테고리의 다른 글
리눅스 관리 9일차 시험 (0) | 2021.05.21 |
---|---|
리눅스 관리 8일차 NFS (0) | 2021.05.21 |
리눅스 관리 6일차 find OpenSSH NTP Firewall 방화벽(firewall-config, firewall-cmd) (0) | 2021.05.18 |
리눅스 관리 5일차 로그관리 journalctl 로그규칙 yum (0) | 2021.05.14 |
리눅스 관리 4일차 systemd systemctl 부트프로세스 네트워크관리(nmcli) (0) | 2021.05.13 |