新聞中心
近年來(lái),隨著互聯(lián)網(wǎng)的快速發(fā)展,我們的日常生活中已離不開(kāi)各種軟件和操作系統(tǒng)。其中,Linux作為一種非常流行的開(kāi)源操作系統(tǒng),其適用性和穩(wěn)定性受到了眾多用戶的青睞。而在Linux操作系統(tǒng)中,URLHook技術(shù)的應(yīng)用正成為越來(lái)越多開(kāi)發(fā)者關(guān)注的焦點(diǎn)。那么,什么是URLHook技術(shù)?它在Linux操作系統(tǒng)中的應(yīng)用有何特殊之處?接下來(lái),本文將深入探究URLHook技術(shù)與Linux操作系統(tǒng)之間的獨(dú)特關(guān)系。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了建湖免費(fèi)建站歡迎大家使用!
URLHook技術(shù)是一種應(yīng)用于網(wǎng)絡(luò)安全領(lǐng)域的技術(shù)。它通過(guò)鉤子機(jī)制,在訪問(wèn)URL時(shí)對(duì)請(qǐng)求進(jìn)行攔截和處理,以對(duì)網(wǎng)絡(luò)傳輸數(shù)據(jù)進(jìn)行加密、解密和請(qǐng)求過(guò)濾等操作。目前,該技術(shù)在常見(jiàn)的網(wǎng)絡(luò)安全產(chǎn)品如防火墻、殺毒軟件、Web安全等系統(tǒng)中得到廣泛應(yīng)用。
基于Linux操作系統(tǒng)的開(kāi)放性和自由性,許多開(kāi)發(fā)者也開(kāi)始關(guān)注并使用URLHook技術(shù)。在Linux操作系統(tǒng)中,鉤子技術(shù)是非常普遍的,因?yàn)樗梢宰岄_(kāi)發(fā)者通過(guò)修改某些系統(tǒng)內(nèi)核代碼,實(shí)現(xiàn)特定的功能增強(qiáng)。而因?yàn)長(zhǎng)inux的開(kāi)源性,用戶可以自由地修改和自定義內(nèi)核代碼,將自己的概念變成現(xiàn)實(shí)。
在Linux中使用URLHook技術(shù),開(kāi)發(fā)者可以根據(jù)自己的需求,進(jìn)行各種類(lèi)型的URL攔截和處理。例如,可以對(duì)URL請(qǐng)求進(jìn)行分類(lèi),對(duì)于網(wǎng)絡(luò)上的一些惡意URL可以攔截和過(guò)濾;也可以將URL請(qǐng)求進(jìn)行可靠的加密傳輸,提高網(wǎng)絡(luò)傳輸?shù)陌踩浴?/p>
此外,Linux操作系統(tǒng)的特殊性質(zhì)還為URLHook技術(shù)的運(yùn)用提供了其他的優(yōu)勢(shì)。在Linux操作系統(tǒng)中,內(nèi)核代碼的規(guī)模很小,使得其運(yùn)行速度非???,并且系統(tǒng)具有很高的穩(wěn)定性和可靠性。這使得鉤子機(jī)制可以更加快速、準(zhǔn)確地進(jìn)行攔截和處理,從而有效提升用戶體驗(yàn)。此外,Linux操作系統(tǒng)的開(kāi)放性還使得開(kāi)發(fā)者可以根據(jù)自己的需要定制自己的系統(tǒng)內(nèi)核,達(dá)到更好的功能拓展和性能提升。
然而,與此同時(shí),Linux操作系統(tǒng)的開(kāi)源性也帶來(lái)了一定的風(fēng)險(xiǎn),其中就包括針對(duì)操作系統(tǒng)本身的攻擊。當(dāng)黑客攻擊系統(tǒng)內(nèi)核時(shí),利用URLHook技術(shù)可以對(duì)攻擊行為進(jìn)行分析和攔截,從而提高系統(tǒng)的安全性。但是,如果黑客攻擊的是鉤子機(jī)制本身,可能會(huì)使URLHook技術(shù)反而會(huì)影響系統(tǒng)的安全性。因此,在鉤子機(jī)制的使用過(guò)程中,開(kāi)發(fā)者必須非常小心,加強(qiáng)鉤子機(jī)制的保護(hù),增強(qiáng)系統(tǒng)的魯棒性。
綜上所述,通過(guò)URLHook技術(shù),可以有效地提升Linux操作系統(tǒng)的安全性和性能表現(xiàn)。其威力不僅在于它的攔截和處理能力,也在于它的靈活性和系統(tǒng)可定制性。然而,開(kāi)發(fā)者需要注意保護(hù)系統(tǒng)鉤子的安全性,以達(dá)到更佳的網(wǎng)絡(luò)安全效果。在未來(lái),我們可以預(yù)見(jiàn)到,隨著網(wǎng)絡(luò)安全形勢(shì)的不斷變化,URLHook技術(shù)一定會(huì)得到更廣泛的應(yīng)用和發(fā)展。
相關(guān)問(wèn)題拓展閱讀:
- linux內(nèi)核態(tài),在L框架中的文件操作hook接口中如何獲取一個(gè)正在作的文件的內(nèi)容?(linux4.4版本)
linux內(nèi)核態(tài),在L框架中的文件操作hook接口中如何獲取一個(gè)正在作的文件的內(nèi)容?(linux4.4版本)
L是Linux Secrity Module的簡(jiǎn)稱,即linux安全模塊。其是一種輕量級(jí)通用訪
問(wèn)控制框架,適合于多種訪問(wèn)控制模型在它上面以內(nèi)核可加載模塊的形實(shí)現(xiàn)。用
戶可以根據(jù)自己的需求選擇合適的安全模塊加載到內(nèi)核上實(shí)現(xiàn)。
L設(shè)計(jì)思想:
L的設(shè)計(jì)思想:在最少改變內(nèi)核代碼的情況下,提供一個(gè)能夠成功實(shí)現(xiàn)強(qiáng)制訪
問(wèn)控制模塊需要的結(jié)構(gòu)或者接口。L避免了利用如在systrace系統(tǒng)調(diào)用中的出
現(xiàn)過(guò)的系統(tǒng)調(diào)用干預(yù),因?yàn)樗荒軘U(kuò)展到多處理器內(nèi)核,并且它受制于參數(shù)替換
攻擊。還有L在設(shè)計(jì)時(shí)做了兩點(diǎn)考慮:對(duì)不使用的人來(lái)說(shuō)盡量少引入麻煩,對(duì)
使用的人來(lái)說(shuō)要帶來(lái)效率。以
Linus Torvalds
為代表的內(nèi)核開(kāi)發(fā)人員對(duì)Linux安
全模塊(L)提出了三點(diǎn)要求:
1、真正的通用,當(dāng)使用一個(gè)不同的安全模型的時(shí)候,只需要加載一個(gè)不同的內(nèi)
核模塊。
2、概念上簡(jiǎn)單,對(duì)
Linux內(nèi)核
影響最小,高效,并且。
3、能夠支持現(xiàn)存的POSIX.1e capabilities邏輯,作為一個(gè)可選的安全模塊。
還有,針對(duì)linux上提出的各種不同的Linux安全增強(qiáng)系統(tǒng)對(duì)Linux安全模塊(L
)提出的要求是:能夠允許他們以可加載內(nèi)核模塊的形式重新實(shí)現(xiàn)其安全功能,
并且不會(huì)在安全性方面帶來(lái)明顯的損失,也不會(huì)帶來(lái)做渣額外的系統(tǒng)開(kāi)銷(xiāo)。
L框架結(jié)構(gòu):
L框架主要由五部分構(gòu)成:
1、在特定的內(nèi)核
數(shù)據(jù)結(jié)構(gòu)
中加入安全域。
2、在內(nèi)核
源代碼
中不同的關(guān)鍵點(diǎn)插入對(duì)安全鉤子函數(shù)的調(diào)用。
3、加入一個(gè)通用的安全系統(tǒng)調(diào)用。
4、提供了函數(shù)允許內(nèi)核模塊注冊(cè)為安全模塊或者注銷(xiāo)。
5、5、將capabilities邏輯的大部分移植為一個(gè)可選的安全模塊。
安全域是一個(gè)void*類(lèi)型的指針,它使得安全模塊把安全信息和內(nèi)核內(nèi)部對(duì)象聯(lián)
系起來(lái)。下面列出被修改加入了安全域的內(nèi)核數(shù)據(jù)結(jié)構(gòu),以及各自所代表的內(nèi)核
內(nèi)部對(duì)象:
task_struct結(jié)構(gòu):代表任務(wù)(進(jìn)程)
linux_binprm結(jié)構(gòu):代表程序
super_block結(jié)構(gòu):代表
文件系統(tǒng)
inode結(jié)構(gòu):代表管道,文件,或者Socket
套接字
file結(jié)構(gòu):代表打開(kāi)的文件
sk_buff結(jié)構(gòu):代表網(wǎng)絡(luò)緩沖區(qū)(包)
net_device結(jié)構(gòu):代表
網(wǎng)絡(luò)設(shè)備
kern_ipc_perm結(jié)構(gòu):代表Semaphore信號(hào),共享內(nèi)存段,或者
消息隊(duì)列
msg_msg:代表單個(gè)的消息
Linux安全模塊(L)提供了兩類(lèi)對(duì)安全鉤子函數(shù)的調(diào)用:一類(lèi)管理內(nèi)核對(duì)象的
安全域,另一類(lèi)仲裁對(duì)這些內(nèi)核對(duì)象的訪問(wèn)。對(duì)安全鉤子函數(shù)的調(diào)用通過(guò)鉤子來(lái)
實(shí)現(xiàn),鉤子是全局表security_ops中的
函數(shù)指針
,這個(gè)全局表的類(lèi)型是
security_operations結(jié)構(gòu),這個(gè)結(jié)構(gòu)定義在include/linux/security.h這個(gè)頭
文件中。
L接沒(méi)塵口的核心是security_ops,當(dāng)系統(tǒng)啟動(dòng)時(shí),他們被初始化為傳統(tǒng)的DAC策略
。傳統(tǒng)DAC訪問(wèn)控制是指控制系統(tǒng)中的主體(如進(jìn)程)對(duì)系統(tǒng)中的客體(如文件
目錄、文件)的訪問(wèn)(讀、寫(xiě)和執(zhí)行等)。自主訪問(wèn)控制DAC 是指主體(進(jìn)程,
用戶)對(duì)客體(文件、目錄、特殊設(shè)備文件、IPC等)的訪問(wèn)權(quán)限是由客體的屬
主或超級(jí)用戶決定的,而且此權(quán)限一旦確定,將作為以后判斷主體對(duì)客體是否有
訪問(wèn)權(quán)限的依據(jù)。
在加載安全模塊時(shí),我們必需先對(duì)模塊進(jìn)行注冊(cè),我們可以使用
register_security()函數(shù)向L注冊(cè)一個(gè)安全模塊。在我們的模塊被加載成
功后,就可以進(jìn)行訪問(wèn)控制操作。如果此時(shí)還有一個(gè)安全模塊要使用
register_security()函數(shù)進(jìn)行加載,則會(huì)出現(xiàn)錯(cuò)誤,直到使用
unregister_security()函數(shù)向框架注銷(xiāo)后,下一個(gè)模塊才可以載入枯胡禪。當(dāng)然LS
M還提供了mod_reg_security()函數(shù)和mod_unreg_security()函數(shù),可以連續(xù)注
冊(cè)多個(gè)安全模塊。如果有其他后來(lái)的模塊需要載入,可以通過(guò)mod_reg_security
()向之一個(gè)模塊注冊(cè),形成支持不同策略的模塊棧。
注:以上出現(xiàn)的函數(shù)均基于2.6.22以前的版本,對(duì)于后續(xù)的版本,出現(xiàn)了
register_security()函數(shù)未被導(dǎo)出或者取消掉了unregister_security()函數(shù)。
L執(zhí)行過(guò)程:
根據(jù)下圖的執(zhí)行步驟:用戶在執(zhí)行系統(tǒng)調(diào)用時(shí),先通過(guò)原有的內(nèi)核接口依次執(zhí)行
功能性的錯(cuò)誤檢查,接著進(jìn)行傳統(tǒng)的DAC檢查,并在即將訪問(wèn)內(nèi)核的內(nèi)部對(duì)象之
前,通過(guò)L鉤子函數(shù)調(diào)用L。L再調(diào)用具體的訪問(wèn)控制策略來(lái)決定訪問(wèn)的合
法性。圖三顯示了L鉤子的調(diào)用:
圖三:基于L的內(nèi)核對(duì)象訪問(wèn)過(guò)程
Lilinux安全模塊(L)主要支持”限制型”的訪問(wèn)控制決策:當(dāng)Linux內(nèi)核授予
文件或目錄訪問(wèn)權(quán)限時(shí),Linux安全模塊(L)可能會(huì)拒絕,而當(dāng) Linux內(nèi)核拒
絕訪問(wèn)時(shí),可以跳過(guò)L。
========
使用L實(shí)現(xiàn)自己的訪問(wèn)控制
首先對(duì)L 進(jìn)行簡(jiǎn)單介紹。雖然linux下的各位基本都知道一些,但是還要羅嗦
一下。
L中文全稱是linux安全模塊。英文全稱:linux security module.
L是一種輕量級(jí)、通用的訪問(wèn)控制框架,適合多種訪問(wèn)控制模型以內(nèi)核模塊的
形式實(shí)現(xiàn)。其特點(diǎn)是通用、簡(jiǎn)單、高效、支持POSIX。1e能力機(jī)制。
L的架構(gòu)圖如下:
通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核之后,系統(tǒng)首先進(jìn)行傳統(tǒng)的權(quán)限檢查(傳統(tǒng)權(quán)限檢查主要
是基于用戶的,用戶通過(guò)驗(yàn)證之后就可以訪問(wèn)資源),通過(guò)之后才會(huì)進(jìn)行強(qiáng)制訪
問(wèn)控制。(強(qiáng)制訪問(wèn)控制是不允許主體干涉的一種訪問(wèn)控制,其采用
安全標(biāo)識(shí)
、
信息分級(jí)等信息敏感性進(jìn)行訪問(wèn)控制。并且通過(guò)比較主體的級(jí)別和資源的敏感性
來(lái)確定是否允許訪問(wèn)。比如說(shuō)系統(tǒng)設(shè)置A用戶不允許訪問(wèn)文件B,即便A是文件B的
所有者,訪問(wèn)也是受限制的。)從圖上看來(lái),L實(shí)現(xiàn)訪問(wèn)控制主要通過(guò)安全模
塊的鉤子函數(shù)實(shí)現(xiàn)。
L框架主要由五部分組成:這個(gè)網(wǎng)上資料很多。
在關(guān)鍵的特定內(nèi)核數(shù)據(jù)結(jié)構(gòu)中加入了安全域;
在內(nèi)核源碼中不同的關(guān)鍵點(diǎn)處插入對(duì)安全鉤子函數(shù)的調(diào)用;
提供了一個(gè)通用的安全系統(tǒng)調(diào)用;
提供了注冊(cè)和注銷(xiāo)函數(shù),使得訪問(wèn)控制策略可以以內(nèi)核模塊方式實(shí)現(xiàn);
將capabilities邏輯的大部分功能移植為一個(gè)可選的安全模塊。
我們這里重點(diǎn)結(jié)合源碼對(duì)L框架進(jìn)行解釋。我使用的源碼是3.5.4
首先介紹安全域字段,它是一個(gè)空類(lèi)型的指針,在內(nèi)核中的很多內(nèi)核結(jié)構(gòu)中都存
在,比如inode、superblock、dentry、file等等。類(lèi)型字段為void *
security;
那么安全域怎么和安全模塊中的信息關(guān)聯(lián)起來(lái)?
當(dāng)安全模塊加載之后,安全域中的指針便指向安全模塊中的安全信息。這里以
selinux為例進(jìn)行介紹。
內(nèi)核里面security/selinux/include/objsec.h中定義了不同對(duì)象的安全信息,
格式為XXX_security_strut.
上面的文件的安全信息里面包含打開(kāi)
文件描述符
時(shí)的安全I(xiàn)D、文件所有者的安全
ID等等。
要聯(lián)系安全模塊中安全信息和安全域需要幾個(gè)控制鉤子函數(shù)。這些鉤子函數(shù)實(shí)現(xiàn)
了對(duì)內(nèi)核關(guān)鍵信息的設(shè)置和管理。這里主要介紹alloc_security、
free_security。
selinux里面通過(guò)實(shí)現(xiàn)安全信息空間分配實(shí)現(xiàn)關(guān)聯(lián)。比如以文件安全信息為例
這里分配空間成功之后,通過(guò)file->f_security = fsec實(shí)現(xiàn)了關(guān)聯(lián)。
撤銷(xiāo)關(guān)聯(lián)是在安全模塊卸載之后調(diào)用file_free_security.
這里具體通過(guò)設(shè)置file->f_secrity為NULL,然后釋放安全信息結(jié)構(gòu)實(shí)現(xiàn)。
現(xiàn)在來(lái)看看內(nèi)核如何實(shí)現(xiàn)selinux的訪問(wèn)控制。這里主要就是實(shí)現(xiàn)L里面的鉤子
函數(shù)了。L里面給出了
結(jié)構(gòu)體
security_operations,里面給出了很多鉤子函數(shù)
,實(shí)現(xiàn)了相關(guān)鉤子函數(shù)就可以實(shí)現(xiàn)訪問(wèn)控制了。
上面的函數(shù)就實(shí)現(xiàn)了file_permission鉤子函數(shù)??梢钥聪耰node結(jié)構(gòu)體的獲得,
感受內(nèi)核是通過(guò)文件->目錄項(xiàng)->inode。該函數(shù)主要實(shí)現(xiàn)自己的訪問(wèn)控制策略就
OK 了。
哪selinux來(lái)說(shuō),在獲得文件安全I(xiàn)D之后,主要對(duì)
掩碼
和文件打開(kāi)時(shí)相關(guān)的安全
信息進(jìn)行檢測(cè),符合就通過(guò)訪問(wèn)控制。
selinux基本實(shí)現(xiàn)了L里面的所有鉤子函數(shù),待鉤子函數(shù)實(shí)現(xiàn)后,對(duì)L里面鉤
子域進(jìn)行填充就OK了。
做完以上這些還需要注冊(cè)安全模塊到L,這里注冊(cè)和注銷(xiāo)使用了
register_security和unregister_security。
比如selinux在注冊(cè)時(shí)使用語(yǔ)句register_security(&selinux_ops)實(shí)現(xiàn)。
接下來(lái)通過(guò)上面的分析我們可以實(shí)現(xiàn)簡(jiǎn)單的基于L的訪問(wèn)控制。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
static int l_test_file_permission(struct file *file,int mask)
{
int path=0;
struct file *filp;
struct nameidata nd;
path = path_lookup(FILENAME,LOOKUP_FOLLOW,&nd);
if(!mask)
return 0;
if(path)
{
printk(“l(fā)ookup file failed!\n”);
return -1;
}
filp = filp_open(“/home/yuyunchao/code/.c”,O_RDON,0);
{
printk(“open failed!\n”);
}
return 0;
}
static struct security_operations l_test_security_ops = {
.file_permission = l_test_file_permission,
};
static int __init l_file_init(void)
{
if(register_security(&l_test_security_ops)){
printk(“register error ……….\n”);
return -1;
}
printk(“l(fā)_file init..\n “);
return 0;
}
static void __exit l_file_exit(void)
{
if(unregister_security(&l_test_security_ops)){
printk(“unregister error…………….\n”);
return ;
}
printk(“module exit…….\n”);
}
MODULE_LICENSE(“GPL”);
module_init(l_file_init);
module_exit(l_file_exit);
========
L(Linux Security Module)應(yīng)用方法(簡(jiǎn)單例子)
L在內(nèi)核中很多地方已經(jīng)插入了hook函數(shù),并且在security.c函數(shù)中聲明了
security_ops結(jié)構(gòu),要實(shí)現(xiàn)你自己的安全模塊,只需要定義你自己的struct
security_operations,并且用register_security注冊(cè)即可,下面舉個(gè)簡(jiǎn)單例子
:
test.c代碼如下:
/*
* Test Linux Security Module
*
* Author: penghuan
*
* Copyright (C) 2023 UbuntuKylin, Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2, as
* published by the Free Software Foundation.
*
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int test_file_permission(struct file *file, int mask)
{
char *name = file->f_path.dentry->d_name.name;
if(!strcmp(name, “test.txt”))
{
file->f_flags |= O_RDON;
printk(“you can have your control code here!\n”);
}
return 0;
}
static struct security_operations test_security_ops = {
.name = “test”,
.file_permission = test_file_permission,
};
static __init int test_init(void)
{
printk(“enter test init!\n”);
printk(KERN_INFO “Test: becoming……\n”)
if (register_security(&test_security_ops))
panic(“Test: kernel registration failed.\n”);
return 0;
}
security_initcall(test_init);
將該文件以模塊的形式放到security/下編譯進(jìn)內(nèi)核,啟用新的內(nèi)核后,當(dāng)你操
作文件test.txt時(shí),通過(guò)dmesg命令就能再終端看到”you can have your
control code here!“輸出
所以一般的做法是:定義你自己的struct security_operations,實(shí)現(xiàn)你自己的
hook函數(shù),具體有哪些hook函數(shù)可以查詢include/linux/security.h文件,然后
調(diào)用register_security來(lái)用你的test_security_ops初始化全局的security_ops
指針
樓主,我剛開(kāi)始研究L,但網(wǎng)上資料太少,您這個(gè)代碼,我編譯成ko文件老是
有警告,并且inod時(shí),說(shuō)Unknown symbol register_security。我最近看了看
內(nèi)核模塊變成,沒(méi)有對(duì)內(nèi)核進(jìn)行太深入的了解。不知能否把L的實(shí)驗(yàn)步驟給出
的再詳細(xì)點(diǎn),謝謝。
你需要把代碼編進(jìn)內(nèi)核
是需要把那段源碼拷到內(nèi)核目錄下,然后重新編譯內(nèi)核?。。沒(méi)有不編譯內(nèi)核的
方法嗎?。。直接按照模塊進(jìn)行編譯。另外那個(gè)test.txt放在哪個(gè)文件夾里?。
是需要把那段源碼拷到內(nèi)核目錄下,然后重新編譯內(nèi)核?。。沒(méi)有不編譯內(nèi)核的
方法嗎?。。直接按照模塊進(jìn)行 …
是的,你去網(wǎng)上找下怎么把模塊編進(jìn)內(nèi)核,l模塊不能以模塊方式加載,涉及
安全;test.txt是測(cè)試文件,當(dāng)你把代碼編進(jìn)內(nèi)核后,用新內(nèi)核啟動(dòng),然后操作
test.txt文件,就會(huì)有輸出,test.txt隨便放哪里
樓主,您好,我剛開(kāi)始學(xué)習(xí)l模塊,把您的模塊編譯進(jìn)內(nèi)核,新的內(nèi)核加載后
,register_security總是失敗,請(qǐng)問(wèn)下可能是什么原因?qū)е碌?。我的?nèi)核版本
是3.13.11。
register_security的返回值是-11
========
L在Linux中的實(shí)現(xiàn)方式
L(Linux Secure Model)一種輕量級(jí)訪問(wèn)控制機(jī)制.
其實(shí)現(xiàn)方式有如在系統(tǒng)調(diào)用中加入一個(gè)后門(mén)….
方式如下:
static struct file *__dentry_open(struct dentry *dentry, struct
vfount *mnt,
struct file *f,
int (*open)(struct inode *, struct file *),
const struct cred *cred)
{
struct inode *inode;
int error;
………………………………………………………
error = security_dentry_open(f, cred); //L機(jī)制實(shí)現(xiàn)方式,在此加入了
一個(gè)L函數(shù).
//security_dentry_open的實(shí)現(xiàn)如下,相當(dāng)于一個(gè)接口,對(duì)一個(gè)函數(shù)指針再
//封裝一下.
//只返回是與否,這樣的控制信息.
if (error)
goto cleanup_all;
……………………………………………………….
return f;
cleanup_all:
………………………………………………………..
return ERR_PTR(error);
}
//========簡(jiǎn)單封裝一個(gè)指針結(jié)構(gòu)體===========================
int security_dentry_open(struct file *file, const struct cred *cred)
{
int ret;
ret = security_ops->dentry_open(file, cred);
if (ret)
return ret;
return fsnotify_perm(file, MAY_OPEN);
}
========
利用L實(shí)現(xiàn)更安全的linux
L的全稱是Linux Security Modules,它是linux內(nèi)核中用來(lái)支持更靈活的
安全策略的一個(gè)底層框架,雖然聽(tīng)起來(lái)比較復(fù)雜,但是可以就把它理解成一組安
插在linux內(nèi)核的鉤子函數(shù)和一些預(yù)留的被稱為安全域的數(shù)據(jù)結(jié)構(gòu),下面先說(shuō)說(shuō)
這個(gè)框架的由來(lái)吧。
linux本身的機(jī)制就保證了linux擁有更好的安全機(jī)制,但是在這個(gè)機(jī)制下面
,還是隱藏了許多的問(wèn)題:
1、權(quán)限粒度太大。用過(guò)linux的人應(yīng)該對(duì)0644這樣的訪問(wèn)權(quán)限設(shè)置不陌生,
它對(duì)能夠操作這個(gè)文件的用戶做了限制,但是這個(gè)只是限制到了組,而沒(méi)有更進(jìn)
一步的細(xì)分,當(dāng)然,如果L只是用來(lái)限制這個(gè)的話,那么也就太沒(méi)意思了,因
為實(shí)現(xiàn)文件更細(xì)的控制粒度,ACL就能夠很出色的完成,順便提一下,ACL有一個(gè)
分配的限制,如果哪位朋友需要用ACL進(jìn)行粒度更細(xì)的訪問(wèn)權(quán)限控制的話,可能
需要注意一下這方面的東西。
2、root用戶的權(quán)限太大。在linux中,root用戶就是至高無(wú)上的,他擁有對(duì)
機(jī)器的完全控制權(quán)限,可以做他想做的一切事情。但是很多時(shí)候,我們可能并不
希望有root有這么大的權(quán)限,比如在現(xiàn)在比較流行的云存儲(chǔ)中,用戶肯定不希望
服務(wù)提供商能夠隨意訪問(wèn)我們的文件,那么這個(gè)時(shí)候,就需要對(duì)root用戶進(jìn)行一
定的設(shè)置了。
由于這些問(wèn)題的存在,所以出現(xiàn)了像SE Linux(Securiy Enhanced Linux )
這樣的增強(qiáng)補(bǔ)丁。但是每個(gè)系統(tǒng)對(duì)于具體安全細(xì)節(jié)的控制不盡相同, 所以Linus
Tovalds 提出應(yīng)該要有一個(gè) Linux 內(nèi)核所能接受的安全框架來(lái)支持這些安全策
略,這個(gè)安全框架應(yīng)該提供包含內(nèi)核數(shù)據(jù)結(jié)構(gòu)中的透明安全域以及用來(lái)控制、維
護(hù)安全域操作的安全鉤子,于是就有了L。
L在內(nèi)核中的位置,可以用下圖來(lái)表示:
當(dāng)用戶態(tài)程序調(diào)用某些操作系統(tǒng)提供的函數(shù)的時(shí)候,比如read()函數(shù),其會(huì)
對(duì)應(yīng)于內(nèi)核中的一個(gè)系統(tǒng)調(diào)用,然后該首先會(huì)進(jìn)行一些常規(guī)的錯(cuò)誤檢測(cè),接著進(jìn)
行DAC(Discretionary Access Control)檢測(cè),再接著它會(huì)進(jìn)行L檢測(cè)。從上
圖中能夠看出來(lái),L其實(shí)是一個(gè)非常底層的安全策略框架,利用L,可以接管
所有的系統(tǒng)調(diào)用,這樣,我們就能對(duì)包括root在內(nèi)的所有用戶的權(quán)限進(jìn)行控制,
并且實(shí)現(xiàn)粒度更細(xì)的訪問(wèn)權(quán)限控制。
當(dāng)系統(tǒng)初始化的時(shí)候,L就是一個(gè)空的框架,它不提供任何的檢測(cè),其所
做的全部工作幾乎就是返回0,當(dāng)然,有些不帶返回值的函數(shù)除外。而我們則可
以針對(duì)自己特定的需求來(lái)編寫(xiě)L,然后將我們編寫(xiě)的L鉤子函數(shù),通過(guò)其數(shù)據(jù)
結(jié)構(gòu)struct security_operations注冊(cè)到系統(tǒng)中去,這樣,我們的L檢測(cè)就開(kāi)
始起作用了。
更多信息可參考《Linux就該這么學(xué)》
urlhook linux的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于urlhook linux,探究URLHook和Linux的獨(dú)特關(guān)系,linux內(nèi)核態(tài),在L框架中的文件操作hook接口中如何獲取一個(gè)正在作的文件的內(nèi)容?(linux4.4版本)的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專(zhuān)業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專(zhuān)注成都高端網(wǎng)站建設(shè)定制開(kāi)發(fā)服務(wù),為客戶提供專(zhuān)業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開(kāi)發(fā),營(yíng)銷(xiāo)網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
分享題目:探究URLHook和Linux的獨(dú)特關(guān)系 (urlhook linux)
分享路徑:http://m.fisionsoft.com.cn/article/ccsgijs.html


咨詢
建站咨詢
