PostgreSQL sepgsql

2021-09-16 17:21 更新
F.35.1. 概述
F.35.2. 安裝
F.35.3. 回歸測(cè)試
F.35.4. GUC 參數(shù)
F.35.5. 特性
F.35.6. Sepgsql 函數(shù)
F.35.7. 限制
F.35.8. 外部資源

sepgsql是一個(gè)基于SELinux安全策略的 支持基于標(biāo)簽的強(qiáng)制訪問控制(MAC)模塊。

警告

當(dāng)前的實(shí)現(xiàn)具有明顯的限制,并且不支持對(duì)所有動(dòng)作的強(qiáng)制訪問控制。詳見 第 F.35.7 節(jié)。

F.35.1. 概述

這個(gè)模塊和SELinux集成在一起在 PostgreSQL提供的安全檢查之上提供了一個(gè) 額外的安全檢查層。從SELinux的角度來看,這個(gè)模塊允許 PostgreSQL作為一個(gè)用戶空間對(duì)象管理器。 對(duì)每一次由 DML 查詢發(fā)起的表或者函數(shù)訪問將根據(jù)系統(tǒng)安全策略進(jìn)行檢查。這種 檢查是在PostgreSQL執(zhí)行的常規(guī) SQL 權(quán)限 檢查之外進(jìn)行的。

SELinux訪問控制決定是通過使用安全標(biāo)簽 來做出的,安全標(biāo)簽使用system_u:object_r:sepgsql_table_t:s0 這樣的字符串表示。每個(gè)訪問控制決定涉及兩個(gè)標(biāo)簽:嘗試執(zhí)行該動(dòng)作的主體的 標(biāo)簽以及要在其上執(zhí)行該動(dòng)作的客體的標(biāo)簽。由于這些標(biāo)簽可以被應(yīng)用于任何種 類的對(duì)象,對(duì)于存儲(chǔ)在數(shù)據(jù)庫(kù)中的對(duì)象的(用這個(gè)模塊做出的)訪問控制決定服 從于用于任意其他類型對(duì)象(例如文件)的同一種一般準(zhǔn)則。這種設(shè)計(jì)是為了允 許一種中央安全策略來保護(hù)信息資產(chǎn),而不依賴于這些資產(chǎn)是如何存儲(chǔ)的。

SECURITY LABEL語句允許為一個(gè)數(shù)據(jù)庫(kù)對(duì)象分配安全標(biāo)簽。

F.35.2. 安裝

sepgsql只能在啟用了 SELinuxLinux 2.6.28 或者更高版本上使用。在任何 其他平臺(tái)上都無法使用這個(gè)模塊。你將還需要 libselinux 2.1.10 或者更高版本以及 selinux-policy 3.9.13 或者更高版本(盡管某些發(fā)行中可能 把必要的規(guī)則逆向移植到較老的策略版本中)。

你可以使用sestatus命令檢查 SELinux的狀態(tài)。一種典型的顯示是:

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

如果沒有安裝或者啟用SELinux,你就必須在安裝這個(gè)模塊 之前先安裝或者啟用它。

要編譯這個(gè)模塊,應(yīng)該在你的 PostgreSQL configure 命令中包括 選項(xiàng)--with-selinux。還要確定編譯時(shí)安裝了 libselinux-devel RPM 包。

要使用這個(gè)模塊,你必須在postgresql.conf文件中的 shared_preload_libraries參數(shù)里包括 sepgsql。如果以其他任何方式載入該模塊,它將無法正確地工作。 一旦該模塊被載入,你應(yīng)該在每一個(gè)數(shù)據(jù)庫(kù)中執(zhí)行 sepgsql.sql。這將會(huì)安裝安全標(biāo)簽管理所需的函數(shù) 并且分配初始的安全標(biāo)簽。

這里有一個(gè)展示如何用sepgsql函數(shù)和安全標(biāo)簽初始化一個(gè)新 數(shù)據(jù)庫(kù)集簇的例子(根據(jù)你的安裝調(diào)整其中的路徑):

$ export PGDATA=/path/to/data/directory
$ initdb
$ vi $PGDATA/postgresql.conf
  change
    #shared_preload_libraries = ''                # (change requires restart)
  to
    shared_preload_libraries = 'sepgsql'          # (change requires restart)
$ for DBNAME in template0 template1 postgres; do
    postgres --single -F -c exit_on_error=true $DBNAME \
      </usr/local/pgsql/share/contrib/sepgsql.sql >/dev/null
  done

請(qǐng)注意,如果你具有特定版本的libselinuxselinux-policy,你可能會(huì)看到下列提示中的一些或者全部:

/etc/selinux/targeted/contexts/sepgsql_contexts:  line 33 has invalid object type db_blobs
/etc/selinux/targeted/contexts/sepgsql_contexts:  line 36 has invalid object type db_language
/etc/selinux/targeted/contexts/sepgsql_contexts:  line 37 has invalid object type db_language
/etc/selinux/targeted/contexts/sepgsql_contexts:  line 38 has invalid object type db_language
/etc/selinux/targeted/contexts/sepgsql_contexts:  line 39 has invalid object type db_language
/etc/selinux/targeted/contexts/sepgsql_contexts:  line 40 has invalid object type db_language

這些消息是無害的并且應(yīng)該被忽略。

如果該安裝過程完成時(shí)沒有出現(xiàn)錯(cuò)誤,就可以正常啟動(dòng)服務(wù)器了。

F.35.3. 回歸測(cè)試

由于SELinux的本質(zhì),為sepgsql 運(yùn)行回歸測(cè)試要求一些額外的配置步驟,某些步驟還需要由 root 來完成。該回歸測(cè)試 無法通過普通的make check或者make installcheck命令運(yùn)行, 你必須建立配置并且接著手工調(diào)用測(cè)試腳本。這些測(cè)試必須在一個(gè)已配置 PostgreSQL 編譯樹的contrib/sepgsql目錄中運(yùn)行。盡管它們要求一個(gè)編譯樹,但是 這些測(cè)試被設(shè)計(jì)成在一個(gè)已安裝服務(wù)器上執(zhí)行,也就是說它們可以比得上 make installcheck(而不是make check)。

首先,根據(jù)本文中第 F.35.2 節(jié)中的指導(dǎo)在一個(gè)工作數(shù)據(jù)庫(kù)中設(shè)置 sepgsql。注意當(dāng)前操作系統(tǒng)用戶必須能夠不使用口令認(rèn)證作 為超級(jí)用戶連接到該數(shù)據(jù)庫(kù)。

第二,為該回歸測(cè)試編譯和安裝策略包。sepgsql-regtest策略是一個(gè) 特殊的策略包,它提供一組在回歸測(cè)試淺見要被允許的規(guī)則。它應(yīng)該從策略源文件 sepgsql-regtest.te編譯,這需要通過使用 make和一個(gè) SELinux 提供的 Makefile 完成。你將需要 在你自己的系統(tǒng)上找到合適的 Makefile,下面展示的路徑只是一個(gè)例子。(這個(gè) Makefile 通常 由 selinux-policy-develselinux-policy RPM 提供。)一旦編譯好, 使用semodule命令安裝這個(gè)策略包,它會(huì)把所提供的策略包載入到 內(nèi)核中。如果該包被正確地安裝,semodule -l應(yīng)該把 sepgsql-regtest列成一個(gè)可用的策略包:

$ 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中的規(guī)則默認(rèn)沒有被啟用。 the sepgsql_regression_test_mode參數(shù)會(huì)啟用啟動(dòng)該回歸 測(cè)試所需的規(guī)則。它可以使用setsebool命令來啟用:

$ sudo setsebool sepgsql_regression_test_mode on $ getsebool sepgsql_regression_test_mode sepgsql_regression_test_mode --> on

第四,驗(yàn)證你的 shell 在unconfined_t域中操作:

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

如果有必要,可以參考本文中第 F.35.8 節(jié)來調(diào)整你的工作域。

最后,運(yùn)行該回歸測(cè)試腳本:

$ ./test_sepgsql

這個(gè)腳本將嘗試驗(yàn)證你已經(jīng)正確地完成了所有的配置步驟,接下來它將運(yùn)行 sepgsql模塊的回歸測(cè)試。

完成測(cè)試后,推薦你禁用 sepgsql_regression_test_mode參數(shù):

$ sudo setsebool sepgsql_regression_test_mode off

你可能想要完全移除sepgsql-regtest策略:

$ sudo semodule -r sepgsql-regtest

F.35.4. GUC 參數(shù)

sepgsql.permissive (boolean)

不管系統(tǒng)設(shè)置如何,這個(gè)參數(shù)讓sepgsql在自由模式中運(yùn)行。 默認(rèn)值為關(guān)閉。這個(gè)參數(shù)只能在postgresql.conf文件中或者 服務(wù)器命令行上被設(shè)置。

當(dāng)這個(gè)參數(shù)為打開時(shí),sepgsql在自由模式中運(yùn)行,即便 SELinux 運(yùn)行在強(qiáng)制模式中也是如此。這個(gè)參數(shù)主要用于測(cè)試目的。

sepgsql.debug_audit (boolean)

不管系統(tǒng)策略設(shè)置如何,這個(gè)參數(shù)啟用打印審計(jì)消息。默認(rèn)值為關(guān)閉,表示將 根據(jù)系統(tǒng)設(shè)置打印消息。

SELinux的安全性策略也具有控制是否記錄特定訪問的 規(guī)則。默認(rèn)情況下,違法訪問將會(huì)被記錄,但是被允許的訪問則不會(huì)被記錄。

這個(gè)參數(shù)強(qiáng)制打開所有可能的記錄而不管該系統(tǒng)策略。

F.35.5. 特性

F.35.5.1. 控制對(duì)象類

SELinux的安全模型把所有訪問控制規(guī)則描述為一個(gè) 主體(典型的是一個(gè)數(shù)據(jù)庫(kù)客戶端)和一個(gè)客體(例如一個(gè)數(shù)據(jù)庫(kù)對(duì)象)之 間的關(guān)系, 每一個(gè)這樣的關(guān)系被一個(gè)安全標(biāo)簽標(biāo)識(shí)。如果嘗試訪問一個(gè)未加 標(biāo)簽的客體,會(huì)認(rèn)為該客體被分配了標(biāo)簽unlabeled_t

當(dāng)前,sepgsql允許把安全標(biāo)簽分配給模式、表、列、 序列、視圖和函數(shù)。在使用sepgsql時(shí),安全標(biāo)簽會(huì) 在所支持的數(shù)據(jù)庫(kù)對(duì)象創(chuàng)建時(shí)自動(dòng)分配給它們。這種標(biāo)簽被稱為默認(rèn)安全標(biāo)簽 并且根據(jù)系統(tǒng)安全性策略決定,默認(rèn)安全標(biāo)簽被用來輸入創(chuàng)建者標(biāo)簽、分配給 新對(duì)象父對(duì)象的標(biāo)簽以及所構(gòu)造對(duì)象的可選名稱。

一個(gè)新數(shù)據(jù)庫(kù)對(duì)象基本上會(huì)繼承父對(duì)象的安全標(biāo)簽,不過當(dāng)安全策略具有特殊的 類型轉(zhuǎn)換規(guī)則時(shí),將會(huì)應(yīng)用一個(gè)不同的標(biāo)簽。對(duì)于模式,其父對(duì)象是當(dāng)前數(shù)據(jù)庫(kù)。 對(duì)于表、序列、視圖和函數(shù),父對(duì)象是包含它的模式。對(duì)于列,其父對(duì)象是包含 它的表。

F.35.5.2. DML 權(quán)限

對(duì)于表,根據(jù)語句的種類會(huì)對(duì)所有被引用的目標(biāo)表檢查 db_table:select、db_table:insert、 db_table:update或者db_table:delete。此外,對(duì)于 所有其列被WHERERETURNING子句引用、作為 UPDATE的數(shù)據(jù)源(以及其他情況)的表, 都要檢查db_table:select。

對(duì)每一個(gè)被引用的列也將檢查列級(jí)權(quán)限。不僅在使用SELECT讀取列 時(shí)會(huì)檢查db_column:select,在其他 DML 語句中引用列時(shí)也要檢查。 對(duì)于被UPDATE或者INSERT修改的列也將檢查 db_column:update或者 db_column:insert

例如,考慮:

UPDATE t1 SET x = 2, y = func1(y) WHERE z = 100;

這里,將對(duì)t1.x檢查db_column:update,因?yàn)樗?被更新。對(duì)t1.y將檢查db_column:{select update}, 因?yàn)樗缺桓乱脖灰?。并且?huì)對(duì)t1.z檢查 db_column:select,因?yàn)樗槐桓?。還將在表層面上檢查 db_table:{select update}

對(duì)于序列,當(dāng)我們使用SELECT引用一個(gè)序列對(duì)象時(shí)會(huì)檢查 db_sequence:get_value。不過,我們當(dāng)前不會(huì)檢查執(zhí)行相應(yīng) 函數(shù)(例如lastval())的權(quán)限。

對(duì)于視圖,將檢查db_view:expand,然后對(duì)從視圖展開來的任何 對(duì)象都會(huì)分別檢查所需的權(quán)限。

對(duì)于函數(shù),當(dāng)用戶嘗試在一個(gè)查詢中或者使用快路徑調(diào)用執(zhí)行一個(gè)函數(shù)時(shí)會(huì)檢查 db_procedure:{execute}。如果該函數(shù)是一個(gè)可信過程,也會(huì)檢查 db_procedure:{entrypoint}權(quán)限來看看它能否作為一個(gè)可信程序 的入口點(diǎn)來執(zhí)行。

為了訪問任何模式對(duì)象,在其所在的模式上需要db_schema:search 權(quán)限。當(dāng)不用模式限定引用一個(gè)對(duì)象時(shí),其上沒有該權(quán)限的模式不會(huì)被搜索(就好 像該用戶在該模式上沒有USAGE特權(quán))。如果出現(xiàn)一個(gè)顯式的模式 限定,當(dāng)該用戶在提及的模式上沒有要求的權(quán)限時(shí)將會(huì)發(fā)生一個(gè)錯(cuò)誤。

客戶端必須被允許訪問所有引用到的表和列,即便它們是由視圖擴(kuò)展得來的。這樣 我們可以應(yīng)用一致的訪問控制規(guī)則而不管表內(nèi)容被引用的方式。

默認(rèn)的數(shù)據(jù)庫(kù)特權(quán)系統(tǒng)允許數(shù)據(jù)庫(kù)超級(jí)用戶使用 DML 命令修改系統(tǒng)目錄并且引用 或者修改 TOAST 表。當(dāng)sepgsql被啟用時(shí),這些操作會(huì)被禁止。

F.35.5.3. DDL 權(quán)限

SELinux為每一種對(duì)象類型定義了數(shù)個(gè)權(quán)限來控制 常用操作,例如創(chuàng)建、修改、刪除以及重新標(biāo)記安全標(biāo)簽。此外,數(shù)種 對(duì)象類型具有特殊的權(quán)限來控制它們的特性化操作,例如在一個(gè)特定模式 中增加或者刪除名字項(xiàng)。

創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)對(duì)象要求create權(quán)限。 SELinux將基于客戶端的安全標(biāo)簽來授予或者否決 這個(gè)權(quán)限并且為新對(duì)象提出安全標(biāo)簽。在某些情況下,還需要額外的特權(quán):

  • CREATE DATABASE額外要求源數(shù)據(jù)庫(kù)或者模板數(shù) 據(jù)庫(kù)的getattr權(quán)限。

  • 創(chuàng)建一個(gè)模式對(duì)象額外地要求父模式上的add_name權(quán)限。

  • 創(chuàng)建一個(gè)表額外要求創(chuàng)建單個(gè)表列的權(quán)限,就好像每一個(gè)表列都是一個(gè) 單獨(dú)的頂層對(duì)象。

  • 創(chuàng)建一個(gè)被標(biāo)記為LEAKPROOF的函數(shù)額外要求 install權(quán)限(當(dāng)為一個(gè)現(xiàn)有函數(shù)設(shè)置 LEAKPROOF時(shí)也要檢查這個(gè)權(quán)限)。

當(dāng)執(zhí)行DROP命令時(shí),在要移除的對(duì)象上會(huì)檢查drop。 對(duì)于通過CASCADE間接被刪除的對(duì)象也會(huì)檢查權(quán)限。刪除包含在 一個(gè)特定模式內(nèi)的對(duì)象(表、視圖、序列以及過程)額外地要求該模式上的 remove_name。

在執(zhí)行ALTER命令時(shí),會(huì)在被修改的對(duì)象上為每一種對(duì)象類型檢查 setattr。附屬對(duì)象(例如一個(gè)表的索引或者觸發(fā)器)除外, 這種 情況下權(quán)限是在父對(duì)象上檢查的。在某些情況下,還需要額外的權(quán)限:

  • 將一個(gè)對(duì)象移動(dòng)到一個(gè)新的模式要求舊模式上的remove_name 權(quán)限以及新模式上的add_name權(quán)限。

  • 設(shè)置一個(gè)函數(shù)上的LEAKPROOF屬性要求install權(quán)限。

  • 在一個(gè)對(duì)象上使用SECURITY LABEL會(huì)額外對(duì)該對(duì)象要求 relabelfrom權(quán)限連同它的舊安全標(biāo)簽以及relabelto 權(quán)限連同它的新安全標(biāo)簽(在安裝了多個(gè)標(biāo)簽提供者并且用戶嘗試設(shè)置一個(gè)不由 SELinux管理的安全標(biāo)簽的情況中,這里只應(yīng)該檢查 setattr。當(dāng)前由于實(shí)現(xiàn)限制沒有這樣做。)。

F.35.5.4. 可信過程

可信過程類似于 SECURITY DEFINER 函數(shù)或者 setuid 命令。 SELinux提供了一個(gè)特性來允許可信代碼使用一個(gè)不同 于客戶端的安全標(biāo)簽運(yùn)行,通常這是為了提供對(duì)敏感數(shù)據(jù)的高度控制的訪問( 例如行可能會(huì)被忽略或者存儲(chǔ)值的精度可能會(huì)被降低)。一個(gè)函數(shù)是否可以 作為可信過程受到其安全標(biāo)簽和操作系統(tǒng)安全性策略的控制。例如:

postgres=# CREATE TABLE customer (
               cid     int primary key,
               cname   text,
               credit  text
           );
CREATE TABLE
postgres=# SECURITY LABEL ON COLUMN customer.credit
               IS 'system_u:object_r:sepgsql_secret_table_t:s0';
SECURITY LABEL
postgres=# CREATE FUNCTION show_credit(int) RETURNS text
             AS 'SELECT regexp_replace(credit, ''-[0-9]+$'', ''-xxxx'', ''g'')
                        FROM customer WHERE cid = $1'
           LANGUAGE sql;
CREATE FUNCTION
postgres=# SECURITY LABEL ON FUNCTION show_credit(int)
               IS 'system_u:object_r:sepgsql_trusted_proc_exec_t:s0';
SECURITY LABEL

上述的操作應(yīng)該由一個(gè)管理員用戶執(zhí)行。

postgres=# SELECT * FROM customer;
ERROR:  SELinux: security policy violation
postgres=# SELECT cid, cname, show_credit(cid) FROM customer;
 cid | cname  |     show_credit
-----+--------+---------------------
   1 | taro   | 1111-2222-3333-xxxx
   2 | hanako | 5555-6666-7777-xxxx
(2 rows)

在這種情況下,一個(gè)常規(guī)用戶無法直接引用customer.credit, 但是一個(gè)可信過程show_credit允許用戶在打印客戶的信用卡號(hào)時(shí) 把一些數(shù)字掩蓋掉。

F.35.5.5. 動(dòng)態(tài)域轉(zhuǎn)換

如果安全性策略允許,可以使用 SELinux 的動(dòng)態(tài)域轉(zhuǎn)換特性來切換客戶端 進(jìn)程(客戶端域)的安全性標(biāo)簽到一個(gè)新的上下文。該客戶端域需要 setcurrent權(quán)限還有從舊的域到新的域的 dyntransition權(quán)限。

動(dòng)態(tài)域轉(zhuǎn)換需要被仔細(xì)考慮,因?yàn)樵谟脩艨磥恚鼈冊(cè)试S用戶切換其標(biāo)簽, 并且因而切換特權(quán),而不是(像可信過程的情況那樣)受系統(tǒng)的強(qiáng)制性管理。 因此,只有當(dāng)被用來切換到一個(gè)比原來的域具有更少特權(quán)的域時(shí), dyntransition才被認(rèn)為是安全的。例如:

regression=# select sepgsql_getcon();
                    sepgsql_getcon
-------------------------------------------------------
 unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
(1 row)

regression=# SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0-s0:c1.c4');
 sepgsql_setcon
----------------
 t
(1 row)

regression=# SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0-s0:c1.c1023');
ERROR:  SELinux: security policy violation

在上面的這個(gè)例子中,我們被允許從較大范圍的c1.c1023切換到 較小范圍的c1.c4,但卻禁止切換回去。

動(dòng)態(tài)域轉(zhuǎn)換和可信過程的組合開啟了一種有趣的使用案例,它適合典型的 連接池軟件的處理生命周期。即便你的連接池軟件不被允許運(yùn)行大部分的 SQL 命令,你可以從一個(gè)可信過程中使用 sepgsql_setcon()函數(shù)允許它切換該客戶端的安全標(biāo)簽, 這個(gè)過程應(yīng)該采用一些證據(jù)來授權(quán)該請(qǐng)求切換該客戶端標(biāo)簽。之后,這個(gè) 會(huì)話將會(huì)具有目標(biāo)用戶而不是連接池的特權(quán)。該連接池之后可以用 NULL參數(shù)再次調(diào)用 sepgsql_setcon()逆轉(zhuǎn)這次安全標(biāo)簽改變,當(dāng)然再次的調(diào)用也要在一個(gè)可信過程中配合適當(dāng) 的權(quán)限檢查進(jìn)行。這里的要點(diǎn)是只有可信過程實(shí)際具有權(quán)限來更改有效的安全 標(biāo)簽,并且只有在得到適當(dāng)?shù)淖C據(jù)后才這樣做。當(dāng)然,對(duì)于安全操作,必須 保護(hù)證據(jù)存儲(chǔ)(表、過程定義或者其他什么)不會(huì)受到未經(jīng)授權(quán)的訪問。

F.35.5.6. 雜項(xiàng)

我們?nèi)婢芙^LOAD命令,因?yàn)槿魏文K的裝載都 可能很輕易地繞過安全策略的強(qiáng)制保護(hù)。

F.35.6. Sepgsql 函數(shù)

表 F.29展示了可用的函數(shù)。

表 F.29. Sepgsql 函數(shù)

函數(shù)

簡(jiǎn)述

sepgsql_getcon () → text

返回客戶端域,即客戶端的當(dāng)前安全標(biāo)簽。

sepgsql_setcon ( text ) → boolean

如果安全策略允許,則將當(dāng)前會(huì)話的客戶端域切換到新域。它還接受NULL輸入作為轉(zhuǎn)換到客戶機(jī)原始域的請(qǐng)求。

sepgsql_mcstrans_in ( text ) → text

如果 mcstrans 守護(hù)進(jìn)程正在運(yùn)行,則將給定的限定 MLS/MCS 范圍轉(zhuǎn)換為原始格式。

sepgsql_mcstrans_out ( text ) → text

如果 mcstrans 守護(hù)程序正在運(yùn)行,則將給定的原始 MLS/MCS 范圍轉(zhuǎn)換為限定格式。

sepgsql_restorecon ( text ) → boolean

為當(dāng)前數(shù)據(jù)庫(kù)中的所有對(duì)象設(shè)置初始安全標(biāo)簽。參數(shù)可以是NULL,也可以是要用作系統(tǒng)默認(rèn)值替代項(xiàng)的規(guī)范文件的名稱。


F.35.7. 限制

數(shù)據(jù)定義語言(DDL)權(quán)限

收到實(shí)現(xiàn)的限制,一些 DDL 操作無法檢查權(quán)限。

數(shù)據(jù)控制語言(DCL)權(quán)限

由于實(shí)現(xiàn)限制,DCL 操作不檢查權(quán)限。

行級(jí)訪問控制

PostgreSQL支持行級(jí)訪問,但是 sepgsql不支持行級(jí)訪問。

隱蔽通道

sepgsql不會(huì)嘗試隱藏一個(gè)特定對(duì)象的存在,即便是 用戶不被允許引用該對(duì)象。例如,即便我們無法得到一個(gè)不可見對(duì)象 的內(nèi)容,我們也可以通過主鍵沖突、外鍵違背等等結(jié)果來推知該對(duì)象 的存在。一個(gè)絕密表的存在無法被隱藏,我們只希望能夠隱藏其內(nèi)容。

F.35.8. 外部資源

SE-PostgreSQL 介紹

這個(gè) wiki 頁面提供了一個(gè)簡(jiǎn)單的綜述、安全性設(shè)計(jì)、架構(gòu)、 管理和即將到來的特性。

SELinux用戶和管理員指南

這個(gè)文檔提供了廣泛的知識(shí)來管理系統(tǒng)上的 SELinux。它主要關(guān)注 Red Hat 操作系統(tǒng),但是并不僅限于此。

Fedora SELinux FAQ

這個(gè)文檔回答了很多SELinux 的常見問題。它主要關(guān)注 Fedora,但是并不僅限于此。

 

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)