千鋒扣丁學(xué)堂Linux培訓(xùn)之網(wǎng)絡(luò)安全基礎(chǔ)知識詳解
2019-05-10 14:06:59
3522瀏覽
今天千鋒扣丁學(xué)堂Linux培訓(xùn)老師給大家分享一篇關(guān)于Linux安全基礎(chǔ)知識的詳細(xì)介紹,首先Linux從UNIX和POSIX那里繼承了最基本的安全機(jī)制:用戶、文件權(quán)限和進(jìn)程capabilities。其次,補(bǔ)充提供了一個通用的安全訪問控制框架——Linux安全模塊(LSM),是通過可加載的內(nèi)核模塊實(shí)現(xiàn)的,可以支持現(xiàn)存的各種不同的安全訪問控制系統(tǒng)。SELinux、DTE、LIDS、AppArmor、SELinuxSmack、TOMOYOLinux、Openwall等都是通過LSM框架提供自己的服務(wù)。
LSM框架提供了類似于netfilter的hook機(jī)制,將安全點(diǎn)做成hook,各種安全機(jī)制對安全的限制策略都通過hook點(diǎn)去實(shí)現(xiàn)。這樣就兼容了大部分的安全方案。如果你發(fā)現(xiàn)某個安全模式不好用,可以換其他的內(nèi)核模塊來提供內(nèi)核安全保護(hù)。
LSM模塊的大部分作用都是保護(hù),而非審計(jì)。
安全機(jī)制開發(fā)者一般是在LSM定義鉤子的位置,在內(nèi)核內(nèi)部直接定義安全機(jī)制,或者通過security()系統(tǒng)調(diào)用讓用戶端程序可以控制內(nèi)核端實(shí)現(xiàn)模塊的行為。
這類鉤子有:
任務(wù)鉤子,如任務(wù)間通信、kill調(diào)用等;
程序裝載鉤子,可以改變程序的特權(quán)、文件描述符控制等;
文件系統(tǒng)鉤子,可以對文件系統(tǒng)掛載、打開文件甚至socket等做額外的檢查;
網(wǎng)絡(luò)鉤子,主要控制什么進(jìn)程允許socket到哪里;
模塊鉤子
頂層系統(tǒng)鉤子,如訪問端口、設(shè)備主機(jī)名。
在民用安全軟件領(lǐng)域,近些年最常用的是SELinux,以及Ubuntu所使用的Apparmor。
2、密碼學(xué)
數(shù)論是加密算法的基礎(chǔ),加密算法是密碼應(yīng)用的基礎(chǔ)。
在密碼應(yīng)用上主要有3個領(lǐng)域:
摘要
加密
認(rèn)證
2.1摘要
是對一大段數(shù)據(jù)或很小的一段數(shù)據(jù)生成一個長度較短的固定長度的數(shù)據(jù)。這個數(shù)據(jù)能夠代表原數(shù)據(jù),且一般不會重復(fù)。
主要用途是下載或傳輸文件(計(jì)算并對比雙方的摘要是否一致來判斷是否出現(xiàn)錯誤)、密碼驗(yàn)證(系統(tǒng)里不存真實(shí)的密碼,而只存密碼的摘要信息,登錄過程就是計(jì)算摘要并對比二者是否一致)。大部分的企業(yè)在存儲密碼的時候都會存儲哈希后的密文,而且還會加鹽。
摘要的主要算法有:
MD系列,當(dāng)前使用最廣泛的是MD5版本;
SHA系列,SHA本身是對MD4升級所得到的,目前發(fā)展到了SHA4版本;
HMAC系列,使用已有的摘要算法(MD5、SHA),同時加入了一個秘鑰成分;
CRC系列,是一種非常常用的摘要算法,但是它的碰撞概率也是最高的,優(yōu)點(diǎn)是計(jì)算速度快,所以一般只用在對簡單數(shù)據(jù)的摘要計(jì)算上,例如網(wǎng)絡(luò)通信中的數(shù)據(jù)包。
摘要算法常識:
衡量一個摘要算法好壞的指標(biāo)有兩個:速度和碰撞。
所有的摘要算法的基本實(shí)現(xiàn)思想是相同的,不同之處就是算法采用的參數(shù),例如分組長度、每個分組進(jìn)行操作的步驟,輸出摘要的長度等。
本質(zhì)上常見的哈希算法都是將數(shù)據(jù)分組,然后對每個分組進(jìn)行數(shù)學(xué)運(yùn)算,并且之前分組的運(yùn)算結(jié)果參與之后分組的運(yùn)算(加、減、異、或等),每個算法各有特點(diǎn)。
MD5已經(jīng)被證明存在碰撞。但在民用領(lǐng)域,使用這些哈希算法還是安全的。
摘要算法在內(nèi)核中幾乎都支持,同時很多文件系統(tǒng)和比較大的模塊也會自己實(shí)現(xiàn)一套摘要算法。
2.2加密
是對一段易讀數(shù)據(jù)進(jìn)行數(shù)學(xué)變換,變換為另一段表面無意義的數(shù)據(jù),用于在不安全的信道上傳輸數(shù)據(jù)。
加密涉及的常見數(shù)論是3種各不相同的數(shù)論難題:
整數(shù)分解
離散對數(shù)
橢圓曲線上的離散對數(shù)
破解的過程,就是解決數(shù)論難題的過程。
根據(jù)加密和解密的秘鑰是否一樣,可以將加密算法分為對稱性和非對稱性的。
常用的對稱性加密算法有:
DES,是分組式的加密算法,各個分組不發(fā)生交互運(yùn)算,是早期的數(shù)據(jù)加密標(biāo)準(zhǔn),速度快,但可以用窮舉法破解;
3DES,基于DES實(shí)現(xiàn)的,同時使用3個不同的密鑰進(jìn)行3次加密,加大了破解的難度;
AES,是流式的加密算法,流式之前的運(yùn)算結(jié)果會影響下面的計(jì)算,所以要比分組式算法更安全,是下一代的加密算法標(biāo)準(zhǔn),速度快且安全級別高,
常用的非對稱性加密算法有:
RSA
Elgamal
背包算法
Rabin
D-H
ECC(橢圓曲線加密算法)
RSA,是目前使用最廣泛的加密算法。RSA算法基于一個十分簡單的數(shù)論事實(shí):將兩個大素?cái)?shù)相乘十分容易,但是想要對其乘積進(jìn)行因式分解卻極其困難。因此可以將乘積公開作為加密密鑰,而只有自己知道,其他人很難算出來的因式分解結(jié)果就是解密秘鑰了。
在這個算法中,公開的只能是加密秘鑰。主要用于實(shí)現(xiàn)認(rèn)證和數(shù)字簽名。
對稱密鑰的計(jì)算速度明顯快于非對稱秘鑰,缺點(diǎn)是缺少安全的秘鑰分發(fā)渠道。所以業(yè)界普遍是使用非對稱加密來做認(rèn)證和生成對稱密鑰(也叫會話密鑰),然后雙方使用對稱密鑰進(jìn)行通信。由于對稱密鑰可以靠窮舉法進(jìn)行破解,所以一般的會話管理都會自動更換會話秘鑰。
2.3認(rèn)證
認(rèn)證是驗(yàn)證“你是你”、“我是我”的過程,主要使用的是非對稱加密算法。這個場景的應(yīng)用在數(shù)論的使用上與加密是一樣的。
由于采用素?cái)?shù)積的方式只能公布加密秘鑰,所以通過公布解密密鑰來做到認(rèn)證的做法不可取。但是通過加入第三者就可以,這就是秘鑰管理系統(tǒng),最常見的是Kerberos系統(tǒng)。認(rèn)證過程一般有一個認(rèn)證中心,被這個中心認(rèn)證過的證書(X.509)就是可以信任的。這個認(rèn)證過程本質(zhì)上就是一些加密、解密的運(yùn)算。
以下是一個示例。
首先是要搭建一個證書中心,提供證書自簽名服務(wù),先生成自己的私鑰,并且加密(可選):
openssl genrsa -out private.key 2048 //生成自己的私鑰,實(shí)際上數(shù)據(jù)中也包含了公鑰部分的信息
openssl rsa -in private.key -des3 -out encrypted.key //對私鑰進(jìn)行加密
證書中心需要制作一個可以給其他用戶簽名的簽名證書:
openssl req -new -key private.key -out ca.csr //證書中心生成一個證書請求
openssl x509 -req -in ca.csr -extension v3_ca -signkey privatekey -out ca_sign.crt //證書中心給自己生成的證書請求進(jìn)行簽名,自己批準(zhǔn)自己通過,并且生成一個可以給其他用戶簽名的簽名證書給證書中心使用
當(dāng)一個server需要申請使用證書的時候:
openssl genrsa -out server-private.key 2048 //生成server自己的私鑰,這里選擇了不做密鑰加密
openssl req -new -key server-private.key -out server.csr //server生成證書請求
將server制作的證書請求文件發(fā)送給證書中心進(jìn)行簽名:
openssl x509 -req -in server.csr -extensions v3_ca -CA ca_sign.crt -CAkey private.key -CAcreateserial -out sign.crt //證書中心為server最終生成簽名過的證書,server現(xiàn)在是被認(rèn)證中心認(rèn)證過的服務(wù)器了
這樣就完成了server的證書制作。
客戶端只需要加載了CA公開的證書ca_sign.crt就可以認(rèn)證所以被這個證書中心簽名過的server了。由于頒發(fā)證書需要CA的private.key,所以客戶端拿到了證書也無法給別人頒發(fā)證書。
在PC的瀏覽器中一般都預(yù)存了很多大型CA的證書,這些個CA的證書都是自簽名的,里面記錄了CA的公鑰。因此,當(dāng)遇到持有某未在瀏覽器的信任CA列表中的CA簽名的服務(wù)器csr證書文件的時候,瀏覽器也會給出相應(yīng)的安全提示。
2.4數(shù)字簽名
數(shù)字簽名是一種特殊的認(rèn)證。這個認(rèn)證方式就是典型的使用私鑰來加密,使用公鑰來解密的應(yīng)用。雖然能夠公布的只有質(zhì)數(shù)積,但不一定非要用質(zhì)數(shù)積來加密,也可以拿它來解密。
數(shù)字簽名,使用私鑰加密,使用公鑰解密
認(rèn)證,使用公鑰加密,使用私鑰解密
2.5秘鑰交換
常見的密鑰交換方式有以下兩種:
公鑰加密實(shí)現(xiàn),發(fā)送方用接收方的公鑰加密自己的密鑰,接收方用自己的私鑰解密得到發(fā)送方的密鑰,從而實(shí)現(xiàn)密鑰交換。
使用DH算法,普通的DH算法被證明無法抵抗中間人攻擊,因此又有進(jìn)一步的演進(jìn)。
3、Linux用戶和權(quán)限系統(tǒng)
我們使用Linux系統(tǒng),一定會使用一個用戶賬號。沒有用戶賬號就不可能使用任何的系統(tǒng)功能,包括系統(tǒng)調(diào)用,因?yàn)橄到y(tǒng)調(diào)用本身也是要有用戶的。
我們剛登錄一個系統(tǒng),需要一個login程序,驗(yàn)證了用戶名密碼后,就會返回一個shell,后面執(zhí)行的內(nèi)容都是在shell中執(zhí)行的。
3.1系統(tǒng)啟動時的權(quán)限
由于Linux內(nèi)核設(shè)計(jì)的進(jìn)程繼承關(guān)系,第一個進(jìn)程是init進(jìn)程,這個進(jìn)程是root權(quán)限,擁有最高的完全權(quán)限。如果直接修改init程序,在里面實(shí)現(xiàn)邏輯,也是會具有完全權(quán)限的,內(nèi)核的所有權(quán)限檢查都可以完全通過。
后來啟動的進(jìn)程全部是init進(jìn)程復(fù)制出來的。
Linux有兩種復(fù)制接口:
fork,相當(dāng)于完全復(fù)制,然后使用execve系統(tǒng)調(diào)用執(zhí)行新的命令。vfork是因?yàn)閒ork調(diào)用過于占用內(nèi)存(會拷貝整個內(nèi)存空間),而vfork是暫停父進(jìn)程的執(zhí)行,直接在父進(jìn)程的地址控制中執(zhí)行execve系列調(diào)用。
clone,是可以指定復(fù)制內(nèi)容的,例如文件句柄、根文件系統(tǒng)、命名空間等
fork,clone,vfork這3個API的內(nèi)部實(shí)際上都是調(diào)用一個內(nèi)核內(nèi)部函數(shù)do_fork。
啟動后面的低權(quán)限進(jìn)程和用戶的過程,是一個不斷降低權(quán)限的過程。使用權(quán)限更小的用戶啟動程序。降權(quán)的方法是使用高權(quán)限的進(jìn)程調(diào)用特定的系統(tǒng)調(diào)用,例如使用unshare、prctl或setuid來完成。
su命令是我們常用的切換到其他用戶執(zhí)行命令的方法。它所使用的就是setuid系統(tǒng)調(diào)用方法將當(dāng)前執(zhí)行的具有root權(quán)限的用戶降級為非root用戶,或者sudo-s從低權(quán)限用戶切換到root用戶。
unshare和prctl是用戶控制偏功能性的權(quán)限(capabilities、namespace等)。
3.2系統(tǒng)啟動后的權(quán)限
系統(tǒng)正常運(yùn)行后,進(jìn)程要么由其他的進(jìn)程啟動,要么由shell啟動。由其他進(jìn)程啟動的很多也是由shell啟動的。
Shell是Linux系統(tǒng)的中堅(jiān)力量,其本身也必須有一個所屬用戶,例如登錄使用的用戶user1,那么login程序(root權(quán)限)驗(yàn)證了這個用戶名和密碼后,就可以setuid設(shè)置啟動的Shell以特定的用戶權(quán)限運(yùn)行。
Shell之所以重要,是因?yàn)樗褪荓inux的一個中轉(zhuǎn)中心。也有使用圖形界面作為中轉(zhuǎn)中心的,如Windows。而SSH是使用服務(wù)進(jìn)程作為中轉(zhuǎn)中心的一個例子。只不過,登錄SSH后中心還是轉(zhuǎn)變?yōu)榱薙hell。
在系統(tǒng)接口層面,只有Shell能夠做到將程序、命令與字符串有機(jī)結(jié)合,即功能強(qiáng)大且非常簡便。
3.3內(nèi)核中的用戶和權(quán)限模型
Linux中為了定義權(quán)限,設(shè)計(jì)了一個對象模型。這個模型主要組件有object、subject、context、action、rule。
object,常見的對象都是object,如Task、Files/inodes、Sockets、Messagequeues、Sharedmemorysegments、Semaphores、Keys;
subject,當(dāng)一個object作用在其他的object的時候,發(fā)起方就是subject,最常見的變成subject的object就是task;
context,無論是object是subject,都有自己的context,context主要是一些歸屬于自身的權(quán)限存儲(credentials);
action,一個subject作用到另外一個object的動作叫作action;
rule,限制一個action權(quán)限叫作rule,rule包括MAC和DAC兩類,常見的SELinux規(guī)則就是在這里工作的。
整個模型動作起來,給所有的對象都賦予了靜態(tài)和動態(tài)的權(quán)限,就形成了完整的權(quán)限系統(tǒng)。
我們常見的用戶和文件權(quán)限工作在context層次,即credentials。
目前有7種credentials,需要同時滿足這些權(quán)限檢查,若不滿足其中一個檢查權(quán)限就不能通過安全檢查。
比較常見的權(quán)限檢查有以下3種:
傳統(tǒng)uid系列,設(shè)置在文件objectcontextcredentials層次,但是euid系列設(shè)置在subjectcontextcredentials層次。
capabilities是Linux獨(dú)創(chuàng)的系統(tǒng)。其將系統(tǒng)分成了幾個部分,權(quán)限一個一個子系統(tǒng)地設(shè)置和刪除。這是進(jìn)程subjectcontext的內(nèi)容。
LSM是大部分大規(guī)模的安全系統(tǒng)所基于的內(nèi)核安全機(jī)制。通過在常用的路徑上安裝鉤子實(shí)現(xiàn),是完全獨(dú)立于模型的機(jī)制。
Linux內(nèi)核中并沒有專門的數(shù)據(jù)庫存儲用戶和組的信息,而是依附在每個進(jìn)程上,每個進(jìn)程都可以有多種用戶和組的設(shè)置。
4、Linux下的用戶和文件權(quán)限
4.1Linux下的用戶權(quán)限
linux系統(tǒng)中每個進(jìn)程都有2個ID,分別為用戶ID(uid)和有效用戶ID(euid),UID一般表示進(jìn)程的創(chuàng)建者(屬于哪個用戶創(chuàng)建),而EUID表示進(jìn)程對于文件和資源的訪問權(quán)限(具備等同于哪個用戶的權(quán)限)。C語言中,可以通過函數(shù)getuid()和geteuid()來獲得進(jìn)程的兩個ID值。
UID(又稱為RUID,RealUID),用于在系統(tǒng)中標(biāo)識一個用戶是誰。當(dāng)一個用戶登陸系統(tǒng)時,系統(tǒng)會將UID和EUID都賦值為/etc/passwd文件中的UID,一般情況下2個ID是相同的。
EUID,EffectiveUID,用于系統(tǒng)決定用戶對系統(tǒng)資源的訪問權(quán)限,通常情況下等于RUID。只有在運(yùn)行SetUID程序時,EUID才會與RUID不同,例如su。
SUID,savedset-user-ID,保存設(shè)置用戶ID,是進(jìn)程剛開始執(zhí)行時euid的副本。這樣在執(zhí)行exec調(diào)用之后還能重新恢復(fù)原來的effectivuserID。用于對外權(quán)限的開放。跟RUID及EUID是用一個用戶綁定不同,它是跟文件而不是跟用戶綁定。
4.2Linux下的文件權(quán)限
Linux下可以用ls-l命令來看到文件的權(quán)限。用ls命令所得到的表示法的格式是類似這樣的:-rwxr-xr-x。
下面解析一下格式所表示的意思。這種表示方法一共有十位:
9 8 7 6 5 4 3 2 1 0
- r w x r - x r - x
第9位表示文件類型,可以為p、d、l、s、c、b和-:
p表示命名管道文件
d表示目錄文件
l表示符號連接文件
-表示普通文件
s表示socket文件
c表示字符設(shè)備文件
b表示塊設(shè)備文件
4.3SUID、SGID以及Stickybit
SUID是SetUserID,SGID是SetGroupID的意思。
SUID
當(dāng)一個設(shè)置了SUID位的可執(zhí)行文件被執(zhí)行時,該文件將以所有者的身份運(yùn)行,也就是說無論誰來執(zhí)行這個文件,他都有文件所有者的特權(quán)。
如果所有者是root的話,那么執(zhí)行人就有超級用戶的特權(quán)了。
SGID
當(dāng)一個設(shè)置了SGID位的可執(zhí)行文件運(yùn)行時,該文件將具有所屬組的特權(quán),任意存取整個組所能使用的系統(tǒng)資源。
若一個目錄設(shè)置了SGID,則所有被復(fù)制到這個目錄下的文件,其所屬的組都會被重設(shè)為和這個目錄一樣,除非在復(fù)制文件時加上-p(preserve,保留文件屬性)的參數(shù),才能保留原來所屬的群組設(shè)置。
如果一個文件被設(shè)置了SUID或SGID位,會分別表現(xiàn)在所有者或同組用戶的權(quán)限的可執(zhí)行位上。
例如:
-rwsr-xr-x表示SUID和所有者權(quán)限中可執(zhí)行位被設(shè)置
-rwSr--r--表示SUID被設(shè)置,但所有者權(quán)限中可執(zhí)行位沒有被設(shè)置
-rwxr-sr-x表示SGID和同組用戶權(quán)限中可執(zhí)行位被設(shè)置
-rw-r-Sr--表示SGID被設(shè)置,但同組用戶權(quán)限中可執(zhí)行位沒有被社
實(shí)際上在Linux的源碼實(shí)現(xiàn)中,文件權(quán)限用12個二進(jìn)制位表示,如果該位置上的值是1,表示有相應(yīng)的權(quán)限:
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
第11位為SUID位,第10位為SGID位,第9位為sticky位,第8-0位對應(yīng)于上面的三組rwx位。
-rwsr-xr-x的值為: 1 0 0 1 1 1 1 0 1 1 0 1
-rw-r-Sr--的值為: 0 1 0 1 1 0 1 0 0 1 0 0
Stickybit
該位可以理解為防刪除位。八進(jìn)制表示位1000,它是從UNIX中繼承下來的,在LINUX中將會忽略文件的sticky位。但是對一個目錄設(shè)置sticky位,那么將能阻止用戶刪除或者重命名文件,除非用戶是這個目錄的所有者、文件所有者或者超級用戶。它通常用來控制對共享目錄(例如/tmp)的訪問。
chmod o+t temp -- 為temp目錄加上sticky標(biāo)志 (sticky一般只用于目錄)
三種特殊權(quán)限可以用單獨(dú)的一位8進(jìn)制數(shù)值表示。
其實(shí)文件的權(quán)限應(yīng)該用四個八進(jìn)制來表示,不過用ls-l命令時,只顯示三個罷了。那個沒有顯示的八進(jìn)制數(shù)字其實(shí)是第一個,它用來設(shè)定一些特殊權(quán)限。這個八進(jìn)制數(shù)字的三個位是:SUIDSGIDsticky-bit
SUID、SGID和sticky-bit的數(shù)值表示
SUID SGID sticky 二進(jìn)制 八進(jìn)制 說明
- - - 000 0 不設(shè)置特殊權(quán)限
- - t 001 1 只設(shè)置sticky
- s - 010 2 只設(shè)置SGID
- s t 011 3 只設(shè)置SGID和sticky
s - - 100 4 只設(shè)置SUID
s - t 101 5 只設(shè)置SUID和sticky
s s - 110 6 只設(shè)置SUID和SGID
s s t 111 7 設(shè)置三種特殊權(quán)限
設(shè)置完這些標(biāo)志后,可以用ls-l來查看.如果有這些標(biāo)志,則會在原來的執(zhí)行標(biāo)志位置上顯示.如
rwsrw-r-- 表示有setuid標(biāo)志
rwxrwsrw- 表示有setgid標(biāo)志
rwxrw-rwt 表示有sticky標(biāo)志
那么原來的執(zhí)行標(biāo)志x到哪里去了呢?
系統(tǒng)是這樣規(guī)定的,如果本來在該位上有x,則這些特殊標(biāo)志顯示為小寫字母(s,s,t).否則,顯示為大寫字母(S,S,T)
授予setuid權(quán)限
chmod u+s prog1
or
chmod 4xxx prog1
具有setuid屬性的程序?yàn)?rwsr-xr-x。
授予setgid權(quán)限
chmod g+s dir1
or
chmod 2xxx dir1
具有setgid屬性的目錄為drwxrwsr-x。
授予sticky權(quán)限
chmod t dir1
or
chmod 1xxx dir1
具有sticky屬性的目錄為drwxrwxrwt。
4.5目錄的讀權(quán)限和執(zhí)行權(quán)限
目錄的讀權(quán)限和執(zhí)行權(quán)限是不同的。
當(dāng)用戶對某個目錄只有讀權(quán)限時,那么該用戶可以列出該目錄下的文件列表(即可以使用ll來列出目錄下的文件),但是不能進(jìn)入該目錄(即不能cd目錄名來進(jìn)入該目錄),即如果該目錄是用戶訪問路徑的某個組成部分的話,到這里是訪問不了的。
當(dāng)用戶對某個目錄只有執(zhí)行權(quán)限時,該用戶是可以進(jìn)入該目錄的(即可以通過cd目錄名來進(jìn)入該目錄),因?yàn)橐粋€用戶要想進(jìn)入一個目錄,就必須具有可執(zhí)行權(quán)限才可以。但該用戶是不能列出這個目錄下的文件列表的(即不能使用ll等命令列出該目錄下的信息)
當(dāng)用戶具有寫權(quán)限時,用戶可以在當(dāng)前目錄增加或者刪除文件,但需要幾個前提:需要有可執(zhí)行權(quán)限;要想刪除文件,那么stickybit位是沒有設(shè)置的。
5、Linux安全體系
內(nèi)核只管權(quán)限。如果文件的所有者是普通進(jìn)程,但是卻調(diào)用了reboot,只要執(zhí)行的時候有root權(quán)限,這個程序就能夠執(zhí)行成功。所以內(nèi)核默認(rèn)依賴于誰(uid)在執(zhí)行程序,而不是依賴執(zhí)行的內(nèi)容。
大部分額外的安全系統(tǒng)(如Apparmor、SELinux、seccomp、capabilities、ACL等)都是對默認(rèn)最有效的、基于用戶的安全體系的補(bǔ)充,大多數(shù)作用于執(zhí)行的內(nèi)容,而不是執(zhí)行的用戶,并且作用在不同的位置。
5.1用戶和組的概念
用戶和組是獨(dú)立于文件和進(jìn)程而存在的,它們被存儲在/etc/下的幾個文件中。
一個用戶可以屬于多個組,有一個主要組,其他的叫作supplementarygroup,但這些組之間并沒有什么區(qū)別。
文件object靜態(tài)地包含了用戶和組的設(shè)置,而task(進(jìn)程)也分為靜態(tài)和動態(tài)的用戶和組的設(shè)置。
5.2文件object權(quán)限
文件有標(biāo)準(zhǔn)權(quán)限和擴(kuò)展權(quán)限。標(biāo)準(zhǔn)權(quán)限包括用戶、組、其他組3個的r、w、x、s、t權(quán)限。
s是讓非root程序以root身份運(yùn)行的標(biāo)志位;
t是讓進(jìn)程啟動后滯留內(nèi)存不被回收的標(biāo)志位,以及該文件屬于哪個用戶哪個組;
比較常見的擴(kuò)展有i、a。
i,限制文件不能被刪除;
a,限制文件只能被追加;
不同的文件系統(tǒng)可以實(shí)現(xiàn)不同的擴(kuò)展權(quán)限,甚至可以用戶自定義,ACL擴(kuò)展是所有文件系統(tǒng)都具有的能力。例如阻止root刪除文件。
設(shè)置標(biāo)準(zhǔn)權(quán)限用chmod,設(shè)置擴(kuò)展權(quán)限用chattr。此外,還有g(shù)etfacl、lsattr等命令。
5.3進(jìn)程的object和subject權(quán)限
進(jìn)程雖然看起來是動態(tài)的,但它們既是object(靜態(tài)的一面)也是subject(動態(tài)的一面)。
靜態(tài)的一面,就是我們設(shè)置在文件上的用戶和組,以及其對應(yīng)的權(quán)限。在大部情況下,內(nèi)核依據(jù)這個信息進(jìn)行權(quán)限判斷,這個用戶叫作實(shí)際用戶。
動態(tài)的一面,就是當(dāng)文件suid置位的時候,用戶以root權(quán)限運(yùn)行。這時進(jìn)程的權(quán)限是root的,這個用戶就是有效用戶。理論上有效用戶不一定是root,但是目前都是這樣,sgid也是一個道理。
所以文件object本身的權(quán)限設(shè)置,既提供了文件object本身的權(quán)限,也提供了進(jìn)程object的權(quán)限和進(jìn)程subject的權(quán)限。
Linux中默認(rèn)是基于用戶的安全,并且有各個文件系統(tǒng)的權(quán)限位補(bǔ)充配合。后續(xù)發(fā)展的多種維度的、基于行為的安全機(jī)制成為Linux安全系統(tǒng)發(fā)展的方向。
安全系統(tǒng)大部分都在內(nèi)核中完成,內(nèi)核只是一個管理和驗(yàn)證系統(tǒng),并不是所有的安全驗(yàn)證都在內(nèi)核中完成,系統(tǒng)層次可以完成相當(dāng)多的權(quán)限驗(yàn)證。
以上就是千鋒扣丁學(xué)堂Linux培訓(xùn)之網(wǎng)絡(luò)安全基礎(chǔ)知識的全部內(nèi)容,
要了解更多關(guān)于Linux開發(fā)方面內(nèi)容的小伙伴,請關(guān)注扣丁學(xué)堂Linux培訓(xùn)官網(wǎng)、微信等平臺,扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育有專業(yè)的Linux講師為您指導(dǎo),此外扣丁學(xué)堂老師精心推出的Linux視頻教程定能讓你快速掌握Linux從入門到精通開發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Linux技術(shù)交流群:422345477。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】 【掃碼進(jìn)入Python全棧開發(fā)免費(fèi)公開課】
查看更多關(guān)于“Linux培訓(xùn)資訊”的相關(guān)文章>>
標(biāo)簽:
Linux培訓(xùn)
Linux視頻教程
紅帽Linux視頻
Linux學(xué)習(xí)視頻
Linux入門視頻