관리 메뉴

IT창고

리눅스 SELinux 2 본문

보안/Security

리눅스 SELinux 2

방구석여포 2018. 7. 3. 01:02

2018/07/02 - [보안/Security] - 리눅스 SELinux 1에 이어서 진행합니다.


File Security Contexts에 대해 알아보겠습니다.

File Security Contexts는 파일의 레이블 지정은 각 파일에 대해 올바른 접근 제어를 위한 필수요소입니다.


테스트를 해보겠습니다.

ls -Z 명령어로 SELinux 사용자를 확인할수있습니다. 해당 파일의 보안컨텍스트 레이블을 chcon -u 옵션으로 system_u 로 레이블을 변경할 수 있습니다.


 SELinux 보안컨텍스트 중 guest_u, user_u, sysadm_u가 있는데 이 3개를 다른 계정 3개에 매핑하도록 하겠습니다.

useradd -Z 명령어로 계정을 만듬과 동시에 SELinux사용자와 매핑할수있습니다.


yum -y install setools-console 패키지를 설치하면 seinfo명령어를 사용할수있게 되는데 SELinux사용자의 역활(Role)을 확인할수있습니다. 특이점은 -u사이에 공백이 없습니다.


-r 옵션을 사용하면 해당 SELinux사용자의 역활이 접근할수있는 유형(type)을 확인할수있습니다. 많은 유형들이 있으며 원하는 유형이있는지 grep같은 명령어로 찾아보는편이 빠릅니다.

shutdown 유형이 있는지 확인해볼수있습니다.


간단한 테스트를 해보겠습니다.

shutdown의 소유권은 0755로 되어있는데 root가 아니면 사용할수없다는 메세지를 보여줍니다.


이번에는 shutdow 파일에 SetUID를 걸고 test-1, test-2, test-3계정으로 명령어를 실행시켜보았습니다.

test-1과 test-2계정은 여전히 실행이 불가능하지만 shutdown 유형을 가지고 sysadm라는 SELinux 사용자와 매핑된 test-3계정은 사용이 가능게됩니다.



SELinux Boolean에 대해 알아보겠습니다.

SELinux가 Enforcing모드로 활성화된 상태에서 서버를 운영하기위해서는 보안 컨텍스트 수정이 필요합니다.

보안컨텍스트를 수정하거나 정책 및 모듈 생성하는 일이 초기에는 매우 어렵기 떄문에 자주 사용하는 정책을 Boolean(0,1)을 통해서 설정할수있습니다.


getsebool -a 명령어로 SELinux Boolean의 목록을 전부 확인해볼수있습니다.


semanage boolean -l 명령어로 위와 같이 Boolean의 모든 정책과 함꼐 설명을 확인해볼수있습니다.


ftp 서비스를 사용해보도록 하겠습니다.

SELinux가 활성화된 상태에서 바로 ftp를 연결하면 접속이 불가능합니다. 정책을 살펴보면 ftp_home_dir가 off로 되어있는데 이 상태를 바꿔줘야만 합니다.

setsebool -P ftp_home_dir  1명령어를 사용하면 off가 on으로 바뀌게 됩니다. 0은 off로 바뀝니다.

SELinux Boolean 정책을 확인해 정상 작동하도록 조정해야합니다 대표적으로 웹서버 같이 SELinux가 활성화된 상태에서 웹서버를 돌리고 싶다면 getsebool -a | grep "http" 으로 http에 관련된 SELinux Boolean정책을 확인해야합니다.



마지막으로 Setroubleshoot 에러조회에 대해알아보겠습니다.

Setroubleshoot는 Python으로 만들어진 유틸리티로 SELinux의 어려운 에러메세지를 번역하고 처리방안을 제시해줍니다.

yum -y install setroubleshoot 명령어로 패키지를 설치합니다 setroubleshoot는 시스템메세지버스 데몬을 사용하기에 service messagebus restart를 한번해주면 시작됩니다.


해당 리눅스에 테스트를 위하여 httpd데몬을 실행키셔 웹서버를 켜고 간단한 html파일을 /var/www/html/ 디렉토리에 넣었습니다. 다른 리눅스에서 elinks로 접속해보면 접속이 되지 않습니다. 퍼미션 즉 권한이 없기 떄문입니다.


웹서버 root디렉토리의 권한과 html파일의 권한이 같지 않은걸 확인할수있습니다.


Setroubleshoot패키지를 제대로설치하고 데몬을 재실행시켰다면 /var/log/message 에서 SELinux의 에러메세지를 확인해볼수있습니다. 해당 로그에 보면 run sealert -l 9cb88255-0756-4445-84cf-567619c393f9 부분이 있는데 로그의 제안대로 이 명령어를 실행시켜보겠습니다.


---------------------------------------------------------------------------------------------

/var/www/html/test2.html 디폴트 레이블은 httpd_sys_content_t이 되어야 합니다. 

Then restorecon을 실행할 수 있습니다. 

Do

# /sbin/restorecon -v /var/www/html/test2.html

---------------------------------------------------------------------------------------------

위의 사진에서 처럼 어떻게 수정해야할지 제안도 해줍니다.


에러메세지에서 말한 방법대로 실행후 다시 웹서버에 접속하게 되면 정상적인 접속이 가능하게 됩니다.


Tip

Setroubleshoot말고도 audit2why라는 시스템의 audit로그가 왜 차단되었는지 설명과 함께 출력해주는 유틸리티도 있습니다.




Comments