Sepgsql
|Selinux토토 캔 정책.
현재 구현에는 상당한 제한이 있으며 모든 작업에 대한 필수 액세스 제어를 시행하지는 않습니다. 보다섹션 F.40.7.
이 모듈은와 통합됩니다.Selinux위와 그 너머의 추가 토토 캔 계층을 제공하려면PostgreSQL. 의 관점에서Selinux,이 모듈은를 허용합니다.postgresql사용자 공간 객체 관리자로 작동합니다. DML 쿼리에서 시작된 각 테이블 또는 기능 액세스는 시스템 토토 캔 정책에 대해 확인됩니다. 이 점검은에 의해 수행 된 일반적인 SQL 권한 점검에 추가됩니다.PostgreSQL.
Selinux액세스 제어 결정은 토토 캔 레이블을 사용하여 이루어지며System_U : Object_r : Sepgsql_table_t : S0
. 각 액세스 제어 결정에는 두 가지 레이블이 포함됩니다. 동작을 수행하려는 피사체의 레이블 및 작업을 수행 할 객체의 레이블. 이러한 레이블은 모든 종류의 객체에 적용될 수 있으므로 데이터베이스 내에 저장된 개체에 대한 액세스 제어 결정은 파일과 같은 다른 유형의 객체에 사용되는 것과 동일한 일반 기준을 적용 할 수 있습니다. 이 설계는 중앙 집중식 토토 캔 정책이 해당 자산이 저장되는 방식에 대한 세부 사항과 무관하게 정보 자산을 보호 할 수 있도록하기위한 것입니다.
the토토 캔 레이블
명령문은 데이터베이스 객체에 토토 캔 레이블을 할당 할 수 있습니다.
Sepgsql
Linux2.6.28 이상의Selinux활성화. 다른 플랫폼에서는 사용할 수 없습니다. 당신은 또한 필요합니다libselinux2.1.10 이상 및Selinux-Policy3.9.13 이상 (일부 배포판이 필요한 규칙을 이전 정책 버전으로 백 포트 할 수 있지만)..
thesestatus
명령은의 상태를 확인할 수 있습니다Selinux. 일반적인 디스플레이는 다음과 같습니다.
$ sestatus Selinux 상태 : 활성화 selinuxfs mount : /selinux 현재 모드 : 시행 구성 파일의 모드 : 시행 정책 버전 : 24 구성 파일의 정책 : targeted
ifSelinux비활성화되거나 설치되지 않았 으므로이 모듈을 설치하기 전에 해당 제품을 먼저 설정해야합니다.
이 모듈을 작성하려면 옵션을 포함 시키려면-with-selinux
PostgreSQL에서구성
명령. 확인하십시오Libselinux-Devel
RPM은 빌드 시간에 설치됩니다.
이 모듈을 사용하려면 포함해야합니다Sepgsql
inshared_preload_libraries매개 변수postgresql.conf
. 다른 방식으로로드하면 모듈이 올바르게 작동하지 않습니다. 모듈이로드되면 실행해야합니다Sepgsql.sql
각 데이터베이스에서. 토토 캔 레이블 관리에 필요한 기능을 설치하고 초기 토토 캔 레이블을 지정합니다.
여기에 새로운 데이터베이스 클러스터를 초기화하는 방법을 보여주는 예는Sepgsql
기능 및 토토 캔 레이블이 설치되었습니다. 설치에 적합한 경로 조정 :
$ 내보내기 pgdata =/path/to/data/directory $ initDB $ vi $ pgdata/postgresql.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/targeted/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
이 메시지는 무해하며 무시되어야합니다.
설치 프로세스가 오류없이 완료되면 이제 서버를 정상적으로 시작할 수 있습니다.
의 특성으로 인해Selinux, 회귀 테스트 실행Sepgsql
몇 가지 추가 구성 단계가 필요하며 일부는 루트로 수행해야합니다. 회귀 테스트는 평범한 것에 의해 실행되지 않습니다확인
또는설치 체크 만들기
명령; 구성을 설정 한 다음 테스트 스크립트를 수동으로 호출해야합니다. 테스트는에서 실행해야합니다.Contrib/Sepgsql
구성된 PostgreSQL 빌드 트리의 디렉토리. 빌드 트리가 필요하지만 테스트는 설치된 서버에 대해 실행되도록 설계되었습니다. 즉,.설치 체크 만들기
not확인
.
먼저, 설정Sepgsql
18275_18333섹션 F.40.2. 현재 운영 체제 사용자는 비밀번호 인증없이 데이터베이스에 슈퍼 사용자로 연결할 수 있어야합니다.
두 번째, 회귀 테스트를위한 정책 패키지를 빌드하고 설치하십시오. 그만큼sepgsql-regtest
정책은 회귀 테스트 중에 허용되는 일련의 규칙을 제공하는 특수 목적 정책 패키지입니다. 정책 소스 파일에서 구축해야합니다.sepgsql-regtest.te
만들기
Selinux가 공급 한 Makefile과 함께. 시스템에서 적절한 makefile을 찾아야합니다. 아래에 표시된 경로는 예일뿐입니다. (이 makefile은 일반적으로에 의해 제공됩니다.Selinux-Policy-Devel
또는Selinux-Policy
rpm.) 일단 구축되면를 사용 하여이 정책 패키지를 설치하십시오.Semodule
명령. 공급 된 정책 패키지를 커널에로드합니다. 패키지가 올바르게 설치된 경우
목록Semodule
-lsepgsql-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.07
셋째, 켜기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
참조섹션 F.40.8필요한 경우 작업 도메인 조정에 대한 자세한 내용.
마지막으로 회귀 테스트 스크립트 실행 :
$ ./test_sepgsql
이 스크립트는 모든 구성 단계를 올바르게 수행했는지 확인한 다음에 대한 회귀 테스트를 실행합니다.Sepgsql
모듈.
테스트를 완료 한 후를 비활성화하는 것이 좋습니다sepgsql_regression_test_mode
매개 변수 :
$ sudo setsebool sepgsql_regression_test_mode off
당신은를 제거하는 것을 선호 할 수 있습니다sepgsql-regtest
전적으로 정책 :
$ sudo semodule -r sepgsql -regtest
sepgsql.permissive
(부울
) #이 매개 변수가 가능합니다Sepgsql
시스템 설정에 관계없이 허용 모드에서 작동합니다. 기본값이 꺼져 있습니다. 이 매개 변수는에서만 설정할 수 있습니다.postgresql.conf
파일 또는 서버 명령 줄에.
이 매개 변수가 켜져있을 때Sepgsql
Selinux가 일반적으로 시행 모드에서 작동하는 경우에도 허용 모드의 기능. 이 매개 변수는 주로 테스트 목적으로 유용합니다.
sepgsql.debug_audit
(부울
) #이 매개 변수는 시스템 정책 설정에 관계없이 감사 메시지를 인쇄 할 수 있습니다. 기본값이 꺼져있어 시스템 설정에 따라 메시지가 인쇄됩니다.
의 토토 캔 정책Selinux또한 특정 액세스가 기록되었는지 여부를 제어하는 규칙이 있습니다. 기본적으로 액세스 위반은 기록되지만 액세스 허용은 없습니다.
이 매개 변수는 시스템 정책에 관계없이 가능한 모든 로깅을 켜야합니다.
의 토토 캔 모델Selinux모든 액세스 제어 규칙을 대상 엔티티 (일반적으로 데이터베이스의 클라이언트)와 객체 엔티티 (예 : 데이터베이스 개체) 간의 관계로 설명합니다. 표지되지 않은 물체에 대한 액세스가 시도되면 객체가 레이블이 할당 된 것처럼 취급됩니다.unlabeled_t
.
현재,Sepgsql
스키마, 테이블, 열, 시퀀스, 뷰 및 기능에 토토 캔 레이블을 할당 할 수 있습니다. 언제sepgsql
사용 중이며, 토토 캔 레이블은 생성 시간에 지원되는 데이터베이스 개체에 자동으로 할당됩니다. 이 레이블은 기본 토토 캔 레이블이라고하며 시스템 보안 정책에 따라 결정됩니다. 시스템 보안 정책에 따라 결정됩니다. 시스템 보안 정책에 따라 결정됩니다. 시스템 보안 정책에 따라 결정됩니다.이 레이블은 Creator의 레이블을 입력하고 새 개체의 상위 객체에 할당 된 레이블 및 선택적으로 구성된 개체의 이름을 입력합니다..
새 데이터베이스 개체는 기본적으로 유형 변환 규칙으로 알려진 특수 규칙을 가진 경우를 제외하고는 부모 객체의 토토 캔 레이블을 상속합니다.이 경우 다른 레이블을 적용 할 수 있습니다. Schemas의 경우, 부모 객체는 현재 데이터베이스입니다. 테이블, 시퀀스, 뷰 및 기능의 경우 포함 스키마입니다. 열의 경우 포함 테이블입니다.
테이블 용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 indud
확인T1.Y
, 업데이트되고 참조되었으므로db_column : select
확인T1.Z
, 참조되므로.db_table : update
테이블 레벨에서도 확인됩니다.
시퀀스 용DB_SEVESSENCE : get_value
를 사용하여 시퀀스 객체를 참조 할 때 확인됩니다select
; 그러나 현재와 같은 해당 기능 실행에 대한 권한을 확인하지 않습니다.lastVal ()
.
보기,db_view : 확장
가 점검되면, 기타 필요한 권한은보기에서 개별적으로 확장되는 개체에 대한 확인됩니다..
함수,db_procedure : execute
사용자가 쿼리의 일부로 함수를 실행하거나 빠른 경로 호출을 사용하려고 할 때 확인됩니다. 이 기능이 신뢰할 수있는 절차 인 경우 확인도 확인합니다.db_procedure : EntryPoint
신뢰할 수있는 절차의 진입 지점으로 수행 할 수 있는지 확인할 수있는 권한.
스키마 개체에 액세스하려면DB_SCHEMA : 검색
포함 된 스키마에 권한이 필요합니다. 객체가 스키마 자격없이 참조되면이 권한이없는 스키마는 검색되지 않습니다 (사용자가없는 것처럼usage
스키마의 권한). 명시 적 스키마 자격이있는 경우 사용자가 명명 된 스키마에 필요한 권한이없는 경우 오류가 발생합니다.
클라이언트는 모든 참조 된 테이블과 열에 액세스 할 수 있어야합니다.이 뷰에서 시작된 경우에도 확장 된 뷰에서 시작하여 테이블 내용이 참조되는 방식과 독립적 인 일관된 액세스 제어 규칙을 적용합니다..
기본 데이터베이스 권한 시스템을 통해 데이터베이스 슈퍼 사용자는 DML 명령을 사용하여 시스템 카탈로그를 수정하고 토스트 테이블을 참조하거나 수정할 수 있습니다. 이러한 작업은Sepgsql
활성화되었습니다.
Selinux각 객체 유형에 대한 공통 작업을 제어하기위한 몇 가지 권한을 정의합니다. 토토 캔 레이블의 생성, Alter, Drop 및 Relabel과 같은. 또한, 여러 객체 유형에는 특징적인 작업을 제어 할 수있는 특별한 권한이 있습니다. 특정 스키마 내에서 이름 항목의 추가 또는 삭제와 같은.
새 데이터베이스 개체 생성생성
허가.Selinux클라이언트의 토토 캔 레이블 및 새 개체에 대한 제안 된 토토 캔 레이블을 기반 으로이 권한을 부여하거나 거부합니다. 경우에 따라 추가 권한이 필요합니다.
데이터베이스 생성
추가로 요구getAttr
소스 또는 템플릿 데이터베이스 허가.
스키마 개체 생성 추가로 필요합니다add_name
상위 스키마의 허가.
테이블 생성 추가로 각 테이블 열이 별도의 최상위 객체 인 것처럼 각 개별 테이블 열을 작성하는 권한이 필요합니다.
LeakProof
추가로 요구설치
허가. (이 허가는 또한 확인됩니다LeakProof
기존 함수로 설정되었습니다.)
언제드롭
명령이 실행됩니다,드롭
제거중인 객체에서 확인됩니다. 권한은 또한 간접적으로 삭제 된 객체에 대해서도캐스케이드
. 특정 스키마 (테이블, 뷰, 시퀀스 및 절차)에 포함 된 객체의 삭제 추가로 필요합니다.remove_name
스키마에서.
언제Alter
명령이 실행됩니다,setattr
테이블의 인덱스 또는 트리거와 같은 자회사 개체를 제외하고 각 객체 유형에 대해 수정되는 객체에서 확인됩니다. 경우에 따라 추가 권한이 필요합니다.
객체를 새 스키마로 옮기는 것도 추가로 필요합니다remove_name
이전 스키마 및에 대한 권한add_name
새 제품에 대한 허가.
설정LeakProof
필요 함수의 속성install
허가.
사용토토 캔 레이블
추가로 요구되는 개체에서Relabelfrom
이전 토토 캔 레이블 및와 함께 개체에 대한 권한Relabelto
새로운 토토 캔 레이블과 함께 개체 허가. (여러 라벨 제공 업체가 설치되고 사용자가 토토 캔 레이블을 설정하려고하지만 관리하지 않는 경우Selinux, 만setattr
여기에서 확인해야합니다. 이것은 현재 구현 제한으로 인해 수행되지 않습니다.)
신뢰할 수있는 절차는 보안 정의 기능 또는 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'; 토토 캔 레이블
위의 작업은 관리 사용자가 수행해야합니다.
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
사용자는 일부 숫자가 마스킹 된 일부 고객의 신용 카드 번호를 인쇄 할 수 있습니다.
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
, 그러나 뒤로 스위치가 거부되었습니다.
동적 도메인 전환과 신뢰할 수있는 절차의 조합은 Connection Pooling 소프트웨어의 일반적인 프로세스 수명주기에 적합한 흥미로운 사용 사례를 가능하게합니다. 연결 풀링 소프트웨어가 대부분의 SQL 명령을 실행할 수 없더라도를 사용하여 클라이언트의 토토 캔 레이블을 전환 할 수 있습니다.sepgsql_setcon ()
신뢰할 수있는 절차 내에서 기능; 클라이언트 레이블을 전환하라는 요청을 승인하려면 자격 증명이 필요합니다. 그 후,이 세션에는 연결 풀러가 아닌 대상 사용자의 권한이 있습니다. 연결 풀러는 나중에를 사용하여 토토 캔 레이블 변경을 되돌릴 수 있습니다.sepgsql_setcon ()
withNULL
인수는 적절한 권한 점검을 통해 신뢰할 수있는 절차 내에서 다시 호출되었습니다. 여기서 요점은 신뢰할 수있는 절차 만 실제로 효과적인 토토 캔 레이블을 변경할 수있는 권한이 있으며 적절한 자격 증명이 제공 될 때만 그렇게한다는 것입니다. 물론 보안 운영의 경우 자격 증명 저장소 (테이블, 절차 정의 또는 무엇이든)는 무단 액세스로부터 보호되어야합니다.
표 F.31사용 가능한 함수를 보여줍니다.
표 F.31. sepgsql 함수
기능 설명 |
---|
클라이언트의 현재 토토 캔 레이블 인 클라이언트 도메인을 반환합니다. |
토토 캔 정책이 허용하는 경우 현재 세션의 클라이언트 도메인을 새 도메인으로 전환합니다. 또한 받아들입니다 |
McStrans 데몬이 실행중인 경우 주어진 자격을 갖춘 MLS/MCS 범위를 원시 형식으로 변환합니다. |
McStrans 데몬이 실행중인 경우 주어진 RAW MLS/MCS 범위를 적격 형식으로 변환합니다. |
현재 데이터베이스 내의 모든 객체에 대한 초기 토토 캔 레이블을 설정합니다. 논쟁은 |
구현 제한으로 인해 일부 DDL 작업은 권한을 확인하지 않습니다.
구현 제한으로 인해 DCL 작업은 권한을 확인하지 않습니다.
PostgreSQL로드 레벨 액세스 지원이지만Sepgsql
그렇지 않습니다.
Sepgsql
사용자가 참조 할 수없는 경우에도 특정 객체의 존재를 숨기려고하지 않습니다. 예를 들어, 우리는 객체의 내용을 얻을 수 없더라도 1 차 주요 충돌, 외국의 주요 위반 등의 결과로 보이지 않는 물체의 존재를 추론 할 수 있습니다. 최고 비밀 테이블의 존재는 숨길 수 없습니다. 우리는 그 내용을 숨길 수 있기를 희망합니다.
이 위키 페이지는 간단한 개요, 보안 설계, 아키텍처, 관리 및 다가오는 기능을 제공합니다.
이 문서는 관리 할 광범위한 지식을 제공합니다Selinux시스템에서. 주로 Red Hat 운영 체제에 중점을 두지 만 그에 국한되지는 않습니다.
이 문서는 자주 묻는 질문에 대한 답변Selinux. 그것은 주로 페도라에 중점을 두지 만 페도라에만 국한되지 않습니다.
Kaigai Kohei<kaigai@ak.jp.nec.com
올바르지 않은 문서에 아무것도 표시되면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면