지원 버전 :현재(17) /16 / 15 / 14 / 13
개발 버전 :18 / Devel
지원되지 않는 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

F.35. 와이즈 토토

와이즈 토토|Selinux보안 정책.

경고

현재 구현에는 상당한 제한이 있으며 모든 작업에 대한 필수 액세스 제어를 시행하지는 않습니다. 보다섹션 F.35.7.

F.35.1. 개요

이 모듈은와 통합됩니다.Selinux일반적으로 제공되는 것 이상의 보안 검사 계층을 제공하려면PostgreSQL. 의 관점에서Selinux,이 모듈은를 허용합니다.postgresql사용자 공간 객체 관리자로 작동합니다. DML 쿼리에서 시작된 각 테이블 또는 기능 액세스는 시스템 보안 정책에 대해 확인됩니다. 이 점검은에 의해 수행 된 일반적인 SQL 권한 점검에 추가됩니다.PostgreSQL.

Selinux액세스 제어 결정은 보안 레이블을 사용하여 이루어지며, 이는와 같은 문자열로 표시됩니다.System_U : Object_r : 와이즈 토토_table_t : S0. 각 액세스 제어 결정에는 두 가지 레이블이 포함됩니다. 동작을 수행하려는 피사체의 레이블 및 작업을 수행 할 객체의 레이블. 이러한 레이블은 모든 종류의 객체에 적용될 수 있으므로 데이터베이스 내에 저장된 개체에 대한 액세스 제어 결정은 파일과 같은 다른 유형의 객체에 사용되는 것과 동일한 일반 기준을 적용 할 수 있습니다. 이 설계는 중앙 집중식 보안 정책이 해당 자산이 저장되는 방식에 대한 세부 사항과 무관하게 정보 자산을 보호 할 수 있도록하기위한 것입니다.

the보안 레이블명령문은 데이터베이스 객체에 보안 레이블을 할당 할 수 있습니다.

F.35.2. 설치

와이즈 토토에서만 사용할 수 있습니다Linux2.6.28 이상의Selinux활성화. 다른 플랫폼에서는 사용할 수 없습니다. 당신은 또한 필요합니다libselinux2.1.10 이상 및Selinux-Policy3.9.13 이상 (일부 배포판이 필요한 규칙을 이전 정책 버전으로 백 포트 할 수 있지만)..

thesestatus명령은의 상태를 확인할 수 있습니다Selinux. 일반적인 디스플레이는 다음과 같습니다.

$ sestatus
Selinux 상태 : 활성화
selinuxfs mount : /selinux
현재 모드 : 시행
구성 파일의 모드 : 시행
정책 버전 : 24
구성 파일의 정책 : targeted

ifSelinux비활성화되거나 설치되지 않았 으므로이 모듈을 설치하기 전에 해당 제품을 먼저 설정해야합니다.

이 모듈을 작성하려면 옵션을 포함하려면-with-selinuxPostgreSQL에서구성명령. 확인하십시오libselinux-develRPM은 빌드 시간에 설치됩니다.

이 모듈을 사용하려면 포함해야합니다와이즈 토토inshared_preload_libraries매개 변수postgresql.conf. 다른 방식으로로드하면 모듈이 올바르게 작동하지 않습니다. 모듈이로드되면 실행해야합니다와이즈 토토.sql각 데이터베이스에서. 보안 레이블 관리에 필요한 기능을 설치하고 초기 보안 레이블을 지정합니다.

여기에 새로운 데이터베이스 클러스터를 초기화하는 방법을 보여주는 예는와이즈 토토기능 및 보안 레이블이 설치되었습니다. 설치에 적합한 경로 조정 :

$ 내보내기 pgdata =/path/to/data/directory
$ initDB
$ vi $ pgdata/postgresql.conf
  변화
    #shared_preload_libraries = '' # (변경 사항을 다시 시작해야 함)
  에게
    shared_preload_libraries = '와이즈 토토' # (변경 사항이 다시 시작됩니다)
Template0 Template1 Postgres의 dbname에 대한 $; 하다
    Postgres --- single -f -c exit_on_error = true $ dbname \
      </usr/local/pgsql/share/contrib/와이즈 토토.sql/dev/null
  완료

귀하가있는 특정 버전에 따라 다음 알림의 일부 또는 전부를 볼 수 있습니다.libselinuxandSelinux-Policy:

/etc/selinux/target/contexts/와이즈 토토_contexts : 33 행에는 잘못된 객체 유형 db_blobs가 있습니다
/etc/selinux/targeted/contexts/와이즈 토토_contexts : 36 행에는 잘못된 객체 유형 db_language가 있습니다
/etc/selinux/targeted/contexts/와이즈 토토_contexts : 37 행에는 잘못된 객체 유형 db_language가 있습니다
/etc/selinux/targeted/contexts/와이즈 토토_contexts : 38 행에 잘못된 객체 유형 db_language가 있습니다
/etc/selinux/targeted/contexts/와이즈 토토_contexts : 39 행에는 잘못된 객체 유형 db_language가 있습니다
/etc/selinux/targeted/contexts/와이즈 토토_contexts : 40 행은 유효하지 않은 객체 유형 db_language

이 메시지는 무해하며 무시해야합니다.

설치 프로세스가 오류없이 완료되면 이제 서버를 정상적으로 시작할 수 있습니다.

F.35.3. 회귀 테스트

의 특성으로 인해Selinux, 회귀 테스트 실행와이즈 토토몇 가지 추가 구성 단계가 필요하며 일부는 루트로 수행해야합니다. 회귀 테스트는 평범한 것에 의해 실행되지 않습니다확인또는설치 체크 만들기명령; 구성을 설정 한 다음 테스트 스크립트를 수동으로 호출해야합니다. 테스트는에서 실행해야합니다.Contrib/와이즈 토토구성된 PostgreSQL 빌드 트리의 디렉토리. 빌드 트리가 필요하지만 테스트는 설치된 서버에 대해 실행되도록 설계되었습니다. 즉,.설치 체크 만들기아님확인 make.

첫 번째, 설정와이즈 토토지침에 따른 작업 데이터베이스에서섹션 F.35.2. 현재 운영 체제 사용자는 비밀번호 인증없이 데이터베이스에 슈퍼 사용자로 연결할 수 있어야합니다.

두 번째, 회귀 테스트를위한 정책 패키지를 빌드하고 설치하십시오. 그만큼와이즈 토토-regtest정책은 회귀 테스트 중에 허용되는 일련의 규칙을 제공하는 특수 목적 정책 패키지입니다. 정책 소스 파일에서 구축해야합니다.와이즈 토토-regtest.te만들기Selinux가 공급 한 Makefile과 함께. 시스템에서 적절한 makefile을 찾아야합니다. 아래에 표시된 경로는 예일뿐입니다. (이 makefile은 일반적으로에 의해 제공됩니다.Selinux-Policy-Devel또는Selinux-Policyrpm.) 일단 구축되면를 사용 하여이 정책 패키지를 설치하십시오.semodule명령. 공급 된 정책 패키지를 커널에로드합니다. 패키지가 올바르게 설치된 경우semodule-l목록와이즈 토토-regtest사용 가능한 정책 패키지 :

$ cd .../contrib/와이즈 토토
$ make -f/usr/share/selinux/devel/makefile
$ sudo semodule -u 와이즈 토토 -regtest.pp
$ sudo semodule -l | Grep 와이즈 토토
와이즈 토토-regtest 1.07

셋째, 켜기와이즈 토토_regression_test_mode. 보안상의 이유로의 규칙와이즈 토토-regtest기본적으로 활성화되지 않습니다. 그만큼와이즈 토토_regression_test_mode매개 변수를 사용하면 회귀 테스트를 시작하는 데 필요한 규칙이 가능합니다. 를 사용하여 켜질 수 있습니다.SetSebool명령 :

$ sudo setsebool 와이즈 토토_regression_test_mode on
$ getSebool 와이즈 토토_regression_test_mode
와이즈 토토_regression_test_mode- on

넷째, 쉘이 작동 중인지 확인UnconFined_T도메인 :

$ id -z
unconfined_u : unconfined_r : unconfined_t : s0-s0 : c0.c1023

참조섹션 F.35.8필요한 경우 작업 도메인 조정에 대한 자세한 내용.

마지막으로 회귀 테스트 스크립트 실행 :

$ ./test_와이즈 토토

이 스크립트는 모든 구성 단계를 올바르게 수행했는지 확인한 다음에 대한 회귀 테스트를 실행합니다.와이즈 토토모듈.

테스트를 완료 한 후를 비활성화하는 것이 좋습니다와이즈 토토_regression_test_mode매개 변수 :

$ sudo setsebool 와이즈 토토_regression_test_mode off

당신은를 제거하는 것을 선호 할 수 있습니다와이즈 토토-regtest전적으로 정책 :

$ sudo semodule -r 와이즈 토토 -regtest

F.35.4. GUC 매개 변수

와이즈 토토.permissive(부울)

이 매개 변수가 가능와이즈 토토시스템 설정에 관계없이 허용 모드에서 작동합니다. 기본값이 꺼져 있습니다. 이 매개 변수는에서만 설정할 수 있습니다.postgresql.conf파일 또는 서버 명령 줄에.

이 매개 변수가 켜져있을 때와이즈 토토일반적으로 Selinux가 시행 모드에서 작동하는 경우에도 허용 모드의 기능. 이 매개 변수는 주로 테스트 목적으로 유용합니다.

와이즈 토토.debug_audit(부울)

이 매개 변수는 시스템 정책 설정에 관계없이 감사 메시지를 인쇄 할 수 있습니다. 기본값이 꺼져있어 시스템 설정에 따라 메시지가 인쇄됩니다.

의 보안 정책Selinux또한 특정 액세스가 기록되어 있는지 여부를 제어하는 ​​규칙이 있습니다. 기본적으로 액세스 위반은 기록되지만 액세스 허용은 없습니다.

이 매개 변수는 시스템 정책에 관계없이 가능한 모든 로깅을 켜야합니다.

F.35.5. 특징

F.35.5.1. 제어 객체 클래스

의 보안 모델Selinux모든 액세스 제어 규칙을 대상 엔티티 (일반적으로 데이터베이스의 클라이언트)와 객체 엔티티 (예 : 데이터베이스 개체) 간의 관계로 설명합니다. 표지되지 않은 물체에 대한 액세스가 시도되면 객체가 레이블이 할당 된 것처럼 취급됩니다.unlabeled_t.

현재,와이즈 토토스키마, 테이블, 열, 시퀀스, 뷰 및 기능에 보안 레이블을 할당 할 수 있습니다. 언제와이즈 토토사용 중이며, 보안 레이블은 생성 시간에 지원되는 데이터베이스 개체에 자동으로 할당됩니다. 이 레이블은 기본 보안 레이블이라고하며 시스템 보안 정책에 따라 결정됩니다. 시스템 보안 정책에 따라 결정됩니다. 시스템 보안 정책에 따라 결정됩니다. 시스템 보안 정책에 따라 결정됩니다.이 레이블은 Creator의 레이블을 입력하고 새 개체의 상위 객체에 할당 된 레이블 및 선택적으로 구성된 개체의 이름을 입력합니다..

새 데이터베이스 개체는 기본적으로 유형 변환 규칙으로 알려진 특수 규칙을 가진 경우를 제외하고는 부모 객체의 보안 레이블을 상속합니다.이 경우 다른 레이블을 적용 할 수 있습니다. Schemas의 경우, 부모 객체는 현재 데이터베이스입니다. 테이블, 시퀀스, 뷰 및 기능의 경우 포함 스키마입니다. 열의 경우 포함 테이블입니다.

F.35.5.2. DML 권한

테이블 용db_table : select, db_table : 삽입, db_table : 업데이트또는db_table : delete진술의 종류에 따라 참조 된 모든 대상 테이블에 대해 확인됩니다. 게다가,db_table : select|여기서또는반환조항, 데이터 소스로서업데이트등.

열 수준의 권한도 참조 된 각 열에 대해 확인합니다.db_column : select|select그러나 다른 DML 문에서 참조되는 것들;DB_COLUMN : 업데이트또는db_column : insert|업데이트또는삽입.

예를 들어, 고려 :

업데이트 T1 세트 x = 2, y = func1 (y) 여기서 z = 100;

여기,DB_COLUMN : 업데이트확인T1.x, 업데이트 중이기 때문에DB_COLUMN : SELECT확인T1.Y, 업데이트되고 참조되어 있기 때문에db_column : select확인T1.Z, 참조되므로.db_table : update테이블 레벨에서도 확인됩니다.

시퀀스 용db_sequence : get_value를 사용하여 시퀀스 객체를 참조 할 때 확인됩니다.select; 그러나 현재와 같은 해당 기능 실행에 대한 권한을 확인하지 않습니다.lastVal ().

보기,db_view : 확장확인됩니다. 그러면 기타 필요한 권한이 뷰에서 개별적으로 확장되는 개체에 대한 검사됩니다..

함수,db_procedure : execute사용자가 쿼리의 일부로 함수를 실행하거나 빠른 경로 호출을 사용하려고 할 때 확인됩니다. 이 기능이 신뢰할 수있는 절차 인 경우 확인도 확인합니다.db_procedure : EntryPoint신뢰할 수있는 절차의 진입 지점으로 수행 할 수 있는지 확인할 수있는 권한.

스키마 개체에 액세스하려면DB_SCHEMA : 검색포함 된 스키마에 허가가 필요합니다. 객체가 스키마 자격없이 참조되면이 권한이없는 스키마는 검색되지 않습니다 (사용자가없는 것처럼usage스키마의 권한). 명시 적 스키마 자격이있는 경우 사용자가 명명 된 스키마에 필요한 권한이없는 경우 오류가 발생합니다.

클라이언트는 모든 참조 된 테이블과 열에 액세스 할 수 있어야합니다.이 뷰에서 시작된 경우에도 확장 된 뷰에서 시작하여 테이블 내용이 참조되는 방식과 독립적 인 일관된 액세스 제어 규칙을 적용합니다..

기본 데이터베이스 권한 시스템을 통해 데이터베이스 슈퍼 사용자는 DML 명령을 사용하여 시스템 카탈로그를 수정하고 토스트 테이블을 참조하거나 수정할 수 있습니다. 이러한 작업은와이즈 토토활성화되었습니다.

F.35.5.3. DDL 권한

Selinux각 객체 유형에 대한 공통 작업을 제어하기위한 몇 가지 권한을 정의합니다. 보안 레이블의 생성, Alter, Drop 및 Relabel과 같은. 또한, 여러 객체 유형에는 특징적인 작업을 제어 할 수있는 특별한 권한이 있습니다. 특정 스키마 내에서 이름 항목의 추가 또는 삭제와 같은.

새 데이터베이스 개체 생성Create허가.Selinux고객의 보안 레이블과 새 개체에 대한 제안 된 보안 레이블을 기반 으로이 권한을 부여하거나 거부합니다. 경우에 따라 추가 권한이 필요합니다.

  • 데이터베이스 생성추가로 요구getAttr소스 또는 템플릿 데이터베이스 허가.

  • 스키마 개체 생성 추가로 필요합니다add_name상위 스키마의 허가.

  • 테이블 생성 추가로 각 테이블 열이 별도의 최상위 객체 인 것처럼 각 개별 테이블 열을 만들기위한 권한이 필요합니다.

  • 로 표시된 함수 생성LeakProof추가 요구설치허가. (이 허가는 또한 확인됩니다LeakProof기존 함수로 설정되었습니다.)

언제드롭명령이 실행됩니다,드롭제거중인 객체에서 확인됩니다. 권한은 또한 간접적으로 삭제 된 객체에 대해서도캐스케이드. 특정 스키마 (테이블, 뷰, 시퀀스 및 절차)에 포함 된 객체의 삭제 추가로 필요합니다.remove_name스키마에서.

언제Alter명령이 실행됩니다,setattr테이블의 인덱스 또는 트리거와 같은 자회사 객체를 제외하고 각 객체 유형에 대해 수정되는 객체에서 확인됩니다. 경우에 따라 추가 권한이 필요합니다.

  • 새 스키마로 개체를 이동해야합니다remove_name이전 스키마에 대한 허가 및add_name새 제품에 대한 허가.

  • 설정LeakProof필요 함수의 속성설치허가.

  • 사용보안 레이블추가로 필요한 개체에서relabelfrom이전 보안 레이블 및와 함께 객체에 대한 권한Relabelto새로운 보안 레이블과 함께 개체 허가. (여러 라벨 제공 업체가 설치되고 사용자가 보안 레이블을 설정하려고하지만 관리하지 않는 경우Selinux, 만setattr여기에서 확인해야합니다. 이것은 현재 구현 제한으로 인해 수행되지 않습니다.)

F.35.5.4. 신뢰할 수있는 절차

신뢰할 수있는 절차는 보안 정의 기능 또는 setUID 명령과 유사합니다.Selinux일반적으로 민감한 데이터에 대한 고도로 제어 된 액세스를 제공하기 위해 신뢰할 수있는 코드가 클라이언트와 다른 보안 레이블을 사용하여 실행할 수있는 기능을 제공합니다 (예 : 행이 생략되거나 저장된 값의 정밀도가 감소 될 수 있음). 기능이 신뢰할 수있는 절차 역할을하는지 여부는 보안 레이블과 운영 체제 보안 정책에 의해 제어됩니다. 예를 들어:

postgres =# 테이블 고객 만들기 (
               CID int 기본 키,
               cname 텍스트,
               신용 텍스트
           );
테이블을 만듭니다
Postgres =# 열 고객의 보안 레이블
               'system_u : object_r : 와이즈 토토_secret_table_t : s0';
보안 레이블
postgres =# function show_credit (int) 텍스트를 반환합니다
             'regexp_replace를 선택하십시오 (신용', '-[0-9]+$' ','-xxxx '', 'g' ')
                        CID = $ 1 '에서 고객에게서
           언어 SQL;
기능을 만듭니다
postgres =# function show_credit (int)의 보안 레이블
               'system_u : object_r : 와이즈 토토_trusted_proc_exec_t : s0';
보안 레이블

위의 작업은 관리 사용자가 수행해야합니다.

postgres =# 고객에서 선택 *;
오류 : SELINUX : 보안 정책 위반
Postgres =# 고객에서 CID, CNAME, SHOW_CREDIT (CID)를 선택하십시오.
 cid | cname |     show_credit
-----+--------+--------------------------
   1 | 타로 | 1111-222-3333-xxxx
   2 | 하나코 | 5555-6666-7777-xxxx
(2 줄)

이 경우 일반 사용자는 참조 할 수 없습니다Customer.Credit직접적으로 신뢰할 수있는 절차show_credit사용자가 일부 숫자가 마스킹 된 상태에서 고객의 신용 카드 번호를 인쇄 할 수 있습니다.

F.35.5.5. 동적 도메인 전환

Selinux의 동적 도메인 전환 기능을 사용하여 클라이언트 프로세스의 보안 레이블 인 클라이언트 도메인을 새로운 컨텍스트로 전환 할 수 있습니다. 클라이언트 도메인에는가 필요합니다.SetCurrent허가 및 또한Dyntransition구식에서 새 도메인까지.

동적 도메인 전환은 시스템이 의무화 된대로 (신뢰할 수있는 절차의 경우와 같이)가 아니라 라벨을 전환 할 수 있기 때문에 신중하게 고려해야합니다. 따라서Dyntransition허가는 원래 권한보다 작은 권한 세트가있는 도메인으로 전환하는 데 사용될 때만 안전하다고 간주됩니다. 예를 들어:

회귀 =# 와이즈 토토_getcon ();
                    와이즈 토토_getcon
---------------------------------------------------------------------
 UnconFined_U : UnconFined_R : UnconFined_T : S0-S0 : C0.C1023
(1 줄)

회귀 =# 와이즈 토토_setcon ( 'unconfined_u : unconfined_r : unconfined_t : s0-s0 : c1.c4');
 와이즈 토토_setcon
---------------
 티
(1 줄)

회귀 =# 와이즈 토토_setcon ( 'unconfined_u : unconfined_r : unconfined_t : s0-s0 : c1.c1023');
오류 : Selinux : 보안 정책 위반

위 의이 예에서 우리는 더 큰 MCS 범위에서 전환 할 수있었습니다C1.C1023더 작은 범위C1.C4, 그러나 뒤로 스위치가 거부되었습니다.

동적 도메인 전환과 신뢰할 수있는 절차의 조합은 Connection Pooling 소프트웨어의 일반적인 프로세스 수명주기에 적합한 흥미로운 사용 사례를 가능하게합니다. 연결 풀링 소프트웨어가 대부분의 SQL 명령을 실행할 수 없더라도를 사용하여 클라이언트의 보안 레이블을 전환 할 수 있습니다.와이즈 토토_setcon ()신뢰할 수있는 절차 내에서 기능; 클라이언트 레이블을 전환하라는 요청을 승인하려면 자격 증명이 필요합니다. 그 후,이 세션에는 연결 풀러가 아닌 대상 사용자의 권한이 있습니다. 연결 풀러는 나중에를 사용하여 보안 레이블 변경을 되돌릴 수 있습니다.와이즈 토토_setcon ()withNULL인수는 적절한 권한 점검으로 신뢰할 수있는 절차 내에서 다시 호출되었습니다. 여기서 요점은 신뢰할 수있는 절차 만 실제로 효과적인 보안 레이블을 변경할 수있는 권한이 있으며 적절한 자격 증명이 제공 될 때만 그렇게한다는 것입니다. 물론 보안 운영의 경우 자격 증명 저장소 (테이블, 절차 정의 또는 무엇이든)는 무단 액세스로부터 보호되어야합니다.

F.35.5.6. 여러 가지 잡다한

우리는를 거부합니다로드보안 정책 집행을 쉽게 우회 할 수 있기 때문에 전반적으로 전반적으로 명령을 내립니다.

F.35.6. 와이즈 토토 함수

표 F.29사용 가능한 함수를 보여줍니다.

표 F.29. 와이즈 토토 함수

기능

설명

와이즈 토토_getCon() →텍스트

클라이언트의 현재 보안 레이블 인 클라이언트 도메인을 반환합니다.

와이즈 토토_setcon(텍스트) →부울

보안 정책이 허용하는 경우 현재 세션의 클라이언트 도메인을 새 도메인으로 전환합니다. 또한 받아들입니다NULL클라이언트의 원래 도메인으로의 전환 요청으로 입력.

와이즈 토토_mcstrans_in(텍스트) →텍스트

McStrans 데몬이 실행중인 경우 주어진 자격을 갖춘 MLS/MCS 범위를 원시 형식으로 변환합니다.

와이즈 토토_mcstrans_out(텍스트) →텍스트

McStrans 데몬이 실행중인 경우 주어진 RAW MLS/MCS 범위를 적격 형식으로 변환합니다.

와이즈 토토_restorecon(텍스트) →부울

현재 데이터베이스 내의 모든 객체에 대한 초기 보안 레이블을 설정합니다. 논쟁은NULL또는 시스템 기본값의 대안으로 사용될 Specfile의 이름


F.35.7. 제한

데이터 정의 언어 (DDL) 권한

구현 제한으로 인해 일부 DDL 작업은 권한을 확인하지 않습니다.

데이터 제어 언어 (DCL) 권한

구현 제한으로 인해 DCL 작업은 권한을 확인하지 않습니다.

로우 레벨 액세스 제어

PostgreSQL로드 레벨 액세스를 지원하지만와이즈 토토그렇지 않습니다.

Covert 채널

와이즈 토토사용자가 참조 할 수없는 경우에도 특정 객체의 존재를 숨기려고하지 않습니다. 예를 들어, 우리는 객체의 내용을 얻을 수 없더라도 1 차 주요 충돌, 외국의 주요 위반 등의 결과로 보이지 않는 물체의 존재를 추론 할 수 있습니다. 최고 비밀 테이블의 존재는 숨길 수 없습니다. 우리는 그 내용을 숨길 수 있기를 희망합니다.

F.35.8. 외부 자원

Se-Postgresql 소개

이 위키 페이지는 간단한 개요, 보안 설계, 아키텍처, 관리 및 다가오는 기능을 제공합니다.

Selinux 사용자 및 관리자 안내서

이 문서는 관리 할 광범위한 지식을 제공합니다Selinux시스템에서. 주로 Red Hat 운영 체제에 중점을 두지 만 그에 국한되지는 않습니다.

Fedora Selinux FAQ

이 문서는 자주 묻는 질문에 대한 답변Selinux. 그것은 주로 페도라에 중점을 두지 만 페도라에만 국한되지 않습니다.

F.35.9. 작가

Kaigai Kohei

수정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면