1. CentOS 7 에서의 웹 서버 구성 중 문제점 발견
RedHat CentOS 7 버전 이상의 Selinux 정책을 적용중인 서버에서 최초로 웹서버를 구동하게 되면 첫 번째로 맞이하기 쉬운 http 오류 메세지 입니다.
이 메세지는 사용자가 요청한 웹 서비스(지금은 html 파일을 읽고 사용자의 웹페이지에 출력하는 행동)
에 응답하기 위해 웹 서버(Nginx)가 서버에 존재하는 html 파일에 접근할 때 권한을 거부당했기 때문에 발생합니다.
UNIX/Linux 는 기본적으로 DAC(Discretionary Access Control) 방식을 사용하여 사용자계정에 기반하여 파일에 대한 접근 권한을 설정하는데, 기본적인 umask(022) 로 설정되어있다면 일단 html 파일에 대한 nginx 계정의 html 파일을 읽을 권한은 주어져 있어 문제점을 찾을 수 없을 것입니다.
하지만 CentOS 7 은 기본적인 사용자계정 중심인 DAC 모델 외에도 강력한 정책인 Selinux 정책을 추가적으로 이용하고 있습니다. MAC(Mandatory Access Control) 모델의 보안 요소를 추가로 적용시켜 사용자계정 권한 탈취 등의 취약점을 보완하고 있습니다. Selinux 가 제공하는 보안 요소 중 파일에 대한 직접적인 권한을 제어하는 보안 컨텍스트는 각각 정책으로 이루어진 태그의 형태로 파일에 직접 라벨링하여 부여합니다.
2. SELinux - 보안 컨텍스트와 불린
보안 컨텍스트는 사용자, 역할, 타입, 레이블 총 4가지로 구성되어있으며 ls 명령어의 -Z 옵션을 통해 확인할 수 있습니다. 컨텍스트는 구분별로 각각 끝에 사용자(user)는 _u, 역할(role)은 _r, 타입(type)은 _t 로 표기되어 구분하기 쉽습니다.
사용자 속성은 역할 속성과 연계하여 사용자 별로 역할에 맞는 권한을 부여받을 수 있으며
타입 속성을 이용하면 타입의 이름을 지정하는 것으로 개별로 지정된 타입들에 알맞는 권한을 부여받을 수 있습니다.
보안컨텍스트들이 무엇인지 대충 알았다면 지금 문제가 일어나고 있는 파일들을 살펴봅니다. 현재 403 에러가 발생하고 있는 페이지는 home.html 파일로, 문제 없이 읽어오는 index.html 파일과는 보안 컨텍스트 중 사용자와 타입 부분이 다르게 설정된 것을 확인할 수 있습니다.
사용자 컨텍스트는 역할과 연계되는데, 역할 부분은 object_r 로 동일하기 때문에 영향을 미치고 있는 부분으로 판단하기에는 어렵습니다. 그렇다면 서로 다른 타입 컨텍스트가 권한 부여에 영향을 끼치고 있다는 것을 유추할 수 있습니다.
index.html 의 타입 컨텍스트는 http_sys_rw_content_t 로, http 데몬을 이용하여 접근 시 "읽고, 쓰는" 권한을 부여한다는 의미를 가집니다. 따라서 index.html 파일은 직접 웹 서버로부터 접근 시 열람을 허가하여주는 보안 컨텍스트가 지정되어 있다고 볼 수 있습니다.
home.html 파일에 지정된 default_t 는 selinux boolean 이라고 불리는 기본 정책을 그대로 따르는 타입입니다. 이 기본 정책들은 getsebool 명령어로 확인할 수 있으며, "on/off" 로 현재 정책이 적용 중인지를 알 수 있습니다.
boolean 중에는 http 와 관련된 설정들이 몇가지 존재하는 것을 확인할 수 있는데, 이 정책들은 http 데몬이 여러가지 역할을 수행할 수 있는 권한을 개별적으로 부여하고 있습니다. 이 부분 또한 추후 다루도록 하겠습니다.
여기서 볼 수 있는 httpd_unified boolean 은 CentOS 7 버전 이상에서 기본값이 off 로 변경된 정책입니다. 이 정책이 on 일 경우, 웹 문서 디렉터리의 모든 파일들은 "읽고, 쓰고, 실행하는" 모든 권한에 대하여 동일하게 httpd_sys_content* 보안 컨텍스트가 적용됩니다(모든 권한 부여). 반대로 off 인 경우에는 기본적으로 httpd_sys_content 만이 부여되어 "읽기" 기능만이 부여되며 필요한 경우 각각의 파일에 직접 httpd_sys_rw_content 등을 부여하여 사용해야 합니다. (httpd_sys_content 만이 부여된다 해도 페이지 열람이 가능합니다만, 이 부분은 좀 더 확인이 필요할 것 같습니다.)
Red Hat 에서 판단하길, 어느정도 사용자들이 selinux에 익숙해졌기 때문에 더욱 강한 보안 정책을 적용해도 무리가 없다고 여겨졌기 때문에 이와 같이 기본 보안 정책을 강화하였다고 말합니다.
3. 타입(type) 보안컨텍스트 변경
chcon 명령어를 사용하여 보안 컨텍스트의 요소를 변경할 수 있습니다. 이 때 변경할 컨텍스트의 이름을 미리 알고 있어야 합니다. 이 때 옵션 -u, -r, -t 을 사용하여 어떤 컨텍스트의 요소를 변경할 지 선택할 수 있습니다.
이제 home.html 파일에 대하여 DAC 보안정책 중 other 사용자에 대한 읽기(r) 권한이 부여되어 있는 것과, MAC 보안정책 중 http 데몬에 대한 읽기(httpd_sys_content_t) 권한이 모두 부여되어 웹페이지의 열람이 가능한 것을 확인할 수 있습니다. (마찬가지로 css 파일과 같이 함께 열람이 필요한 파일도 권한을 부여해 주어야 페이지의 정상적인 작동이 가능합니다.)
4. 디렉터리에 보안 컨텍스트 추가
이와 같이 매번 생성한 웹 문서 파일마다 보안 컨텍스트를 변경하기에는 불필요한 노동이 소요되기 때문에, 자동적으로 생성되는 파일마다 보안 컨텍스트를 추가하려고 합니다. 단, httpd_unified boolean 을 "on" 으로 변경하는 것은 보안적으로 개별의 파일을 관리하기 어려우며, 기본적으로 매우 약한 보안성을 가지게 되기 때문에 추천하지 않습니다.
디렉터리 자체에 대한 컨텍스트는 실제 웹 문서를 구동하는 데 끼치는 영향은 없지만, 디렉터리에 보안 컨텍스트가 지정될 경우 하위에 새롭게 생성된 모든 파일에 대해서는 같은 컨텍스트가 지정되는 특성이 있습니다. 이 특성을 이용한다면 보다 용이하게 컨텍스트를 관리할 수 있습니다.
'ITdata > Web Server' 카테고리의 다른 글
(CentOS7/Linux) yarn 설치 (0) | 2019.07.05 |
---|