日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

SELinux Linux安全新高度 安全增強(qiáng)Linux 剖析( 二 )


清單 1. 創(chuàng)建 socket 的內(nèi)核代碼
;;;;static int __sock_create(int family, int type, int protocol,
struct socket **res, int kern)
{
int err;
struct socket *sock;
/*
* Check protocol is in range
*/
if (family < 0 || family >= NPROTO)
return -EAFNOSUPPORT;
if (type < 0 || type >= SOCK_MAX)
return -EINVAL;
err = security_socket_create(family, type, protocol, kern);
if (err)
return err;
...
security_socket_create 函數(shù)在 ./linux/include/linux/security.h 中定義 。它提供了從 security_socket_create 到 security_ops 結(jié)構(gòu)中動態(tài)安裝的函數(shù)的間接調(diào)用(參見清單 2) 。
清單 2. 用于 socket 創(chuàng)建檢查的間接調(diào)用
;;;;static inline int security_socket_create (int family, int type,
int protocol, int kern)
{
return security_ops->socket_create(family, type, protocol, kern);
}
security_ops 結(jié)構(gòu)中的函數(shù)通過安全模塊安裝 。在本例中,這些鉤子在可載入的 SELinux 內(nèi)核模塊中定義 。每個(gè) SELinux 調(diào)用在 hooks 文件內(nèi)部定義,該文件實(shí)現(xiàn)從內(nèi)核函數(shù)到特定安全模塊的動態(tài)調(diào)用的間接性(參見清單 3 中的 .../linux/security/selinux/hooks.c 代碼) 。
【SELinux Linux安全新高度 安全增強(qiáng)Linux剖析】清單 3. SELinux socket 創(chuàng)建檢查
;;;;static int selinux_socket_create(int family, int type,
int protocol, int kern)
{
int err = 0;
struct task_security_struct *tsec;
if (kern)
goto out;
tsec = current->security;
err = avc_has_perm(tsec->sid, tsec->sid,
socket_type_to_security_class(family, type,
protocol), SOCKET__create, NULL);
out:
return err;
}
清單 3 的核心部分是一個(gè)調(diào)用,用于驗(yàn)證當(dāng)前操作是否是當(dāng)前任務(wù)(通過 current->security 定義,其中 current 代表當(dāng)前正在執(zhí)行的任務(wù))所允許的 。訪問向量緩存(Access Vector Cache,AVC)緩存了之前的 SELinux 決策(提高進(jìn)程的性能) 。此調(diào)用包括源安全標(biāo)識符(sid)、安全類(根據(jù)請求操作的詳細(xì)信息構(gòu)造)、特定 socket 調(diào)用,以及可選的輔助審計(jì)數(shù)據(jù) 。如果未在緩存中找到?jīng)Q策,那么會調(diào)用安全服務(wù)器來獲取決策(此過程如圖 2 所示) 。
圖 2. 分層 Linux 安全進(jìn)程
上一頁;;[1];[2][3];下一頁
初始化到 security_ops 中的回調(diào)鉤子被動態(tài)定義為一個(gè)可載入內(nèi)核模塊(通過 register_security()),但是在沒有載入安全模塊時(shí),這些鉤子包含偽樁(dummy stub)函數(shù)(參見 ./linux/security/dummy.c) 。這些樁函數(shù)實(shí)現(xiàn)標(biāo)準(zhǔn) Linux DAC 策略 。始終存在回調(diào)鉤子,其中必須提供對象中介(mediation)來保證安全性 。這包括任務(wù)管理(創(chuàng)建、通知、等待)、程序載入(execve)、文件系統(tǒng)管理(超級塊、inode、文件鉤子)、IPC(消息隊(duì)列、共享內(nèi)存、信號量(semaphore)操作)、模塊鉤子(插入和刪除)、網(wǎng)絡(luò)鉤子(覆蓋 socket、netlink、網(wǎng)絡(luò)設(shè)備和其他協(xié)議接口) 。更多信息請參見 參考資料 小節(jié)或回顧 security.h 文件 。
其他方法
SELinux 是目前最全面的安全框架之一,但它不是惟一的 。本節(jié)回顧其他一些可用的方法 。
Apparmor
AppArmor 最初由 Immunix 開發(fā),隨后由 Novell 維護(hù),它是 SELinux 的替代方法,也使用了 Linux 安全模塊(LSM)框架 。由于 SELinux 和 AppArmor 使用了同樣的框架,所以它們可以互換 。AppArmor 的開發(fā)初衷是因?yàn)槿藗冋J(rèn)為 SELinux 太過復(fù)雜,不適合普通用戶管理 。Apparmor 包含一個(gè)完全可配置的 MAC 模型和一個(gè)學(xué)習(xí)模式,在學(xué)習(xí)模式中,程序的典型行為可以轉(zhuǎn)換為一個(gè)配置文件 。
SELinux 的一個(gè)問題在于,它需要一個(gè)支持?jǐn)U展屬性的文件系統(tǒng);而 Apparmor 對文件系統(tǒng)沒有任何要求 。您可以在 SUSE、OpenSUSE,以及 Ubuntu 的 Gutsy Gibbon 中找到 Apparmor 。

推薦閱讀