개요
chcon은 리눅스 환경에서 SELinux 보안 컨텍스트(Security Context)를 임시로 변경할 때 사용하는 핵심 명령어입니다. 본 글에서는 chcon의 실무 활용 패턴 4가지와 함께, 시스템 재부팅이나 복원 작업 시 발생할 수 있는 주의점을 명확히 살펴봅니다.
SELinux 보안 컨텍스트 확인과 chcon 기본 문법
chcon 명령어 실습을 위한 독립된 작업 디렉터리를 생성하고 이동하기 위해 mkdir -p /tmp/chcon_lab && cd /tmp/chcon_lab 명령어를 실행합니다.

SELinux 보안 컨텍스트 확인 및 변경 실습에 사용할 샘플 파일을 생성하기 위해 touch web_sample.html 명령어를 실행합니다.

ls -Z web_sample.html 명령어를 실행하여 대상 파일에 설정된 SELinux 보안 컨텍스트를 확인합니다.
출력 결과의 ? 표시는 현재 시스템에서 SELinux가 비활성화(Disabled) 상태이거나 컨텍스트 정보가 할당되지 않았음을 나타냅니다.
파일이나 디렉터리의 보안 컨텍스트를 변경할 때 사용하는 chcon 명령어의 기본 문법은 chcon [옵션] 컨텍스트 파일명 형태입니다.
⚙️ [주요 옵션]
-t : 파일 또는 디렉터리의 보안 컨텍스트 타입(Type)을 변경합니다.-u : 보안 컨텍스트의 사용자(User)를 변경합니다.-r : 보안 컨텍스트의 역할(Role)을 변경합니다.-R : 디렉터리와 내부 파일까지 재귀적(Recursive)으로 컨텍스트를 변경합니다.--reference : 지정한 참조 파일의 보안 컨텍스트와 동일하게 대상을 변경합니다.-v : 보안 컨텍스트 변경 작업 과정을 화면에 상세하게 출력합니다.

특정 보안 타입(-t) 변경 실무 패턴
웹 서버 보안 컨텍스트 변경 실습을 진행하기 위해 mkdir -p /tmp/chcon_lab && touch /tmp/chcon_lab/index.html 명령어를 실행하여 작업 디렉터리와 샘플 웹 문서를 생성합니다.

웹 서버 데몬이 파일에 정상적으로 접근할 수 있도록 chcon -t httpd_sys_content_t /tmp/chcon_lab/index.html 명령어를 실행하여 파일의 컨텍스트 타입을 httpd_sys_content_t로 변경합니다.

ls -Z /tmp/chcon_lab/index.html 명령어를 실행하여 파일에 적용된 보안 컨텍스트를 확인합니다.
출력 결과의 ? 표시는 현재 시스템에서 SELinux가 비활성화(Disabled)되어 있어 변경된 컨텍스트 정보가 할당되지 않았음을 나타냅니다.

참조 파일 복사(–reference) 및 하위 디렉터리 재귀 적용(-R)
하위 디렉터리 재귀 적용 실습에 사용할 디렉터리와 내부 스타일시트 파일을 생성하기 위해 mkdir -p /tmp/chcon_lab/public_html && touch /tmp/chcon_lab/public_html/style.css 명령어를 실행합니다.

참조 파일 복사 실습의 대상이 될 샘플 웹 페이지를 생성하기 위해 touch /tmp/chcon_lab/target_page.html 명령어를 실행합니다.

chcon --reference=/tmp/chcon_lab/index.html /tmp/chcon_lab/target_page.html 명령어를 실행하여 기존 index.html 파일에 설정된 보안 컨텍스트를 target_page.html 파일에 그대로 복제합니다.--reference 옵션을 사용하면 복잡한 컨텍스트 값을 직접 입력하지 않고도 정상 동작하는 파일의 설정을 안전하게 가져올 수 있습니다.

chcon -R -t httpd_sys_content_t /tmp/chcon_lab/public_html 명령어를 실행하여 public_html 디렉터리와 내부의 모든 파일에 httpd_sys_content_t 타입을 일괄 적용합니다.-R 옵션을 지정하면 하위 디렉터리 구조 전체에 재귀적으로 보안 컨텍스트가 반영됩니다.

ls -laZ /tmp/chcon_lab/public_html 명령어를 실행하여 디렉터리와 내부 파일에 적용된 보안 컨텍스트를 상세히 확인합니다.
출력 결과의 ? 표시는 현재 시스템에서 SELinux가 비활성화(Disabled) 상태여서 컨텍스트 정보가 할당되지 않았음을 나타냅니다.

chcon 사용 시 반드시 알아야 할 한계와 주의점
SELinux 컨텍스트 복구 도구인 restorecon 명령어를 사용하기 위해 apt-get update -qq && apt-get install -y policycoreutils 명령어를 실행하여 관련 패키지를 설치합니다.

컨텍스트 초기화 실습에 사용할 테스트 문서를 생성하기 위해 touch /tmp/chcon_lab/warning_test.txt 명령어를 실행합니다.

chcon -t tmp_t /tmp/chcon_lab/warning_test.txt 명령어를 실행하여 파일의 보안 컨텍스트 타입을 임시로 tmp_t로 변경합니다.chcon을 통한 변경은 정책에 영구 등록되는 것이 아니라 일시적으로 적용되는 특성을 가집니다.

ls -Z /tmp/chcon_lab/warning_test.txt 명령어를 실행하여 파일에 변경된 보안 컨텍스트가 적용되었는지 확인합니다.
출력 결과의 ? 표시는 현재 시스템에서 SELinux가 비활성화(Disabled) 상태여서 컨텍스트 정보가 할당되지 않았음을 나타냅니다.

restorecon -v /tmp/chcon_lab/warning_test.txt 명령어를 실행하여 시스템 정책에 정의된 기본 보안 컨텍스트로 복원을 시도합니다.chcon으로 임의 변경한 설정은 restorecon 실행이나 파일시스템 재레이블링(autorelabel) 발생 시 기본 정책 값으로 초기화되므로, 영구적인 설정을 원할 때는 semanage fcontext를 사용해야 합니다.

ls -Z /tmp/chcon_lab/warning_test.txt 명령어를 실행하여 컨텍스트 복원 명령 이후의 상태를 확인합니다.
출력 결과의 ? 표시는 현재 시스템에서 SELinux가 비활성화(Disabled) 상태로 동작하고 있음을 나타냅니다.

지금까지 리눅스 chcon 명령어를 활용해 SELinux 보안 컨텍스트를 변경하는 방법과 사용 시 주의점에 대해 정리해보았습니다.
임시 변경에 유용한 명령어인 만큼 기본 정책과의 차이를 잘 이해하고 상황에 맞게 안전하게 활용해 보시기 바랍니다.