SElinux란 무엇일까?
리눅스의 보안을 강화해 주는 보안 커널이다. 제로데이공격 및 버퍼 오버플로우 등 어플리케이션 취약점으로 인한 해킹을 방지해 준다.
ftp, home dir 취약점, 세마포어 공유 메모리 관련 취약점, httpd가 생성하는 취약점등 다양하다
방화벽과의 차이라면 방화벽이 rule 기반이라면 selinux는 역할기반으로 접근권한을 관리한다.
즉 HTTP를 예로 들면 방화벽은 특정 IP나 특정 패턴의 dest가 80 port인 네트워크 접근을 막는다면,
Selinux는 http role을 갖는 계정으로 실행되는 어플리케이션(apache, cgi, php, java 등등)의 파일, 디렉토리, 소켓 생성,
device i/o, 프로그램 실행 등등에 대한 접근 및 실행 권한에 대한 전반적인 것들을 관리합니다.
다음은 SElinu는 다음과 같은 동작이 있다.
1. Enforcing (기본값) - SElinux가 켜저있고 정책에 위반된 모든 작업을 차단함
2. Permissive - SElinux가 켜저있지만 정책에 위반도니 사항에 대해 경고만 하도록 함(audit 로그에 기록하는 상태)
3. Disable - SElinux가 완전해ㅣ 꺼진 상태
아래의 명령으로 SElinux가 켜져있는지 확인하려면 아래의 명령 사용
enforcing으로 실행중에 있다.
sestatus
setenforce 0 으로 permissive를만들고 setenforce 1로 Enforcing을 만들 수 있다.
해당 파일을 열어본다
해당 부부능로 disabled로 바꾸면 된다.
리부팅시면 완료
방화벽이란 ?
방화벽을 rule 기반으로 포트, 서비스등을 차단할 수 있다.
예를들어 httpd, ssh, telnet 같은 서비스를 포트나 서비스 이름으로 차단이 가능하다.
디폴트 존이 현재 public으로 되있는것을 볼 수 있다. 존을 퍼블릭으로 딱히 입력을 하지 않아도 알아서 디폴트로 퍼블릭으로 설정된다.
위의 명령어는 현재 방화벽설정 리스트 전체를 보여준다. 어떤 프로토콜, 서비스, 포트가 열려있거나 닫혀있는지 알려준다.
위의 사진은 어떤 서비스가 열려있는지, 어떠 포트가 열려있는지 확인 하는 명령어이다.
위의 명령어는 서비스를 추가시키고,
리로드를 통해 방화벽 재시작
서비스 리스트 확인이다.
서비스를 삭제하고
재실행시켜
리스트를 확인한다.
포트를 추가시키고
리로드
리스트 확인이다.
삭제시키고 리스트를 확인한 모습이다.
yum -y install httpd
systemctl start httpd
systemctl enable httpd
아파치를 설치하고 실행 시키고 영구 실행 적용을 시킨다.
하지만 ip 접속시
접속이 안된다. 방화벽이 안열려 있기 떄문이다.
방화벽을 열어준다
인덱스파일을 만들어주고 안에 내 이름을 넣었다 그러고 재시작한후 ip 접속을 해본다.
확인 가능!!!
해당 파일에서 확인이 가능하다
쭉내려보면 아파치 홈디렉터리를 찾을 수 있다. 이곳을 다른디렉터로 바꾸면 홈디렉터리가 변경이 된다.
ps명령어는 현재 실행중인 프로세스 목록을 보여준다
ps 현재 사용자가 실행하고 있는 프로세스를 보여준다
전체 프로세스를 출력 해준다
ps -ef는 uid pid ppid를 출력 해준다
grep 명령을 사용해 user 가 사용중인 프로세스를 검색 하였다.
grep을 명령을 통해 httpd 실행 프로그램을 확인 하였다.
현재 pid 4852 yes 명령이 실행중이 다 한번 꺼보도록 하자
yes명령을 종료 시켜 보았다.
pkill을 통해 종료 시킬 수 있다.
ssh 접속 완료
kim in hak 단어가 있는 파일을 전송 해본다.
파일을 전송해본다.
파일을 확인해 볼 수 있다.
RunLevel 1
Resuce : 시스템 복구 모드이다. 단일 사용자 모드로서 관리자 쉘을 얻게 된다.
RunLevel 2
Multi-User : NFS를 지원하지 않는 Multi-User 모드이다. 즉, 네트워크를 사용하지 않는 상태의 텍스트 유저 모드를 뜻하는데 CentOS 7부터는 사용되지 않는 레벨이다. 다만 호환성을 위해 런레벨 3과 동일한 것으로 취급된다.
RunLevel 3
Full Multi-User : 텍스트 모드의 다중 사용자 모드이다. 일반적인 쉘 스크립팅 기반의 인터페이스로 작동하는 Multi-User 모드이다. 일반적으로 텍스트 유저 모드라고 부른다.
RunLevel 4
Multi-User(unused) : 기본적으로는 사용하지 않는 모드이다. 하지만 runlevel2와 같이 호환성을 위해 런레벨3과 같은 것으로 취급된다. 해당 단계에 대한 설정을 임의로 정의해서 별도로 사용하기도 한다.
RunLevel 5
Graphical : 그래픽 모드의 다중 사용자 모드이다. 기본적으로는 런레벨3과 동일하지만, GUI를 제공하는 그래픽 유저 모드이다.
RunLevel 6
Reboot : 시스템 재부팅을 나타내는 모드이다. 런레벨 0와 마찬가지로 이 상태로 변경하라는 명령을 내리게 되면 시스템을 재부팅 하게 된다. 혹시나 런레벨 6를 init default로 설정한다면 시스템은 무한 재부팅 상태가 되기 때문에 주의해야 한다.
현재 기본은 graphical 모드이다.
위의 명령을 통해 런레벨을 바꾸준다.
리부트 시키면 멀티유저로 실행된다.
그래피컬로 바꿔준다.
리부트 시키면 끝 ~~