스포츠 토토는 다음을 기반으로 하는 레이블 기반 필수 액세스 제어(MAC)를 지원하는 로드 가능한 모듈입니다.SELinux보안 정책.
현재 구현에는 상당한 제한이 있으며 모든 작업에 대해 필수 액세스 제어를 시행하지 않습니다. 참조섹션 F.35.7.
이 모듈은 다음과 통합됩니다.SELinux일반적으로 제공되는 것 이상의 추가 보안 검사 계층을 제공합니다.PostgreSQL. 의 관점에서SELinux, 이 모듈은 다음을 허용합니다PostgreSQL사용자 공간 개체 관리자로 기능합니다. DML 쿼리에 의해 시작된 각 테이블 또는 함수 액세스는 시스템 보안 정책을 기준으로 확인됩니다. 이 확인은 다음에 의해 수행되는 일반적인 SQL 권한 확인에 추가됩니다.포스트그레SQL.
SELinux액세스 제어 결정은 다음과 같은 문자열로 표시되는 보안 레이블을 사용하여 이루어집니다.system_u:object_r:스포츠 토토_table_t:s0. 각 액세스 제어 결정에는 작업을 수행하려는 주체의 레이블과 작업을 수행할 개체의 레이블이라는 두 가지 레이블이 포함됩니다. 이러한 레이블은 모든 종류의 개체에 적용될 수 있으므로 데이터베이스 내에 저장된 개체에 대한 액세스 제어 결정은 파일과 같은 다른 유형의 개체에 사용되는 것과 동일한 일반 기준에 따라 결정될 수 있습니다. 이 설계는 중앙 집중식 보안 정책을 통해 해당 자산이 저장되는 방식과 관계없이 정보 자산을 보호할 수 있도록 하기 위한 것입니다.
그보안 라벨문을 사용하면 데이터베이스 개체에 보안 레이블을 할당할 수 있습니다.
스포츠 토토다음에서만 사용할 수 있습니다.리눅스2.6.28 이상 포함SELinux활성화되었습니다. 다른 플랫폼에서는 사용할 수 없습니다. 당신은 또한 필요합니다libselinux2.1.10 이상 및selinux-정책3.9.13 이상(일부 배포판에서는 필요한 규칙을 이전 정책 버전으로 백포트할 수 있지만).
그sestatus명령을 사용하면 상태를 확인할 수 있습니다.SELinux. 일반적인 디스플레이는 다음과 같습니다.
$ sestatus SELinux 상태: 활성화됨 SELinuxfs 마운트: /selinux 현재 모드: 시행 구성 파일의 모드: 시행 정책 버전: 24 구성 파일의 정책: 대상
만약SELinux이 비활성화되었거나 설치되지 않은 경우, 이 모듈을 설치하기 전에 먼저 해당 제품을 설정해야 합니다.
이 모듈을 빌드하려면 다음 옵션을 포함하십시오.--with-selinuxPostgreSQL에서구성명령. 다음을 확인하세요.libselinux-develRPM은 빌드 시 설치됩니다.
이 모듈을 사용하려면 다음을 포함해야 합니다.스포츠 토토에서shared_preload_libraries매개변수postgresql.conf. 다른 방식으로 로드하면 모듈이 올바르게 작동하지 않습니다. 모듈이 로드되면 실행해야 합니다.스포츠 토토.sql각 데이터베이스에 있습니다. 보안 라벨 관리에 필요한 기능을 설치하고 초기 보안 라벨을 할당합니다.
다음은 새로운 데이터베이스 클러스터를 초기화하는 방법을 보여주는 예입니다.스포츠 토토기능 및 보안 레이블이 설치되었습니다. 설치에 맞게 표시된 경로를 조정하십시오.
$ 내보내기 PGDATA=/path/to/data/directory
$ 초기화
$ 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
완료
귀하의 특정 버전에 따라 다음 알림 중 일부 또는 전부가 표시될 수 있습니다.libselinux그리고selinux-정책:
/etc/selinux/targeted/contexts/스포츠 토토_contexts: 33행에 잘못된 개체 유형 db_blobs가 있습니다. /etc/selinux/targeted/contexts/스포츠 토토_contexts: 36행에 잘못된 개체 유형 db_언어가 있습니다. /etc/selinux/targeted/contexts/스포츠 토토_contexts: 37행에 잘못된 개체 유형 db_언어가 있습니다. /etc/selinux/targeted/contexts/스포츠 토토_contexts: 38행에 잘못된 개체 유형 db_언어가 있습니다. /etc/selinux/targeted/contexts/스포츠 토토_contexts: 39행에 잘못된 개체 유형 db_언어가 있습니다. /etc/selinux/targeted/contexts/스포츠 토토_contexts: 40행에 잘못된 개체 유형 db_언어가 있습니다.
이 메시지는 무해하므로 무시해야 합니다.
설치 프로세스가 오류 없이 완료되면 이제 서버를 정상적으로 시작할 수 있습니다.
특성상SELinux, 회귀 테스트 실행 중스포츠 토토몇 가지 추가 구성 단계가 필요하며 그 중 일부는 루트로 수행해야 합니다. 회귀 테스트는 일반에 의해 실행되지 않습니다.확인하세요또는설치 확인 수행명령; 구성을 설정한 다음 테스트 스크립트를 수동으로 호출해야 합니다. 테스트는 다음에서 실행되어야 합니다.contrib/스포츠 토토구성된 PostgreSQL 빌드 트리의 디렉터리입니다. 빌드 트리가 필요하지만 테스트는 설치된 서버에 대해 실행되도록 설계되었습니다. 즉, 다음과 유사합니다.설치 확인 수행아님확인하세요.
먼저, 설정스포츠 토토다음 지침에 따라 작업 중인 데이터베이스에서섹션 F.35.2. 현재 운영 체제 사용자는 비밀번호 인증 없이 수퍼유저로 데이터베이스에 연결할 수 있어야 합니다.
둘째, 회귀 테스트를 위한 정책 패키지를 빌드하고 설치합니다.스포츠 토토-regtestpolicy는 회귀 테스트 중에 허용되는 일련의 규칙을 제공하는 특수 목적의 정책 패키지입니다. 정책 소스 파일에서 빌드되어야 합니다.스포츠 토토-regtest.te, 이는를 사용하여 수행됩니다.만들다SELinux에서 제공하는 Makefile을 사용합니다. 시스템에서 적절한 Makefile을 찾아야 합니다. 아래 표시된 경로는 단지 예일 뿐입니다. 빌드되면 다음을 사용하여 이 정책 패키지를 설치합니다.세모듈17965_18070나열해야 함세모듈-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 켜짐 $ getsebool 스포츠 토토_regression_test_mode 스포츠 토토_regression_test_mode -- 켜기
넷째, 쉘이 다음에서 작동하는지 확인하십시오.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
스포츠 토토.permissive (부울) 이 매개변수는 다음을 활성화합니다.스포츠 토토시스템 설정에 관계없이 허용 모드에서 작동합니다. 기본값은 꺼져 있습니다. 이 매개변수는에서만 설정할 수 있습니다.postgresql.conf파일 또는 서버 명령줄에서.
이 매개변수가 켜져 있으면,스포츠 토토일반적으로 SELinux가 시행 모드에서 작동하는 경우에도 허용 모드에서 작동합니다. 이 매개변수는 주로 테스트 목적으로 유용합니다.
스포츠 토토.debug_audit (부울) 이 매개변수는 시스템 정책 설정에 관계없이 감사 메시지 인쇄를 활성화합니다. 기본값은 꺼짐입니다. 이는 시스템 설정에 따라 메시지가 인쇄된다는 의미입니다.
보안 정책SELinux또한 특정 액세스가 기록되는지 여부를 제어하는 규칙이 있습니다. 기본적으로 액세스 위반은 기록되지만 허용된 액세스는 기록되지 않습니다.
이 매개변수는 시스템 정책에 관계없이 가능한 모든 로깅을 강제로 활성화합니다.
보안 모델SELinux은 모든 액세스 제어 규칙을 주체 엔터티(일반적으로 데이터베이스의 클라이언트)와 객체 엔터티(예: 데이터베이스 객체) 간의 관계로 설명하며, 각 객체는 보안 레이블로 식별됩니다. 레이블이 지정되지 않은 개체에 대한 액세스를 시도하면 해당 개체는 레이블이 할당된 것처럼 처리됩니다.unlabeled_t.
현재,스포츠 토토스키마, 테이블, 열, 시퀀스, 뷰 및 함수에 보안 레이블을 할당할 수 있습니다. 언제스포츠 토토이 사용 중이면 생성 시 지원되는 데이터베이스 개체에 보안 레이블이 자동으로 할당됩니다. 이 레이블은 기본 보안 레이블이라고 하며 생성자의 레이블, 새 개체의 상위 개체에 할당된 레이블 및 선택적으로 생성된 개체의 이름을 입력으로 사용하는 시스템 보안 정책에 따라 결정됩니다.
새 데이터베이스 개체는 기본적으로 상위 개체의 보안 레이블을 상속합니다. 단, 보안 정책에 유형 전환 규칙이라는 특수 규칙이 있는 경우는 제외됩니다. 이 경우 다른 레이블이 적용될 수 있습니다. 스키마의 경우 상위 개체는 현재 데이터베이스입니다. 테이블, 시퀀스, 뷰 및 함수의 경우 이는 포함하는 스키마입니다. 열의 경우 포함 테이블입니다.
테이블의 경우,db_table:선택, db_table:insert, db_table:업데이트또는db_table:삭제문의 종류에 따라 참조된 모든 대상 테이블을 검사합니다. 게다가,db_table:선택또한 참조된 열을 포함하는 모든 테이블에 대해 확인됩니다.어디에서또는돌아오는 중절, 데이터 소스로업데이트등.
참조된 각 열에 대해 열 수준 권한도 확인됩니다.db_column:선택다음을 사용하여 읽는 열뿐만 아니라 확인됩니다.선택, 그러나 다른 DML 문에서 참조되는 내용;db_column:업데이트또는db_column:삽입다음에 의해 수정되는 열도 확인됩니다.업데이트또는삽입.
예를 들어 다음을 고려해보세요:
t1 세트 업데이트 x = 2, y = func1(y) WHERE z = 100;
여기,db_column:업데이트다음 사항을 확인합니다t1.x, 업데이트 중이므로,db_column:업데이트 선택다음 사항을 확인합니다t1.y, 업데이트되고 참조되므로, 그리고db_column:선택다음 사항을 확인합니다t1.z, 참조만 되므로.db_table:업데이트 선택테이블 수준에서도 확인됩니다.
시퀀스의 경우,db_sequence:get_value다음을 사용하여 시퀀스 객체를 참조할 때 확인됩니다.선택; 그러나 현재는 다음과 같은 해당 기능의 실행에 대한 권한을 확인하지 않습니다.마지막 값().
뷰의 경우,db_view:확장확인된 후 보기에서 확장되는 개체에 대해 다른 필요한 권한이 개별적으로 확인됩니다.
기능의 경우,db_procedure:실행사용자가 쿼리의 일부로 또는 빠른 경로 호출을 사용하여 함수를 실행하려고 시도할 때 확인됩니다. 이 함수가 신뢰할 수 있는 프로시저인 경우 다음도 확인합니다.db_procedure:entrypoint신뢰할 수 있는 프로시저의 진입점으로 수행할 수 있는지 확인하는 권한입니다.
스키마 객체에 접근하려면,db_schema:검색26706_26920사용스키마에 대한 권한). 명시적인 스키마 한정이 있는 경우 사용자에게 명명된 스키마에 대한 필수 권한이 없으면 오류가 발생합니다.
클라이언트는 참조된 모든 테이블과 열이 확장된 뷰에서 비롯된 경우라도 참조된 모든 테이블과 열에 액세스할 수 있도록 허용되어야 합니다. 따라서 테이블 내용이 참조되는 방식과 관계없이 일관된 액세스 제어 규칙을 적용합니다.
기본 데이터베이스 권한 시스템을 사용하면 데이터베이스 수퍼유저가 DML 명령을 사용하여 시스템 카탈로그를 수정하고 토스트 테이블을 참조하거나 수정할 수 있습니다. 이러한 작업은 다음과 같은 경우에 금지됩니다.스포츠 토토활성화되었습니다.
SELinux각 객체 유형에 대한 일반적인 작업을 제어하기 위한 여러 권한을 정의합니다. 보안 라벨의 생성, 변경, 삭제 및 재라벨링 등. 또한 여러 개체 유형에는 해당 특성 작업을 제어할 수 있는 특별한 권한이 있습니다. 예를 들어 특정 스키마 내의 이름 항목 추가 또는 삭제 등.
새 데이터베이스 개체를 생성하려면 다음이 필요합니다.생성허가.SELinux클라이언트의 보안 레이블과 새 개체에 대해 제안된 보안 레이블을 기반으로 이 권한을 부여하거나 거부합니다. 경우에 따라 추가 권한이 필요합니다.
데이터베이스 생성추가로 필요함getattr소스 또는 템플릿 데이터베이스에 대한 권한.
스키마 개체를 생성하려면 추가로 필요합니다추가_이름상위 스키마에 대한 권한.
테이블을 생성하려면 각 테이블 열이 별도의 최상위 개체인 것처럼 각 개별 테이블 열을 생성할 수 있는 권한이 추가로 필요합니다.
다음으로 표시된 함수 생성누출방지추가로 요구됨설치허가. (이 권한은 다음 경우에도 확인됩니다.누출 방지기존 기능에 대해 설정되었습니다.)
언제드롭명령이 실행되었습니다.드롭제거되는 개체에 대해 확인됩니다. 다음을 통해 간접적으로 삭제된 개체에 대한 권한도 확인됩니다.캐스케이드. 특정 스키마(테이블, 뷰, 시퀀스 및 프로시저) 내에 포함된 개체를 삭제하려면 추가로 다음이 필요합니다.remove_name스키마에.
언제변경명령이 실행되었습니다.setattr은 권한이 상위 개체에 대해 대신 확인되는 테이블의 인덱스 또는 트리거와 같은 보조 개체를 제외하고 각 개체 유형에 대해 수정되는 개체에 대해 확인됩니다. 경우에 따라 추가 권한이 필요합니다.
객체를 새 스키마로 이동하려면 추가로 요구되는 사항remove_name이전 스키마에 대한 권한 및추가_이름새 항목에 대한 권한입니다.
설정누설방지함수에 대한 속성이 필요합니다설치허가.
사용 중보안 라벨객체에 추가로 요구되는 사항재 라벨 지정이전 보안 레이블과 함께 개체에 대한 권한 및relabelto새 보안 레이블과 함께 개체에 대한 권한입니다. (여러 개의 레이블 공급자가 설치되어 있고 사용자가 보안 레이블을 설정하려고 하지만 관리되지 않는 경우SELinux, 만setattr여기에서 확인해야 합니다. 현재는 구현 제한으로 인해 수행되지 않습니다.)
신뢰할 수 있는 절차는 보안 정의자 기능 또는 setuid 명령과 유사합니다.SELinux일반적으로 민감한 데이터에 대한 고도로 제어된 액세스를 제공할 목적으로 클라이언트의 보안 레이블과 다른 보안 레이블을 사용하여 신뢰할 수 있는 코드를 실행할 수 있는 기능을 제공합니다(예: 행이 생략되거나 저장된 값의 정밀도가 감소될 수 있음). 기능이 신뢰할 수 있는 프로시저로 작동하는지 여부는 해당 보안 레이블과 운영 체제 보안 정책에 의해 제어됩니다. 예를 들어:
postgres=# CREATE TABLE 고객(
cid int 기본 키,
이름 텍스트,
신용 텍스트
);
테이블 만들기
postgres=# customer.credit 열의 보안 레이블
IS 'system_u:object_r:스포츠 토토_secret_table_t:s0';
보안 라벨
postgres=# 함수 생성 show_credit(int) 텍스트 반환
AS 'SELECT regexp_replace(credit, ''-[0-9]+$'', ''-xxxx'', ''g'')
고객으로부터 cid = $1'
언어 sql;
함수 생성
postgres=# 함수에 대한 보안 레이블 show_credit(int)
IS 'system_u:object_r:스포츠 토토_trusted_proc_exec_t:s0';
보안 라벨
위 작업은 관리자가 수행해야 합니다.
postgres=# SELECT * FROM 고객; 오류: SELinux: 보안 정책 위반 postgres=# SELECT cid, cname, show_credit(cid) FROM 고객; 시드 | c이름 | 쇼_크레딧 ----+---------+--------- 1 | 타로 | 1111-2222-3333-xxxx 2 | 하나코 | 5555-6666-7777-xxxx (2행)
이 경우 일반 사용자는 참조할 수 없습니다.고객.신용직접적이지만 신뢰할 수 있는 절차show_credit사용자는 일부 숫자가 가려진 고객의 신용카드 번호를 인쇄할 수 있습니다.
보안 정책에서 허용하는 경우 SELinux의 동적 도메인 전환 기능을 사용하여 클라이언트 프로세스의 보안 레이블인 클라이언트 도메인을 새 컨텍스트로 전환할 수 있습니다. 클라이언트 도메인에는 다음이 필요합니다.setcurrent허가 및 또한dyntransition이전 도메인에서 새 도메인으로.
동적 도메인 전환은 사용자가 시스템에서 지시한 대로(신뢰할 수 있는 절차의 경우처럼) 아닌 자신의 선택에 따라 라벨을 전환하고 그에 따라 권한을 전환할 수 있도록 허용하므로 신중하게 고려해야 합니다. 따라서,dyntransition권한은 원래 권한보다 적은 권한 집합을 가진 도메인으로 전환하는 데 사용될 때만 안전한 것으로 간주됩니다. 예를 들면:
regression=# 스포츠 토토_getcon() 선택;
스포츠 토토_getcon
------------------------------------------
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
(1줄)
regression=# SELECT 스포츠 토토_setcon('unconfined_u:unconfined_r:unconfined_t:s0-s0:c1.c4');
스포츠 토토_setcon
----------------
티
(1줄)
regression=# SELECT 스포츠 토토_setcon('unconfined_u:unconfined_r:unconfined_t:s0-s0:c1.c1023');
오류: SELinux: 보안 정책 위반
위의 예에서는 더 큰 MCS 범위에서 전환할 수 있었습니다.c1.c1023더 작은 범위로c1.c4, 하지만 다시 전환이 거부되었습니다.
동적 도메인 전환과 신뢰할 수 있는 절차의 조합은 연결 풀링 소프트웨어의 일반적인 프로세스 수명 주기에 맞는 흥미로운 사용 사례를 가능하게 합니다. 연결 풀링 소프트웨어가 대부분의 SQL 명령을 실행할 수 없는 경우에도 다음을 사용하여 클라이언트의 보안 레이블을 전환하도록 허용할 수 있습니다.스포츠 토토_setcon()신뢰할 수 있는 절차 내에서 기능; 클라이언트 레이블 전환 요청을 승인하려면 일부 자격 증명이 필요합니다. 그 이후에는 이 세션이 연결 풀러가 아닌 대상 사용자의 권한을 갖게 됩니다. 연결 풀러는 나중에 다시 다음을 사용하여 보안 레이블 변경을 되돌릴 수 있습니다.스포츠 토토_setcon()와NULL인수, 적절한 권한 확인을 통해 신뢰할 수 있는 프로시저 내에서 다시 호출됩니다. 여기서 중요한 점은 신뢰할 수 있는 프로시저만이 실제로 유효한 보안 레이블을 변경할 수 있는 권한을 갖고 있으며 적절한 자격 증명이 제공된 경우에만 그렇게 한다는 것입니다. 물론 안전한 작업을 위해서는 자격 증명 저장소(테이블, 프로시저 정의 등)를 무단 액세스로부터 보호해야 합니다.
우리는 다음을 거부합니다로드로드된 모든 모듈이 보안 정책 시행을 쉽게 우회할 수 있기 때문에 전반적인 명령입니다.
표 F.29사용 가능한 기능을 보여줍니다.
표 F.29. Sepgsql 함수
스포츠 토토_getcon()이 텍스트를 반환함 |
클라이언트의 현재 보안 라벨인 클라이언트 도메인을 반환합니다. |
스포츠 토토_setcon(text)는 bool을 반환합니다. |
보안 정책에서 허용하는 경우 현재 세션의 클라이언트 도메인을 새 도메인으로 전환합니다. 또한 허용됩니다.NULL클라이언트의 원래 도메인으로 전환하기 위한 요청으로 입력합니다. |
스포츠 토토_mcstrans_in(text)가 텍스트를 반환함 |
mcstrans 데몬이 실행 중인 경우 주어진 정규화된 MLS/MCS 범위를 원시 형식으로 변환합니다. |
스포츠 토토_mcstrans_out(text)가 텍스트를 반환함 |
mcstrans 데몬이 실행 중인 경우 주어진 원시 MLS/MCS 범위를 정규화된 형식으로 변환합니다. |
스포츠 토토_restorecon(text)가 bool을 반환함 |
현재 데이터베이스 내의 모든 개체에 대한 초기 보안 레이블을 설정합니다. 인수는 NULL이거나 시스템 기본값 대신 사용할 사양 파일의 이름일 수 있습니다. |
구현 제한으로 인해 일부 DDL 작업은 권한을 확인하지 않습니다.
구현 제한으로 인해 DCL 작업은 권한을 확인하지 않습니다.
PostgreSQL행 수준 액세스를 지원하지만스포츠 토토그렇지 않습니다.
스포츠 토토사용자가 참조할 수 없는 경우에도 특정 개체의 존재를 숨기려고 하지 않습니다. 예를 들어, 객체의 내용을 얻을 수 없더라도 기본 키 충돌, 외래 키 위반 등의 결과로 보이지 않는 객체의 존재를 추론할 수 있습니다. 일급 비밀 테이블의 존재는 숨길 수 없습니다. 우리는 단지 그 내용을 숨기기를 바랄 뿐입니다.
이 위키 페이지는 간략한 개요, 보안 설계, 아키텍처, 관리 및 향후 기능을 제공합니다.
이 문서는 관리에 필요한 광범위한 지식을 제공합니다.SELinux당신의 시스템에. 주로 Red Hat 운영 체제에 중점을 두지만 이에 국한되지는 않습니다.
이 문서는 자주 묻는 질문에 대한 답변입니다.SELinux. 주로 Fedora에 중점을 두지만 Fedora에만 국한되지는 않습니다.
카이가이 코헤이<kaigai@ak.jp.nec.com