4.10. SELinux 레이블 유지 관리
이 섹션에서는 파일 및 디렉터리를 복사, 이동 및 보관할 때 SELinux 컨텍스트에 발생하는 사항에 대해 설명합니다. 또한 복사 및 보관 시 컨텍스트를 보존하는 방법을 설명합니다.
4.10.1. 파일 및 디렉토리 복사 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
파일 또는 디렉터리가 복사되면 새 파일 또는 디렉터리가 없는 경우 새로 생성됩니다. 새 파일 또는 디렉터리의 컨텍스트는 원래 컨텍스트를 유지하는 데 옵션을 사용하지 않는 한 원본 파일이나 디렉터리의 컨텍스트가 아닌 기본 레이블 규칙을 기반으로 합니다. 예를 들어 사용자 홈 디렉터리에 생성된 파일은
user_home_t 유형으로 레이블이 지정됩니다.
touch file1
~]$ touch file1
ls -Z file1
~]$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
이러한 파일이
/etc 와 같은 다른 디렉터리에 복사되는 경우 새 파일이 /etc 의 기본 레이블 지정 규칙에 따라 생성됩니다. 추가 옵션 없이 파일을 복사하면 원래 컨텍스트가 유지되지 않을 수 있습니다.
ls -Z file1
~]$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
cp file1 /etc/
~]# cp file1 /etc/
ls -Z /etc/file1
~]$ ls -Z /etc/file1
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
file1 이 /etc 에 복사되면 /etc/file1 이 없으면 /etc/file1 이 새 파일로 생성됩니다. 위의 예에 표시된 대로 /etc/file1 은 default-labeling 규칙에 따라 etc_t 유형으로 레이블이 지정됩니다.
사용자가 원래 파일의 컨텍스트(예:
--preserve=context )를 유지하지 않는 한 기존 파일의 컨텍스트를 기존 파일의 컨텍스트를 복사하면 기존 파일의 컨텍스트가 유지됩니다. SELinux 정책은 복사 중에 컨텍스트가 유지되지 않도록 할 수 있습니다.
절차 4.11. SELinux 컨텍스트를 보존하지 않고 복사
이 절차에서는 cp 명령으로 파일을 복사할 때 옵션이 제공되지 않으면 유형이 대상 상위 디렉터리에서 상속됨을 보여줍니다.
- 사용자의 홈 디렉터리에서 파일을 만듭니다. 파일에는
user_home_t유형으로 레이블이 지정됩니다.touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/디렉터리는 다음 명령과 같이httpd_sys_content_t유형으로 레이블이 지정됩니다.ls -dZ /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow file1이/var/www/html/에 복사되면httpd_sys_content_t유형을 상속합니다.cp file1 /var/www/html/
~]# cp file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.12. 복사 시 SELinux 컨텍스트 보존
다음 절차에서는 복사 시 컨텍스트를 보존하기 위해
--preserve=context 옵션을 사용하는 방법을 보여줍니다.
- 사용자의 홈 디렉터리에서 파일을 만듭니다. 파일에는
user_home_t유형으로 레이블이 지정됩니다.touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/디렉터리는 다음 명령과 같이httpd_sys_content_t유형으로 레이블이 지정됩니다.ls -dZ /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - preserve
=context옵션을 사용하면 복사 작업 중에 SELinux 컨텍스트가 유지됩니다. 아래 표시된 대로 파일이/var/www/html/:에 복사될 때file1의user_home_t유형이 보존되었습니다.cp --preserve=context file1 /var/www/html/
~]# cp --preserve=context file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.13. 문맥 복사 및 변경
다음 절차에서는
--context 옵션을 사용하여 대상 복사의 컨텍스트를 변경하는 방법을 보여줍니다. 다음 예는 사용자의 홈 디렉터리에서 수행됩니다.
- 사용자의 홈 디렉터리에서 파일을 만듭니다. 파일에는
user_home_t유형으로 레이블이 지정됩니다.touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow context옵션을 사용하여 SELinux 컨텍스트를 정의합니다.cp --context=system_u:object_r:samba_share_t:s0 file1 file2
~]$ cp --context=system_u:object_r:samba_share_t:s0 file1 file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow --context가 없으면file2는unconfined_u:object_r:user_home_t컨텍스트로 레이블이 지정됩니다.ls -Z file1 file2
~]$ ls -Z file1 file2 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 -rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.14. 기존 파일에서 파일 복사
이 절차에서는 컨텍스트를 보존하는 데 옵션을 사용하지 않는 한 기존 파일을 통해 파일을 복사할 때 기존 파일의 컨텍스트가 보존되는 것을 보여줍니다.
- root 로서
/etc디렉토리에 새 파일file1을 만듭니다. 아래에 표시된 대로 파일에는etc_t유형으로 레이블이 지정됩니다.touch /etc/file1
~]# touch /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /etc/file1
~]$ ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow /tmp디렉터리에 다른file2파일을 생성합니다. 아래 표시된 대로 파일에는user_tmp_t유형으로 레이블이 지정됩니다.touch /tmp/file2
~]$ touch /tmp/file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~$ ls -Z /tmp/file2 -rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
~$ ls -Z /tmp/file2 -rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow file2로file1을 덮어씁니다.cp /tmp/file2 /etc/file1
~]# cp /tmp/file2 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 복사 후 다음 명령은
/etc/을 대체하는file1/tmp/file2의user_tmp_t유형이 아닌etc_t유형으로 레이블이 지정된 file1을 표시합니다.ls -Z /etc/file1
~]$ ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
중요
파일 및 디렉터리를 이동하지 않고 복사합니다. 이렇게 하면 올바른 SELinux 컨텍스트로 레이블이 지정되도록 하는 데 도움이 됩니다. 잘못된 SELinux 컨텍스트는 프로세스가 해당 파일 및 디렉터리에 액세스하지 못하도록 할 수 있습니다.
4.10.2. 파일 및 디렉토리 이동 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
파일과 디렉토리는 이동 시 현재 SELinux 컨텍스트를 유지합니다. 대부분의 경우 이 동작은 이동 중인 위치에 대해 올바르지 않습니다. 다음 예제에서는 사용자의 홈 디렉터리에서 Apache HTTP Server에서 사용하는
/var/www/html/ 디렉터리로 파일을 이동하는 방법을 보여줍니다. 파일이 이동되었으므로 올바른 SELinux 컨텍스트를 상속하지 않습니다.
절차 4.15. 파일 및 디렉토리 이동
- 홈 디렉터리로 변경하고 파일을 만듭니다. 파일에는
user_home_t유형으로 레이블이 지정됩니다.touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
/var/www/html/디렉터리의 SELinux 컨텍스트를 확인합니다.ls -dZ /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로/var/www/html/은/는httpd_sys_content_t유형으로 레이블이 지정됩니다./var/www/html/에서 생성된 파일 및 디렉터리는 이 유형을 상속하므로 이 유형으로 레이블이 지정됩니다. - root 로서
file1을/var/www/html/로 이동합니다. 이 파일이 이동되므로 현재user_home_t유형이 유지됩니다.mv file1 /var/www/html/
~]# mv file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1
~]# ls -Z /var/www/html/file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
기본적으로 Apache HTTP 서버는
user_home_t 유형으로 레이블이 지정된 파일을 읽을 수 없습니다. 웹 페이지를 포함하는 모든 파일에 user_home_t 유형으로 레이블이 지정되거나 Apache HTTP Server에서 읽을 수 없는 다른 유형이 있는 경우 Mozilla Firefox 와 같은 웹 브라우저를 사용하여 액세스하려고 할 때 권한이 거부됩니다.
중요
mv 명령을 사용하여 파일과 디렉터리를 이동하면 잘못된 SELinux 컨텍스트가 발생하여 Apache HTTP Server 및 Samba와 같은 프로세스가 이러한 파일 및 디렉터리에 액세스하지 못할 수 있습니다.
4.10.3. 기본 SELinux 컨텍스트 확인 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
matchpathcon 유틸리티를 사용하여 파일과 디렉터리에 올바른 SELinux 컨텍스트가 있는지 확인합니다. 이 유틸리티는 시스템 정책을 쿼리한 다음 파일 경로와 연결된 기본 보안 컨텍스트를 제공합니다.[6] 다음 예제에서는 matchpathcon 을 사용하여 /var/www/html/ 디렉터리의 파일에 올바르게 레이블이 지정되어 있는지 확인하는 방법을 보여줍니다.
절차 4.16. matchpathcon으로 기본 SELinux Conxtext 확인
- root 사용자로
/var/www/html/디렉터리에 세 개의 파일(file1,file2,file3)을 만듭니다. 이러한 파일은/var/www/html/:의httpd_sys_content_t유형을 상속합니다.touch /var/www/html/file{1,2,3}~]# touch /var/www/html/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/
~]# ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
file1유형을samba_share_t로 변경합니다. Apache HTTP Server는samba_share_t유형으로 레이블이 지정된 파일 또는 디렉터리를 읽을 수 없습니다.chcon -t samba_share_t /var/www/html/file1
~]# chcon -t samba_share_t /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow matchpathcon-V옵션은 현재 SELinux 컨텍스트를 SELinux 정책의 올바른 기본 컨텍스트와 비교합니다. 다음 명령을 입력하여/var/www/html/디렉터리의 모든 파일을 확인합니다.matchpathcon -V /var/www/html/*
~]$ matchpathcon -V /var/www/html/* /var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2 verified. /var/www/html/file3 verified.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
matchpathcon 명령의 다음 출력에서는
file1 이 samba_share_t 유형으로 레이블이 지정되었지만 httpd_sys_content_t 유형으로 레이블이 지정되어야 함을 설명합니다.
/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
레이블 문제를 해결하고
file1 에 대한 Apache HTTP Server 액세스를 허용하려면 root로 restorecon 유틸리티를 사용합니다.
restorecon -v /var/www/html/file1
~]# restorecon -v /var/www/html/file1
restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
4.10.4. tar로 파일 아카이브 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
tar 유틸리티는 기본적으로 확장된 속성을 유지하지 않습니다. SELinux 컨텍스트는 확장된 특성에 저장되므로 파일을 보관할 때 컨텍스트가 손실될 수 있습니다. tar --selinux 명령을 사용하여 컨텍스트를 유지하고 아카이브에서 파일을 복원하는 아카이브를 생성합니다. tar 아카이브에 확장 속성이 없는 파일이 포함되어 있거나 확장된 속성이 시스템 기본값과 일치하도록 하려면 restorecon 유틸리티를 사용합니다.
tar -xvf archive.tar | restorecon -f -
~]$ tar -xvf archive.tar | restorecon -f -
디렉터리에 따라
restorecon 을 실행하려면 root 사용자여야 할 수 있습니다.
다음 예제에서는 SELinux 컨텍스트를 유지하는
tar 아카이브를 생성하는 방법을 보여줍니다.
절차 4.17. tar 아카이브 만들기
/var/www/html/디렉터리로 변경하고 SELinux 컨텍스트를 확인합니다.cd /var/www/html/
~]$ cd /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow html]$ ls -dZ /var/www/html/ drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .
html]$ ls -dZ /var/www/html/ drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
/var/www/html/에 세 개의 파일(file1,file2,file3)을 만듭니다. 이러한 파일은/var/www/html/:의httpd_sys_content_t유형을 상속합니다.html]# touch file{1,2,3}html]# touch file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow html]$ ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
html]$ ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로 다음 명령을 입력하여
test.tar이라는 tar 아카이브를 만듭니다. SELinux 컨텍스트를 유지하려면--selinux를 사용합니다.html]# tar --selinux -cf test.tar file{1,2,3}html]# tar --selinux -cf test.tar file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
test/라는 새 디렉터리를 생성한 다음 모든 사용자가 모든 사용자가 액세스할 수 있도록 허용합니다.mkdir /test
~]# mkdir /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow chmod 777 /test/
~]# chmod 777 /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test.tar파일을test/:에 복사합니다.cp /var/www/html/test.tar /test/
~]$ cp /var/www/html/test.tar /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/디렉터리로 변경합니다. 이 디렉터리에 다음 명령을 입력하여tar아카이브를 추출합니다.--selinux옵션을 다시 지정합니다. 그러지 않으면 SELinux 컨텍스트가default_t로 변경됩니다.cd /test/
~]$ cd /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test]$ tar --selinux -xvf test.tar
test]$ tar --selinux -xvf test.tarCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux 컨텍스트 보기.
httpd_sys_content_t유형은default_t로 변경되지 않고--selinux를 사용하지 않은 상태로 유지되었습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/디렉터리가 더 이상 필요하지 않은 경우 root로 다음 명령을 입력하여 제거하고 여기에 있는 모든 파일을 삭제합니다.rm -ri /test/
~]# rm -ri /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
모든 확장 속성을 유지하는
--xattrs 옵션과 같이 tar 에 대한 자세한 내용은 tar(1) 매뉴얼 페이지를 참조하십시오.
4.10.5. 별이있는 파일 아카이브 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
star 유틸리티는 기본적으로 확장 속성을 유지하지 않습니다. SELinux 컨텍스트는 확장된 특성에 저장되므로 파일을 보관할 때 컨텍스트가 손실될 수 있습니다. star -xattr -H=exustar 명령을 사용하여 컨텍스트를 유지하는 아카이브를 생성합니다. star 패키지는 기본적으로 설치되지 않습니다. 별표 를 설치하려면 root 사용자로 yum install star 명령을 실행합니다.
다음 예제에서는 SELinux 컨텍스트를 유지하는
별 아카이브를 생성하는 방법을 보여줍니다.
절차 4.18. 별 아카이브 생성
- root 로서
/var/www/html/에 세 개의 파일(file1,file2,file3)을 만듭니다. 이러한 파일은/var/www/html/:의httpd_sys_content_t유형을 상속합니다.touch /var/www/html/file{1,2,3}~]# touch /var/www/html/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/
~]# ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/디렉터리로 변경합니다. 이 디렉터리에서 root로 다음 명령을 입력하여test.star:이라는 별 아카이브를 생성합니다.cd /var/www/html
~]$ cd /var/www/htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow html]# star -xattr -H=exustar -c -f=test.star file{1,2,3} star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).html]# star -xattr -H=exustar -c -f=test.star file{1,2,3} star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
test/라는 새 디렉터리를 생성한 다음 모든 사용자가 모든 사용자가 액세스할 수 있도록 허용합니다.mkdir /test
~]# mkdir /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow chmod 777 /test/
~]# chmod 777 /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
test.star파일을test/:에 복사합니다.cp /var/www/html/test.star /test/
~]$ cp /var/www/html/test.star /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/로 변경합니다. 이 디렉터리에 다음 명령을 입력하여star아카이브를 추출합니다.cd /test/
~]$ cd /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test]$ star -x -f=test.star star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
test]$ star -x -f=test.star star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux 컨텍스트 보기.
httpd_sys_content_t유형이default_t로 변경되지 않고 유지되었습니다. 이 유형은-xattr -H=exustar옵션이 사용되지 않았습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/디렉터리가 더 이상 필요하지 않은 경우 root로 다음 명령을 입력하여 제거하고 여기에 있는 모든 파일을 삭제합니다.rm -ri /test/
~]# rm -ri /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 더 이상
별이필요하지 않은 경우 root 로서 패키지를 제거합니다.yum remove star
~]# yum remove starCopy to Clipboard Copied! Toggle word wrap Toggle overflow
별에 대한 자세한 내용은 star(1) 도움말 페이지를 참조하십시오.