이 문서는 지원되지 않는 버전의 배트맨 토토을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다토토 커뮤니티 PostgreSQL : 문서 : 17 : F.38. Sepgsql-Selinux-, 레이블 기반 필수 액세스 제어 (MAC) 보안버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.32. sepgsql

Sepgsql는로드 가능한 모듈입니다 라벨 기반 필수 액세스 제어 (MAC)를 기반으로 지원합니다.Selinux배트맨 토토 정책.

경고

현재 구현은 중요합니다 제한 사항, 필수 액세스를 시행하지 않습니다 모든 행동에 대한 제어. 보다섹션 F.32.7.

F.32.1. 개요

이 모듈은와 통합됩니다.Selinux추가 레이어를 제공합니다 위와 그 이상 배트맨 토토 점검은 일반적으로 제공되는 것배트맨 토토. 에서 의 관점Selinux,이 모듈 허용배트맨 토토to 사용자 공간 객체 관리자로 작동합니다. 각 테이블 또는 기능 DML 쿼리에 의해 시작된 액세스는 시스템 배트맨 토토 정책. 이 점검은 평소에 추가됩니다 SQL 권한 검사 수행배트맨 토토.

Selinux액세스 제어 결정은 배트맨 토토 레이블을 사용하여 이루어집니다 와 같은 문자열에 의해System_U : Object_r : Sepgsql_table_t : S0. 각 액세스 제어 결정에는 두 가지 레이블이 포함됩니다. 행동을 수행하려는 주제와 작업을 수행 할 객체. 이후 라벨은 모든 종류의 객체, 액세스 제어에 적용 할 수 있습니다. 데이터베이스 내에 저장된 개체에 대한 결정은 다음과 같습니다. 이 모듈을 사용하면 동일한 일반 기준에 따라 파일과 같은 다른 유형의 객체에 사용됩니다. 이 디자인 중앙 집중식 배트맨 토토 정책이 보호하기위한 것입니다. 정보 자산이 어떻게되는지에 대한 세부 사항과 무관합니다 자산이 저장됩니다.

thePostgreSQL : 문서 : 9.2 : 보안 사설 토토명령문은 데이터베이스에 배트맨 토토 레이블을 할당 할 수 있습니다. 물체.

F.32.2. 설치

sepgsql에서만 사용할 수 있습니다Linux2.6.28 이상의Selinux활성화. 그렇지 않습니다 다른 플랫폼에서 사용할 수 있습니다. 당신은 또한 필요합니다libselinux2.0.99 이상 그리고Selinux-Policy3.9.13 또는 더 높음 (일부 분포는 필요한 것을 백 포트 할 수 있지만 구형 정책 버전으로의 규칙).

thesestatus명령을 통해 허용됩니다 의 상태 확인Selinux. 에이 일반적인 디스플레이는 다음과 같습니다.

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

ifSelinux비활성화 또는 설치되지 않으면 해당 제품을 먼저 설정해야합니다. 이 모듈 설치.

이 모듈을 작성하려면 옵션을 포함 시키려면-with-selinux배트맨 토토에서구성명령. 확인하십시오Libselinux-DevelRPM은 빌드에 설치됩니다 시간.

이 모듈을 사용하려면 포함해야합니다Sepgsqlinshared_preload_libraries매개 변수배트맨 토토.conf. 그만큼 다른 사람에게로드되면 모듈이 올바르게 작동하지 않습니다. 방법. 모듈이로드되면 실행해야합니다Sepgsql.sql각 데이터베이스에서. 이것 배트맨 토토 레이블 관리에 필요한 기능을 설치합니다. 초기 배트맨 토토 레이블을 지정합니다.

새를 초기화하는 방법을 보여주는 예가 있습니다. 데이터베이스 클러스터Sepgsql기능 및 배트맨 토토 레이블이 설치되었습니다. 표시된 경로를 조정하십시오 설치에 적합 :

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

다음 중 일부 또는 전부가 표시 될 수 있습니다. 알림의 특정 버전에 따라libselinuxandSelinux-Policy:

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

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

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

F.32.3. 회귀 테스트

의 특성으로 인해Selinux, 회귀 테스트 실행sepgsql몇 가지 추가가 필요합니다 구성 단계, 일부는 루트로 수행해야합니다. 그만큼 회귀 테스트는 일반적인 것에 의해 실행되지 않습니다확인 make또는만들기 installcheck명령; 구성을 설정해야합니다 그런 다음 테스트 스크립트를 수동으로 호출하십시오. 테스트를 실행해야합니다 에서Contrib/Sepgsqla의 디렉토리 구성된 배트맨 토토 빌드 트리. 그들은 빌드가 필요하지만 트리, 테스트는 설치된 서버, 즉와 비슷합니다.설치 체크 만들기not만들기 확인하다.

첫 번째, 설정Sepgsql작업 중 데이터베이스의 지침에 따른 데이터베이스섹션 F.32.2. 메모 현재 운영 체제 사용자가 연결할 수 있어야합니다. 비밀번호가없는 슈퍼 서서로 데이터베이스에 입증.

두 번째, 정책 패키지를 빌드하고 설치하십시오 회귀 테스트. 그만큼sepgsql-regtest정책은 세트를 제공하는 특수 목적 정책 패키지입니다. 회귀 테스트 중에 허용되는 규칙. 해야합니다 정책 소스 파일에서 구축 됨sepgsql-regtest.te만들기Selinux. 적절한 makefile을 찾아야합니다 당신의 시스템; 아래에 표시된 경로는 예일뿐입니다. 한 번 구축,를 사용 하여이 정책 패키지를 설치하십시오.Semodule공급 정책을로드하는 명령 커널에 패키지. 패키지가 올바르게있는 경우 설치,semodule-l목록sepgsql-regtest가용 정책으로 패키지:

$ cd .../contrib/sepgsql
$ make -f/usr/share/selinux/devel/makefile
$ sudo semodule -u sepgsql -regtest.pp
$ sudo semodule -l | Grep Sepgsql
sepgsql-regtest 1.04

셋째, 켜기sepgsql_regression_test_mode. 배트맨 토토을 위해 이유, 규칙sepgsql-regtest기본적으로 활성화되지 않습니다. 그만큼sepgsql_regression_test_mode매개 변수가 활성화됩니다 회귀 테스트를 시작하는 데 필요한 규칙. 그럴 수 있습니다 사용 켜기SetSebool명령 :

$ sudo setsebool sepgsql_regression_test_mode on
$ getSebool sepgsql_regression_test_mode
sepgsql_regression_test_mode- on

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

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

참조17999_18019작업 도메인 조정에 대한 자세한 내용은 if 필요한.

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

$ ./test_sepgsql

이 스크립트는 모든 작업을 수행했는지 확인하려고합니다. 구성 단계가 올바르게 진행되고 실행됩니다. 에 대한 회귀 테스트Sepgsql모듈.

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

$ sudo setsebool sepgsql_regression_test_mode off

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

$ sudo semodule -r sepgsql -regtest

F.32.4. GUC 매개 변수

sepgsql.permissive(부울)

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

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

sepgsql.debug_audit(부울)

이 매개 변수는 감사 메시지의 인쇄를 가능하게합니다 시스템 정책 설정에 관계없이. 기본값은입니다 꺼짐, 메시지는 메시지가 인쇄 될 것임을 의미합니다 시스템 설정에.

의 배트맨 토토 정책Selinux제어 규칙도 있습니다 특정 액세스가 기록되어 있는지 여부. 에 의해 기본값, 액세스 위반은 기록되었지만 허용됩니다 액세스는 그렇지 않습니다.

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

F.32.5. 특징

F.32.5.1. 제어 객체 클래스

의 배트맨 토토 모델Selinux모든 액세스 제어를 설명합니다 주제 간의 관계로서 규칙 (일반적으로 a 데이터베이스의 클라이언트) 및 객체 엔티티 (예 : 데이터베이스 개체), 각각은 배트맨 토토에 의해 식별됩니다. 상표. 끊임없는 물체에 대한 액세스가 시도되면 객체는 레이블이 할당 된 것처럼 취급됩니다unlabeled_t.

현재,Sepgsql허용 Schemas, 테이블, 열에 할당 할 배트맨 토토 레이블 sequences, views, and functions. 언제Sepgsql사용 중이며 배트맨 토토 레이블이 있습니다 지원되는 데이터베이스 개체에 자동으로 할당됩니다 창조 시간. 이 레이블은 기본 배트맨 토토 레이블이라고합니다. 시스템 보안 정책에 따라 결정됩니다. Creator의 레이블과 할당 된 레이블을 입력하는 것으로 간주합니다. 새 개체의 부모 객체.

새 데이터베이스 개체는 기본적으로 배트맨 토토을 상속합니다 배트맨 토토 정책을 제외하고 부모 객체의 레이블 유형 변환 규칙으로 알려진 특별 규칙이 있습니다 사례 다른 레이블이 적용될 수 있습니다. 스키마의 경우 부모 객체는 현재 데이터베이스입니다. 테이블, 시퀀스, 뷰 및 함수는 포함 된 스키마입니다. ~을 위한 열, 그것은 포함 테이블입니다.

F.32.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 : 삽입도 확인됩니다 에 의해 수정되는 열업데이트또는삽입.

예를 들어, 다음과 같이 고려하십시오.

업데이트 T1 세트 x = 2, y = md5sum (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정의되었지만 그렇지 않습니다 이 버전에서 체크 됨.

클라이언트는 모든 참조 테이블에 액세스 할 수 있어야합니다. 그리고 열은 그런 다음 확장하여 일관된 액세스 제어를 적용합니다 테이블 내용 방식과 독립적 인 규칙 참조됩니다.

기본 데이터베이스 권한 시스템은 데이터베이스를 허용합니다 DML 명령을 사용하여 시스템 카탈로그를 수정하는 슈퍼 사용자 및 토스트 테이블을 참조하거나 수정하십시오. 이러한 작업은입니다 금지Sepgsqlis 활성화.

F.32.5.3. DDL 권한

Selinux여러 가지를 정의합니다 각 객체에 대한 공통 작업을 제어 할 권한 유형; 보안의 창조, 변경, 드롭 및 릴라벨과 같은 상표. 또한 여러 객체 유형에는 특별합니다 특징적인 작업을 제어 할 권한; 그런 특정 내에서 이름 항목의 추가 또는 삭제로 개요.

a생성명령 IS 실행,Create확인됩니다 각 객체 유형에 대해 구성되는 객체. 기본값 배트맨 토토 레이블은 새 데이터베이스 개체에 할당됩니다. 그리고생성허가가 있습니다 클라이언트의 배트맨 토토 레이블 쌍을 확인했습니다. 새로운 객체 자체. 우리는 고려테이블 생성테이블을 구성합니다 기본 열을 동시에 사용자는 테이블과 그 둘 다를 만들 수있는 권한을 갖도록 열.

개체에 따라 몇 가지 추가 점검이 적용됩니다 유형. 에PostgreSQL : 문서, getAttr허가 새로운 소스 또는 템플릿 데이터베이스에서 확인됩니다. 데이터베이스뿐만 아니라생성새 데이터 베이스. 특정 스키마 내에서 객체 생성시 (테이블, 뷰, 시퀀스 및 절차),add_name스키마에서도 확인됩니다. 비단생성새 개체에서 그 자체.

언제드롭명령이 실행됩니다,드롭개체에서 확인됩니다 각 객체 유형에 대해 제거됩니다. 권한도 있습니다 객체가 간접적으로 삭제 된 객체를 확인했습니다캐스케이드. 내부에 포함 된 물체의 삭제 특정 스키마 (테이블, 뷰, 시퀀스 및 절차) 추가로 필요remove_nameon 스키마.

whenPostgreSQL : 문서 : 9.2 : 보안 사설 토토실행,setattrandrelabelfrom개체에서 확인됩니다 오래된 배트맨 토토 레이블과 관련이있는 다음Relabelto제공된 새로운 배트맨 토토 상표.

여러 레이블 제공 업체가 설치된 경우 그리고 사용자는 배트맨 토토 레이블을 설정하려고하지만 관리Selinux, 만setattr여기에서 확인해야합니다. 이것 구현 제한으로 인해 현재 수행되지 않습니다.

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

신뢰할 수있는 절차는 Security Definer와 유사합니다 함수 또는 setUID 명령.Selinux허용 기능을 제공합니다 신뢰할 수있는 코드와는 다른 배트맨 토토 레이블을 사용하여 실행됩니다. 일반적으로 제공 할 목적으로 고객의 민감한 데이터에 대한 고도로 제어되는 액세스 (예 : 행은 가능합니다 생략되거나 저장된 값의 정밀도는 줄인). 기능이 신뢰할 수있는 역할을하는지 여부 절차는 배트맨 토토 레이블과 운영 체제 배트맨 토토 정책. 예를 들어:

postgres =# 테이블 고객 만들기 (
               CID int 기본 키,
               cname 텍스트,
               신용 텍스트
           );
테이블을 만듭니다
Postgres =# 열 고객의 배트맨 토토 레이블
               'system_u : object_r : sepgsql_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 : sepgsql_trusted_proc_exec_t : s0';
배트맨 토토 레이블

위의 작업은 An에 의해 수행되어야합니다 관리 사용자.

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.32.5.5. 동적 도메인 전환

Selinux의 동적 도메인 전환을 사용할 수 있습니다 클라이언트 프로세스의 배트맨 토토 레이블을 전환하는 기능 클라이언트 도메인, 새로운 맥락에서 배트맨 토토 정책. 클라이언트 도메인에는가 필요합니다.SetCurrent허가 및 또한Dyntransition구식에서 새로 도메인.

동적 도메인 전환은 신중하게 고려해야합니다. 사용자가 레이블을 전환 할 수있게하므로 그들의 선택에 따라 그들의 특권은 ( 신뢰할 수있는 절차) 시스템에 의해 의무적으로. 따라서, 그만큼Dyntransition허가는 전용입니다 도메인으로 전환하는 데 사용될 때 안전한 것으로 간주 원래 특권보다 작은 특권 세트. 을 위한 예:

회귀 =# sepgsql_getcon ();
                    sepgsql_getcon
---------------------------------------------------------------------
 UnconFined_U : UnconFined_R : UnconFined_T : S0-S0 : C0.C1023
(1 줄)

회귀 =# sepgsql_setcon ( 'unconfined_u : unconfined_r : unconfined_t : s0-s0 : c1.c4');
 sepgsql_setcon 
---------------
 티
(1 줄)

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

위 의이 예에서 우리는 더 큰 MCS 범위C1.C1023더 작은 범위C1.C4그러나 스위칭 뒤로 거부 당했다.

동적 도메인 전환의 조합과 신뢰 절차는에 맞는 흥미로운 사용 사례를 가능하게합니다 연결 풀링 소프트웨어의 일반적인 프로세스 수명주기. 연결 풀링 소프트웨어가 허용되지 않더라도 대부분의 SQL 명령을 실행하면 전환 할 수 있습니다. 를 사용하여 클라이언트의 배트맨 토토 레이블sepgsql_setcon ()내에서의 함수 신뢰할 수있는 절차; 그것은 자격 증명을 취해야합니다 클라이언트 레이블을 전환하라는 요청을 승인합니다. 이후, 이 세션에는 대상 사용자의 권한이 있습니다. 연결 풀러보다는. 연결 풀러는 할 수 있습니다 나중에 다시 사용하여 배트맨 토토 레이블 변경을 되돌립니다.sepgsql_setcon ()withNULL인수는 다시 a 적절한 권한 점검이있는 신뢰할 수있는 절차. 그만큼 여기에서는 신뢰할 수있는 절차 만 실제로 효과적인 배트맨 토토 레이블을 변경할 수있는 권한 적절한 자격 증명이 주어지면 그렇게합니다. 물론, 안전합니다 조작, 자격 증명 저장소 (테이블, 절차 정의, 또는 무엇이든) 무단 액세스로부터 보호되어야합니다.

F.32.5.6. 여러 가지 잡다한

우리는를 거부합니다PostgreSQL : 문서 : 9.2 :토토명령 로드 된 모듈은 쉽게로드 될 수 있기 때문에 전반적으로 전반적으로 배트맨 토토 정책 집행 우회.

F.32.6. sepgsql 함수

테이블 F-29사용 가능한 함수를 보여줍니다.

표 F-29. sepgsql 함수

sepgsql_getCon () 리턴 텍스트 현재 보안 인 클라이언트 도메인을 반환합니다 클라이언트의 레이블.
sepgsql_setcon (텍스트) 반환 bool 현재 세션의 클라이언트 도메인을 전환합니다 배트맨 토토 정책이 허용하는 경우 새 도메인에. 또한 받아들입니다null입력 AS 고객의 원본으로의 전환 요청 도메인.
sepgsql_mcstrans_in (텍스트) 텍스트를 반환 주어진 자격을 갖춘 MLS/MCS 범위를 변환합니다 McStrans 데몬이 실행중인 경우 원시 형식.
sepgsql_mcstrans_out (텍스트) 텍스트를 반환 주어진 원시 MLS/MCS 범위를 변환합니다 McStrans 데몬 인 경우 자격을 갖춘 형식 달리기.
sepgsql_restorecon (텍스트) 반품 bool 모든 객체에 대한 초기 배트맨 토토 레이블을 설정합니다 현재 데이터베이스 내에서. 논쟁은 무인 일 수 있습니다. 또는 대안으로 사용될 Specfile의 이름 시스템 기본값

F.32.7. 제한

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

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

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

구현 제한으로 인해 DCL 작업이 수행됩니다 권한을 확인하지 마십시오.

로우 레벨 액세스 제어

배트맨 토토그렇지 않습니다 행 수준 액세스 지원; 그러므로,Sepgsql지원하지 않습니다.

Covert 채널

Sepgsql숨기려고하지 않습니다 사용자가 참조 할 수 없습니다. 예를 들어, 우리는 추론 할 수 있습니다 결과적으로 보이지 않는 대상의 존재 주요 주요 충돌, 외국의 주요 위반 등 물체의 내용을 얻을 수 없더라도. 그만큼 최고 비밀 테이블의 존재는 숨길 수 없습니다. 우리 만 그 내용을 숨길 수 있기를 바랍니다.

F.32.8. 외부 자원

se-배트맨 토토 소개

이 위키 페이지는 간단한 개요, 배트맨 토토을 제공합니다 디자인, 건축, 관리 및 다가오는 특징.

Fedora Selinux 사용자 안내서

이 문서는 광범위한 지식을 제공합니다 관리Selinuxon 당신의 시스템. 주로 페도라에 중점을 두지 만 그렇지 않습니다 페도라로 제한.

Fedora Selinux FAQ

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