4.7. SELinux 컨텍스트 - 파일 레이블 지정
SELinux를 실행하는 시스템에서는 보안 관련 정보를 나타내는 방식으로 모든 프로세스와 파일에 레이블이 지정됩니다. 이 정보를 SELinux 컨텍스트라고 합니다. 파일의 경우 ls -Z 명령을 사용하여 확인할 수 있습니다.
ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
~]$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
이 예에서 SELinux는 사용자(
unconfined_u), 역할(object_r), 유형(user_home_t) 및 수준(s0)을 제공합니다. 이 정보는 액세스 제어 결정을 내리는 데 사용됩니다. DAC 시스템에서는 Linux 사용자 및 그룹 ID를 기반으로 액세스가 제어됩니다. SELinux 정책 규칙은 DAC 규칙 후에 확인됩니다. DAC 규칙이 먼저 액세스를 거부하면 SELinux 정책 규칙이 사용되지 않습니다.
참고
기본적으로 새로 생성된 파일과 디렉터리는 상위 디렉터리의 SELinux 유형을 상속합니다. 예를 들어
/etc 디렉토리에 etc_t 유형으로 레이블이 지정된 새 파일을 생성할 때 새 파일은 동일한 유형을 상속합니다.
ls -dZ - /etc drwxr-xr-x. root root system_u:object_r:etc_t:s0 /etc
~]$ ls -dZ - /etc
drwxr-xr-x. root root system_u:object_r:etc_t:s0 /etc
touch /etc/file1
~]# touch /etc/file1
ls -lZ /etc/file1 -rw-r--r--. root root unconfined_u:object_r:etc_t:s0 /etc/file1
~]# ls -lZ /etc/file1
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0 /etc/file1
SELinux는 chcon,semanage fcontext,restorecon,
matchpathcon 과 같은 파일 시스템 레이블링을 관리하기 위한 여러 명령을 제공합니다.
4.7.1. 임시 변경 사항: chcon 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
chcon 명령은 파일의 SELinux 컨텍스트를 변경합니다. 그러나 chcon 명령을 사용하여 변경한 내용은 파일 시스템 재레이블 또는 restorecon 명령 실행 시 지속되지 않습니다. SELinux 정책은 사용자가 지정된 파일에 대한 SELinux 컨텍스트를 수정할 수 있는지 여부를 제어합니다. chcon 을 사용하는 경우 사용자는 SELinux 컨텍스트의 전부 또는 일부를 제공하여 변경합니다. 잘못된 파일 유형은 액세스를 거부하는 SELinux의 일반적인 원인입니다.
참고 자료
- chcon -t 유형 file-name 명령을 실행하여 파일 유형을 변경합니다. 여기서 type 은 SELinux 유형(예:
httpd_sys_content_t)이며 file-name 은 파일 또는 디렉터리 이름입니다.chcon -t httpd_sys_content_t file-name
~]$ chcon -t httpd_sys_content_t file-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - chcon -R -t 유형 directory-name 명령을 실행하여 디렉터리 및 해당 콘텐츠의 유형을 변경합니다. 여기서 type 은 SELinux 유형(예:
httpd_sys_content_t)이고 directory-name 은 디렉터리 이름입니다.chcon -R -t httpd_sys_content_t directory-name
~]$ chcon -R -t httpd_sys_content_t directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.6. 파일 또는 디렉토리 유형 변경
다음 절차에서는 유형 및 SELinux 컨텍스트의 다른 특성을 변경하는 방법을 보여줍니다. 이 섹션의 예제는 디렉터리(예:
file1 이 디렉터리인 경우)에 대해 동일하게 작동합니다.
- 홈 디렉터리로 변경합니다.
- 새 파일을 생성하고 SELinux 컨텍스트를 봅니다.
touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 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 이 예에서file1에 대한 SELinux 컨텍스트에는 SELinuxunconfined_u사용자,object_r역할,user_home_t유형 및s0수준이 포함됩니다. SELinux 컨텍스트의 각 부분에 대한 설명은 2장. SELinux 컨텍스트 의 내용을 참조하십시오. - 다음 명령을 입력하여 유형을
samba_share_t로 변경합니다.t옵션은 유형만 변경합니다. 그런 다음 변경 사항을 확인합니다.chcon -t samba_share_t file1
~]$ chcon -t samba_share_t file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 사용하여
file1파일의 SELinux 컨텍스트를 복원합니다. v옵션을사용하여 변경 사항을 확인하십시오.restorecon -v file1 restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
~]$ restorecon -v file1 restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서 이전 유형samba_share_t는 올바른user_home_t유형으로 복원됩니다. 대상 정책(Red Hat Enterprise Linux의 기본 SELinux 정책)을 사용하는 경우 restorecon 명령은/etc/selinux/targeted/contexts/files/디렉터리에 있는 파일을 읽고 어떤 SELinux 컨텍스트 파일이 있어야 하는지 확인합니다.
절차 4.7. 디렉토리 및 콘텐츠 유형 변경
다음 예제에서는 새 디렉터리를 만들고 디렉터리의 파일 유형을 Apache HTTP 서버에서 사용하는 유형으로 변경하는 방법을 보여줍니다. 이 예제의 구성은 Apache HTTP Server에서 다른 문서 루트(
/var/www/html/대신)를 사용하도록 하는 경우 사용됩니다.
- root 사용자로 이 디렉터리에 새
web/디렉토리를 만들고 3개의 빈 파일(file1,file2및file3)을 만듭니다. 이 디렉터리의web/디렉터리 및 파일은default_t유형으로 레이블이 지정됩니다.mkdir /web
~]# mkdir /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow touch /web/file{1,2,3}~]# touch /web/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
~]# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
~]# ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서 다음 명령을 입력하여
웹/디렉터리(및 해당 콘텐츠)의 유형을httpd_sys_content_t로 변경합니다.chcon -R -t httpd_sys_content_t /web/
~]# chcon -R -t httpd_sys_content_t /web/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web/ drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
~]# ls -dZ /web/ drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web/ -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
~]# ls -lZ /web/ -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 - 기본 SELinux 컨텍스트를 복원하려면
restorecon유틸리티를 root로 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
chcon 에 대한 자세한 내용은 chcon(1) 도움말 페이지를 참조하십시오.
참고
유형 적용은 SELinux 대상 정책에 사용되는 기본 권한 제어입니다. 대부분의 경우 SELinux 사용자 및 역할은 무시할 수 있습니다.
4.7.2. 영구적인 변경 사항: semanage fcontext 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
semanage fcontext 명령은 파일의 SELinux 컨텍스트를 변경하는 데 사용됩니다. 새로 생성된 파일 및 디렉터리에 대한 컨텍스트를 표시하려면 root로 다음 명령을 입력합니다.
semanage fcontext -C -l
~]# semanage fcontext -C -l
semanage fcontext 의 변경 사항은 다음 유틸리티에서 사용합니다.
setfiles 유틸리티는 파일 시스템의 레이블을 다시 지정하고 restorecon 유틸리티가 기본 SELinux 컨텍스트를 복원할 때 사용됩니다. 즉, 파일 시스템의 레이블을 다시 지정하는 경우에도 semanage fcontext 로 변경한 사항이 지속됩니다. SELinux 정책은 사용자가 지정된 파일에 대한 SELinux 컨텍스트를 수정할 수 있는지 여부를 제어합니다.
참고 자료
파일 시스템 레이블 변경 후에도 유지되는 SELinux 컨텍스트 변경을 수행하려면 다음을 수행합니다.
- 파일 또는 디렉토리의 전체 경로를 사용하도록 다음 명령을 입력합니다.
semanage fcontext -a options file-name|directory-name
~]# semanage fcontext -a options file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow restorecon유틸리티를 사용하여 컨텍스트 변경 사항을 적용합니다.restorecon -v file-name|directory-name
~]# restorecon -v file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
semanage fcontext와 함께 정규 표현식 사용
semanage fcontext 명령이 올바르게 작동하려면 정규화된 경로 또는 PCRE( Perl 호환 정규식) 를 사용할 수 있습니다. 사용 중인 유일한 PCRE 플래그는
PCRE2_DOTALL 이므로 와일드카드가 새 행을 포함하여 모든 항목과 일치합니다 . 경로를 나타내는 문자열은 바이트로 처리됩니다. 즉 ASCII가 아닌 문자는 단일 와일드카드와 일치하지 않습니다.
semanage fcontext 를 사용하여 지정된 파일 컨텍스트 정의는 정의 방법에 대한 역순으로 평가됩니다. 최신 항목은 제로 길이에 관계없이 먼저 평가됩니다.
file_contexts.local 에 저장된 로컬 파일 컨텍스트 수정은 정책 모듈에 지정된 것보다 우선 순위가 높습니다. 즉, file_contexts.local 에서 지정된 파일 경로에 대한 일치가 발견될 때마다 다른 파일 컨텍스트 정의는 고려되지 않습니다.
중요
semanage fcontext 명령을 사용하여 지정된 파일 컨텍스트 정의는 다른 모든 file-context 정의를 효과적으로 재정의합니다. 따라서 모든 정규 표현식은 의도치 않게 파일 시스템의 다른 부분에 영향을 주지 않도록 가능한 한 구체적이어야 합니다.
file-context 정의 및 적용되는 플래그에 사용되는 정규식 유형에 대한 자세한 내용은
semanage-fcontext(8) 도움말 페이지를 참조하십시오.
절차 4.8. 파일 또는 디렉토리 유형 변경
다음 예제에서는 파일 유형 및 SELinux 컨텍스트의 다른 특성을 변경하는 방법을 보여줍니다. 이 예제는 디렉터리(예:
file1 이 디렉터리인 경우)에 대해 동일하게 작동합니다.
- root 사용자로
/etc디렉토리에 새 파일을 만듭니다. 기본적으로/etc에서 새로 생성된 파일은etc_t유형으로 레이블이 지정됩니다.touch /etc/file1
~]# touch /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /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 디렉터리에 대한 정보를 나열하려면 다음 명령을 사용합니다.ls -dZ directory_name
~]$ ls -dZ directory_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로 다음 명령을 입력하여
file1유형을samba_share_t로 변경합니다.a옵션은 새 레코드를 추가하고-t옵션은 유형(samba_share_t)을 정의합니다. 이 명령을 실행하면 유형이 직접 변경되지 않습니다.file1은 여전히etc_t유형으로 레이블이 지정됩니다.semanage fcontext -a -t samba_share_t /etc/file1
~]# semanage fcontext -a -t samba_share_t /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /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 semanage fcontext -C -l /etc/file1 unconfined_u:object_r:samba_share_t:s0
~]$ semanage fcontext -C -l /etc/file1 unconfined_u:object_r:samba_share_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
restorecon유틸리티를 사용하여 유형을 변경합니다.semanage는/etc/file1의file_contexts.local에 항목을 추가했기 때문에restorecon은 유형을samba_share_t:로 변경합니다.restorecon -v /etc/file1 restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
~]# restorecon -v /etc/file1 restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.9. 디렉토리 및 콘텐츠 유형 변경
다음 예제에서는 새 디렉터리를 만들고 디렉터리의 파일 유형을 해당 내용과 함께 Apache HTTP 서버에서 사용하는 유형으로 변경하는 방법을 보여줍니다. 이 예제의 구성은 Apache HTTP Server에서
/var/www/html/: 대신 다른 문서 루트를 사용하도록 하려는 경우 사용됩니다.
- root 사용자로 이 디렉터리에 새
web/디렉토리를 만들고 3개의 빈 파일(file1,file2및file3)을 만듭니다. 이 디렉터리의web/디렉터리 및 파일은default_t유형으로 레이블이 지정됩니다.mkdir /web
~]# mkdir /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow touch /web/file{1,2,3}~]# touch /web/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
~]# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
~]# ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서 다음 명령을 입력하여
웹/디렉터리의 유형과 해당 디렉터리의 파일을httpd_sys_content_t로 변경합니다.a옵션은 새 레코드를 추가하고-t옵션은 유형(httpd_sys_content_t)을 정의합니다."/web(/.*)?"정규식으로 인해semanage가웹/에도 변경 사항을 적용하고 해당 파일에 변경 사항을 적용합니다. 이 명령을 실행하면 유형이 직접 변경되지 않습니다. 그 안에 있는web/및 파일은 여전히default_t유형으로 레이블이 지정됩니다.semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
~]$ ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
~]$ ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" 명령은/etc/selinux/targeted/contexts/files/file_contexts.local에 다음 항목을 추가합니다./web(/.*)? system_u:object_r:httpd_sys_content_t:s0
/web(/.*)? system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
restorecon유틸리티를 사용하여web/의 유형 및 해당 파일의 모든 파일을 변경합니다.R은 재귀를 위한 것입니다. 즉,web/아래의 모든 파일과 디렉터리가httpd_sys_content_t유형으로 레이블이 지정됩니다.semanage는/web(/.*)의file.contexts.local에 항목을 추가했기 때문에restorecon은 유형을httpd_sys_content_t로 변경합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로 새로 생성된 파일과 디렉터리는 상위 디렉터리의 SELinux 유형을 상속받습니다.
절차 4.10. 추가된 컨텍스트 삭제
다음 예제에서는 SELinux 컨텍스트 추가 및 제거를 보여줍니다. 컨텍스트가 정규식의 일부인 경우
/web(/.*)?? 에서는 정규식 주위에 따옴표를 사용합니다.
semanage fcontext -d "/web(/.*)?"
~]# semanage fcontext -d "/web(/.*)?"
- 컨텍스트를 제거하려면 root로 다음 명령을 입력합니다. 여기서 file-name|directory-name 은
file_contexts.local의 첫 번째 부분입니다.semanage fcontext -d file-name|directory-name
~]# semanage fcontext -d file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음은file_contexts.local의 컨텍스트의 예입니다./test system_u:object_r:httpd_sys_content_t:s0
/test system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 첫 번째 부분은시험입니다. restorecon 을 실행한 후 또는 파일 시스템 재레이블 후test/디렉터리의 레이블이httpd_sys_content_t로 레이블이 지정되지 않도록 하려면 root로 다음 명령을 입력하여file_contexts.local에서 컨텍스트를 삭제합니다.semanage fcontext -d /test
~]# semanage fcontext -d /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로
restorecon유틸리티를 사용하여 기본 SELinux 컨텍스트를 복원합니다.
semanage 에 대한 자세한 내용은 semanage(8) 및 semanage-fcontext(8) 매뉴얼 페이지를 참조하십시오.
중요
semanage fcontext -a 로 SELinux 컨텍스트를 변경할 때 파일 또는 디렉토리의 전체 경로를 사용하여 파일 시스템 재레이블 후 또는 restorecon 명령을 실행한 후 파일의 레이블을 잘못 지정하지 않도록 합니다.
4.7.3. 파일 문맥을 확인하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
파일 컨텍스트 확인은 시스템 보안 정책(
.fc 파일)에 지정된 파일 컨텍스트 정의를 기반으로 합니다. 시스템 정책에 따라 semanage 는 file_contexts.homedirs 및 file_contexts 파일을 생성합니다.
시스템 관리자는 semanage fcontext 명령을 사용하여 파일 컨텍스트 정의를 사용자 지정할 수 있습니다. 이러한 사용자 지정은
file_contexts.local 파일에 저장됩니다.
matchpathcon 또는 restorecon 과 같은 레이블링 유틸리티에서 지정된 경로에 대한 적절한 레이블을 결정하는 경우 먼저 로컬 변경 사항(file_contexts.local)을 검색합니다. 유틸리티에서 일치하는 패턴을 찾지 못하면 file_contexts.homedirs 파일과 file_contexts 파일을 검색합니다. 그러나 지정된 파일 경로와 일치하는 항목이 있을 때마다 검색이 종료되고 유틸리티는 추가 파일 컨텍스트 정의를 찾습니다. 즉, 홈 디렉터리 관련 파일 컨텍스트가 나머지보다 우선 순위가 높으며 로컬 사용자 지정은 시스템 정책을 재정의합니다.
시스템 정책 ( file_contexts.homedirs 및 file_contexts 파일의 콘텐츠)에 의해 지정된 파일 컨텍스트 정의는 평가 전의 줄임표(모든 와일드카드 이전 경로) 길이로 정렬됩니다. 이는 가장 구체적인 경로가 선택됨을 의미합니다. 그러나 semanage fcontext 를 사용하여 지정된 파일 컨텍스트 정의는 정의 방법에 대한 역순으로 평가됩니다. 최신 항목은 영 길이에 관계없이 먼저 평가됩니다.
자세한 내용은 다음을 참조하십시오.
chcon을 사용하여 파일 컨텍스트를 변경하려면 4.7.1절. “임시 변경 사항: chcon” 을 참조하십시오.- semanage fcontext 를 사용하여 파일 컨텍스트 정의 변경 및 추가는 4.7.2절. “영구적인 변경 사항: semanage fcontext” 에서 참조하십시오.
- 시스템 정책 작업을 통해 파일 컨텍스트 정의 변경 및 추가는 4.10절. “SELinux 레이블 유지 관리” 또는 4.12절. “SELinux 정책 모듈 우선순위 및 비활성화” 을 참조하십시오.