Linux中SELinux、Shell簡介、touch命令的應(yīng)用小結(jié)

?? SELinux
SELinux(Security-Enhanced Linux)是美國國家安全局(NSA)對于強(qiáng)制訪問控制的實(shí)現(xiàn),是Linux歷史上最杰出的新安全子系統(tǒng)。NSA是在Linux社區(qū)的幫助下開發(fā)了一種訪問控制系統(tǒng)。在這種訪問控制體系的限制下,進(jìn)程只能訪問那些在它的任務(wù)中所需要的文件。
SELinux默認(rèn)安裝在Fedora和Red Hat Enterprise Linux上,也可以作為其他發(fā)行版上容易安裝的包得到。
- SELinux安全增強(qiáng)Linux是由NSA針對計(jì)算機(jī)基礎(chǔ)結(jié)構(gòu)安全開發(fā)的一個全新的Linux安全策略機(jī)制。SELinux允許管理員更加靈活地定義安全策略。
- SELinux是一個內(nèi)核級的安全機(jī)制,從2.6內(nèi)核之后集成在內(nèi)核之中。
- 主流的Linux都會集成SELinux,Red Hat默認(rèn)開啟SELinux。
- SELinux是內(nèi)核級的,所以對SELinux的設(shè)置需要重啟系統(tǒng)。
?? SELinux的規(guī)則與概念
所有的安全機(jī)制都是對兩樣?xùn)|西做出限制:進(jìn)程和系統(tǒng)資源(文件、網(wǎng)絡(luò)套接字、系統(tǒng)調(diào)用等),SELinux針對這兩種類型定義了兩個基本概念:域(Domain)和上下文(Contest)。
- 域用來對進(jìn)程進(jìn)行限制
- 上下文用來對系統(tǒng)資源進(jìn)行限制。
- DAC(自主存取控制) 依據(jù)程序運(yùn)行時(shí)的身份決定權(quán)限,是大部分操作系統(tǒng)的權(quán)限存取控制方式,也就是依據(jù)文件的own、group、other/r、w、x權(quán)限進(jìn)行限制。Root有最高權(quán)限無法限制;r、w、x權(quán)限劃分太粗糙,無法針對不同的進(jìn)程實(shí)現(xiàn)限制。
- MAC(強(qiáng)制存取控制) 依據(jù)條件決定是否有存取權(quán)限??梢砸?guī)范個別細(xì)致的項(xiàng)目進(jìn)行存取控制,提供完整的徹底化規(guī)范限制??梢詫ξ募?、目錄、網(wǎng)絡(luò)、套接字等進(jìn)行規(guī)范,所有動作必須先得到DAC授權(quán),然后得到MAC授權(quán)才可以存取。
- TE (類型強(qiáng)制) 所有操作系統(tǒng)的訪問控制都是以關(guān)聯(lián)的客體和主體的某種類型的訪問控制屬性為基礎(chǔ)的。在SELinux中,訪問控制屬性稱為安全上下文。所有客體(文件、進(jìn)程間通信通道、套接字、網(wǎng)絡(luò)主機(jī)等)和主體(進(jìn)程)都有與其關(guān)聯(lián)的安全上下文,一個安全上下文由三部分組成:用戶、角色和類型標(biāo)識符。
?? 查看SELinux
使用 ps –Z 命令可以查看進(jìn)程的域,使用ls –Z可以查看文件的上下文。
查看進(jìn)程域中的SELinux。

說明:黑線標(biāo)注的部分就是SELinux,用三個冒號分隔開,形成了四個部分。
查看文件的上下文。

說明:黑線標(biāo)識的地方也是三個冒號分隔形成的四個部分
system_u代表的是用戶。
object_r代表的是角色。
第三段是SELinux中最重要的信息,admin_home表示的是類型。
最后一段s0是跟MLS、MCS相關(guān)的東西。
?? SELinux策略
SELinux通過定義策略來控制哪些域能訪問哪些上下文;SELinux有很多預(yù)置策略,通常不需要自定義策略(除非要對自定義服務(wù)、程序進(jìn)行保護(hù));Red Hat Linux使用預(yù)置的目標(biāo)策略。
目標(biāo)策略定義只有目標(biāo)進(jìn)程受到SELinux的限制,其他進(jìn)程運(yùn)行在非限制模式下,目標(biāo)策略只影響網(wǎng)絡(luò)應(yīng)用程序。RHEL受限的網(wǎng)絡(luò)服務(wù)有200個左右,常見的有dhcpd、httpd、mysqld、named、ntpd(時(shí)間伺服服務(wù)器)、squid(代理服務(wù)器)、rpcbind、syslogd等。
?? SELinux模式
SELinux有如下三種工作模式。
- 強(qiáng)制模式(enforcing):只要是違反策略的行動都會被禁止,并作為內(nèi)核信息記錄。
- 允許模式(permissive):違反策略的行為不會被禁止,但是會提示警告信息。
- 禁用模式(disabled):禁用SELinux,與不帶SELinux系統(tǒng)是一樣的。
通常情況下在不怎么了解SELinux時(shí),將模式設(shè)置成disabled,這樣在訪問一些網(wǎng)絡(luò)應(yīng)用時(shí)就不會出問題。SELinux的主配置文件是 /etc/sysconfig/selinux,其默認(rèn)設(shè)置值為 SELinux=enforcing。
- 命令getenforce可以查看當(dāng)前系統(tǒng)SELinux的工作狀態(tài)。
getenforce
- 命令setenforce可以設(shè)置當(dāng)前系統(tǒng)SELinux的工作狀態(tài)。
Setenforce
使用編輯器查看SELinux的主配置文件/etc/sysconfig/selinux得到如下結(jié)果


說明:紅色方框標(biāo)識的部分 SELinux=enforcing 代表目前系統(tǒng)執(zhí)行的是強(qiáng)制策略;SELinuxTYPE=targeted 代表當(dāng)前系統(tǒng)遵循的是目標(biāo)策略。
?? SELinux設(shè)置
1、 獲取當(dāng)前SELinux運(yùn)行狀態(tài)
getenforce
可能返回的結(jié)果有三種:Enforcing、Permissive和Disabled。Disabled代表SELinux被禁用,Permissive代表僅記錄安全警告但不阻止可疑行為, Enforcing代表記錄警告且阻止可疑行為
2、 改變SELinux運(yùn)行狀態(tài)
?? Shell簡介
Shell:
n.外殼; 炮彈; (貝、卵、堅(jiān)果等的) 殼; (人的) 表面性格;
vt.去殼,脫落; 炮擊;
vi.剝皮; 炮轟;
Shell在Linux中俗稱“殼”,Shell處于Linux Kernel的外圍,就像個“殼”一樣,如下圖所示:

Linux Kernel承擔(dān)的任務(wù)是上層的服務(wù)、應(yīng)用以及硬件控制等,但Linux Kernel是無法直接去控制的,也即用戶是不允許直接與Linux Kernel進(jìn)行通信的。這里就需要借助Shell這個“殼”。Shell所起到的是個中間媒介的作用,也就是將用戶的需求轉(zhuǎn)換成Linux Kernel能夠識別的指令。
Shell本身只是一個感念,其中的實(shí)施是依靠圖形或者命令模式去實(shí)現(xiàn)。
Shell是操作系統(tǒng)最外面的一層。Shell管理著用戶與操作系統(tǒng)之間的交互:等待輸入,向操作系統(tǒng)解釋用戶的輸入,并且處理各種各樣的操作系統(tǒng)的輸出結(jié)果。Shell提供了用戶與操作系統(tǒng)之間的通信方式,這種通信方式可以以交互方式(從鍵盤輸入,并且可以立即得到響應(yīng)),或者以Shell Script(非交互)方式執(zhí)行。Shell Script是放在文件中的一串Shell和操作命令,他們可以被重復(fù)使用。本質(zhì)上Shell Script是命令行,命令簡單地組合到一個文件里面。
Shell基本上是一個命令解釋器,類似于DOS下的command。它接收用戶命令(如 ls 等),然后調(diào)用相應(yīng)的應(yīng)用程序。
?? Shell分類
(1) 圖形界面Shell(Graphical User Interface Shell,GUI Shell),圖形界面的最終使用也是轉(zhuǎn)換成命令行模式去執(zhí)行的。例如GNOME、KDE等。
(2) 命令行式Shell(Command Line Interface Shell,CLI Shell),z最常用的命令行是GNU Bourne-Again Shell,簡稱 BASH,也就是Linux中常用的命令行。
?? BASH基礎(chǔ)
BASH是許多Linux平臺內(nèi)定的Shell,它能運(yùn)行于大多數(shù)類UNIX操作系統(tǒng)之上,簡單的說,就是我們必須通過Shell將輸入的命令與內(nèi)核通信,可以讓內(nèi)核控制硬件準(zhǔn)確無誤地工作來提高效率。
BASH本身其實(shí)也是一個命令模式下的命令,其代表的就是打開命令模式終端的意思。
1、 提示符
Linux操作系統(tǒng)下的BASH提示符分為#和$兩種。
#:代表超級賬戶root,權(quán)限比較大
$:代表普通賬戶,權(quán)限比較小
2、 結(jié)構(gòu)解讀

root代表目前登錄的是root賬戶,zhangyan代表目前使用的這臺計(jì)算機(jī)的主機(jī)名稱,@代表使用root賬戶登錄到zhangyan這臺主機(jī)。
3、 BASH命令的組成
BASH命令的一般結(jié)構(gòu):
$ command [ [-]option(s)] [option argument(s)] [command argument(s)]
1、$:計(jì)算機(jī)提示符,代表的是使用普通賬戶登錄系統(tǒng)。
2、command:對shell而言正確的Linux命令,BASH命令均為小寫。
3、[-option(s)]:定制命令動作的一個或多個修飾符號,是BASH的命令選項(xiàng)。
4、[option argument(s)]:定制命令選項(xiàng)的一個或多個修飾符號,是命令選項(xiàng)修飾。
5、[command argument(s)]:受命令影響的一個或多個對象,命令對象。
注意:以上各部分用空格分開。command、option、option argument和command argument,但在option或option argument之間是不需要空格的。多個option或option argument的順序是不要緊的,也就是和順序無關(guān)。在option和option argument間的空格是可選的。

ls為command,-al為-option(s)。
?? touch命令的應(yīng)用
touch的一般用法是用來創(chuàng)建一個新文件。同時(shí),touch還可以用來修改文件的時(shí)間戳。
和時(shí)間戳有關(guān)的三個時(shí)間:
訪問時(shí)間access time,簡稱為 atime:一個文件的數(shù)據(jù)最后一次被訪問的時(shí)間。例如,顯示一個文件的內(nèi)容或者運(yùn)行一個shell腳本會更新文件的atime??梢杂?ls –lu 命令查看。
更改時(shí)間status time,簡稱為 ctime;在UNIX中基本無法知道一個文件的精確創(chuàng)建時(shí)間。更改時(shí)間是指文件或目錄的屬性(所有者、權(quán)限等)被更改的時(shí)間。ctime在文件的內(nèi)容改變的時(shí)候也會改變。如果一個文件需要備份的話,dump命令需要用到ctime??梢杂?ls –lc 命令來查看ctime。
修改時(shí)間modification time,簡稱為 mtime:文件的目前內(nèi)容最后被修改的時(shí)間。這是在一個長目錄列表中顯示的時(shí)間。
總結(jié):
文件的atime是在讀取文件或者執(zhí)行文件時(shí)更改的;
文件的mtime是在寫入文件時(shí)隨文件內(nèi)容的更改而更改的;
文件的ctime是在寫入文件,更改所有者、權(quán)限或鏈接設(shè)置時(shí)隨inode的內(nèi)容更改而更改的。
名稱:touch
使用權(quán)限:所有使用者
使用方式:touch [option] filename
| 參數(shù) | 說明 |
|---|---|
| -a | 僅修改訪問時(shí)間。 |
| -r | 修改文件的時(shí)間為指定文件的日期時(shí)間。 |
| -d | 指定文件日期時(shí)間為yymmdd。 |
| -t | 指定文件日期時(shí)間為yymmddhhmm。 |
| -c:僅改變修改時(shí)間,如果文件不存在則創(chuàng)建。 | |
| -m | 僅修改mtime。 |
說明:如果不加參數(shù)后面直接跟上filename,則判斷文件是否存在,如果存在則改變其時(shí)間,如果不存在則創(chuàng)建一個0字節(jié)的空文件。如果加上相應(yīng)參數(shù),則為按照參數(shù)的設(shè)置修改時(shí)間戳的作用。

到此這篇關(guān)于Linux中SELinux、Shell簡介、touch命令的應(yīng)用知識總結(jié)的文章就介紹到這了,更多相關(guān)linux SELinux、Shell簡介 touch命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
每天一個Linux命令之shell單引號和雙引號的經(jīng)典解釋
這篇文章主要給大家介紹了關(guān)于每天一個Linux命令之shell單引號和雙引號的經(jīng)典解釋,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Linux系統(tǒng)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
簡單的遠(yuǎn)程FTP定時(shí)備份Shell腳本分享
這篇文章主要介紹了簡單的遠(yuǎn)程FTP定時(shí)備份Shell腳本分享,,需要的朋友可以參考下2014-07-07
Linux下Tomcat啟動正常,但瀏覽器無法訪問的解決方法
下面小編就為大家?guī)硪黄狶inux下Tomcat啟動正常,但瀏覽器無法訪問的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
Linux命令學(xué)習(xí)之原來最簡單的ls命令這么復(fù)雜
ls命令應(yīng)該是我們最常用的命令之一了,但是我們可能容易忽略那些看起來最簡單的東西。本文就來和大家詳細(xì)聊聊ls命令的使用,需要的可以了解一下2022-10-10
Ansible?Ad-hoc命令執(zhí)行模塊實(shí)戰(zhàn)教程
Ad-hoc是Ansible下臨時(shí)執(zhí)行的一條命令,對于復(fù)雜的命令會使用playbook。Ad-hoc的執(zhí)行依賴于模塊,ansible官方提供了大量的模塊,這篇文章主要介紹了Ansible?Ad-hoc命令執(zhí)行模塊?,需要的朋友可以參考下2024-02-02

