Linux內核分析+子安全系統selinux+Linux的用戶組和用戶
一.Linux內核分析/etc/grub.conf文件
1.passwd命令
Linux以安全性和穩定性在世界上自居,在Linux發明之初就在安全領域做了很多手段,其中最簡單就是提供了密碼的登錄和密碼修改的功能,在Linux系統當中無論什麽用戶都必須具有密碼才能登錄Linux操作系統.
命令格式: passwd [用戶名]
命令作用:更新或者設置用戶登錄的密碼
2.黑客攻防:Linux單用戶模式破解root密碼
原因在大部分的人安裝Linux的時候,很多人沒有設置裝載引導的密碼,所以就導致黑客可以利用這個漏洞來破解超級用戶的密碼.
單用戶模式在Linux當中是用於維護操作系統的一個模式,就相當於windows當中的安全模式,這個單用戶模式在沒有設置裝載密碼情況下是可以隨意的切換到密碼的修改狀態當中的,所以這個過程是非常的危險的,破解root密碼只有有以下步驟就可以完成:
第1步:暴力關機(拔掉電源)
第2步:重新開機
第3步:在系統啟動的倒數頁面當中回車
第4步:出現以下界面的時候
第5步:出現以下界面的時候
第6步:在以下界面當中輸入1 fastboot切換到單用戶模式的登錄選擇界面
回車即可
第7步:在以下界面中輸入b,切換到命令界面當中
切換成功後,會出現單用戶模式的命令界面如下:
第8步:使用passwd命令破解root的密碼,出現update successfully就證明破解成功
破解成功後,馬上重啟linux操作系統
重啟成功就可以使用單用戶模式中修改root密碼重新成功登錄linux操作系統了,這個就是黑客破解root密碼的一般手段,這個手段的危害顯而易見,因此我們需要屏蔽這個黑客的攻擊,我們應該怎麽做呢?如果希望屏蔽這個攻擊,那麽我們就需要修改
3.用戶裝載密碼文件(/etc/grub.conf)
在Linux當中Linux只要一啟動那麽首先就會去需找grub.conf文件,用來啟動Linux時加載相關的啟動配置,其中包括倒數啟動,包括標題,包括用戶裝載密碼等等,所以在安全領域當中我們安裝一臺Linux的服務器就應該為grub.conf文件設置一個裝載密碼.
使用vim打開/etc/grub.conf文件,內容如下:
第10行:代表當前操作系統的id,默認為0
第11行:timeout就是系統啟動時倒數時間,默認的情況下,系統啟動需要5秒鐘
第12行:Linux圖形操作界面的相關素材和背景素材的文件
第13行:隱藏式菜單設置,一般我們很少會使用
第14行:設置啟動Linux操作系統時候的相關歡迎信息,一般也很少會修改
第15-17行:Linux相關的配置信息,一般我們不做源碼研究無需理會
但是這文件默認的情況下少一個非常重要的選項是password選項,password用於設置單用戶模式的裝載引導密碼,只有知道這個密碼才能切換到單用戶模式,所以我們需要加入當前這個選項
4.grub-md5-crypt命令
命令格式:grub-md5-crypt
命令作用:用於生成linux的裝載引導密碼的Md5加密形式
執行效果如下:
獲取了123456的裝載密碼後,我們一般需要復制當前密碼來使用
5.為/etc/grub.conf文件設置裝載密碼詳細步驟:
第1步:打開/etc/grub.conf文件,在hiddenmeun和title之間插入一個空行,按下vim中的小寫o
第2步:在新起的行中插入以下內容,就可以設置了裝載密碼
保存並退出(:x)
第3步:重啟Linux操作系統,使用reboot命令
第4步:出現以下界面時,提示如下:
第5步:輸入裝載密碼
第6步:如果能夠成功切換到單用戶模式的編輯界面,那麽就證明密碼設置成功
二.選擇登錄界面文件之/etc/inittab文件
其實在linux存在多種操作界面,常見的有圖形操作界面也有字符操作界面(黑窗口),這麽的操作界面像阿裏雲默認一般會給字符操作界面給你管理,這時就會有一個這樣的問題了,阿裏雲的Linux為什麽在啟動的時候會選擇字符操作而不是圖形界面,而我們的虛擬機在啟動的時候選擇是圖形操作界面而不是字符操作界面呢?
原因是Linux其實有一個核心的文件叫inittab文件,這個文件是用於linux啟動的時候選擇用戶的登錄操作界面的文件,該文件位於/etc目錄下,使用vim打開inittab文件
內容如下:
第18行: 代表Linux關機模式,代號為0,如果把linux設置成為該模式,那麽linux將無法啟動,因為一啟動就關機,所以我們不能設置該模式.
第19行:代表Linux單用戶模式,代號為1,如果設置為該模式,Linux一啟動就會進入單用戶模式,一般用於系統維護比較多,但這個選項一般是運維人員會使用,但是php開發者使用的幾率比較低.
第20行:多用戶的字符操作界面,代號為2,但這個模式沒有NFS的網絡配置,因此該模式不能夠連接互聯網,所以一般人很少使用這個模式,這個是一個歷史遺留的問題,因為以前沒有今天的互聯網時代,所以在20年前才會有人使用
第21行:功能齊全的多用戶多任務的字符操作界面,一般真實的服務器(如:阿裏雲)就會使用這個模式,這個模式代碼為3,開發中我們使用這個模式占據了99%的可能性
第22行:自定義的Linux模式,一般使用C語言或者C++語言開發Linux內核人員都會使用該模式,該模式的代號為4,這個模式除非你具備非常強悍的Linux源碼技術,否則很難使用,一般php開發者盡量不要接觸.
第23行:Linux圖形操作界面模式,其代號為5,一般在我們學習和使用虛擬機的時候這個模式使用得非常廣泛,在公司的內部服務器當中很多運維人員為了方便也會設置該模式,在現實開發當中,這個模式使用的幾率也很高.
第24行:Linux重啟模式,這個模式一旦設置,Linux開機就會重啟,所以不能設置這個模式,否則Linux同樣無法啟動,其代號為6
第26行:代表當前操作系統的設置模式為5,也就是圖形操作界面模式,因此Linux啟動的時候就會使用圖形操作界面進行用戶的登錄,而阿裏雲設置該模式為3所以啟動的時候就會以齊全功能的字符操作界面模式讓你管理阿裏雲服務器.
從以上文件分析可知,Linux一共存在7中模式,我們作為php開發者只需要使用3和5這兩種模式就夠了,然而0和6現今的互聯社會是沒有人使用的,但為什麽又會存在0和6這兩種模式呢?0和6其實最早是在軍事當中使用,今題使用0和6的應用只有單片機和電子產業,互聯網是不會使用的.
如果我們希望把虛擬機設置為黑窗口(字符操作)的登錄界面,我們應該怎麽做呢?
修改/etc/inittab文件,如下:
保存並退出(:x),然後重啟linux操作系統,設置成功就會出現以下界面:
如果登錄成功後,會出現以下界面,默認的情況下字符操作界面會讓用戶處於宿主目錄的位置當中:
並且字符界面太支持中文的顯示,因為Linux默認的情況下建議使用英文字符
三.Linux子安全系統selinux
1.selinux的百度簡介
這個系統非常的安全,也非常的傑出,使得今天航天航空科技可以使用Linux操作系統,但是對於php開發者來說,就是一種悲哀,因為selinux安全過頭了,它會阻礙用戶連接mysql數據庫和阻礙用戶連接sphinx全文索引等軟件,因為如果你希望把linux運用在php開發當中,那麽我們就需要關閉selinux的子安全系統,其配置配置位於/etc/selinux目錄當中,使用vim打開/etc/selinux/conf文件
內容如下所示:
這時如果你有阿裏雲服務器,你可以看看阿裏雲服務器默認是關閉還是開啟的,默認是關閉的
因此我們也可以學習阿裏雲服務器一樣,關閉虛擬機中的selinux,/etc/selinux/conf內容修改如下:
保存退出(:x),如果修改了selinux你不重啟linux操作系統是不會生效的,因此記住,修改完成必須馬上重啟linux,只要關閉子安全系統,你後面的lamp配置工作就能夠順利完成.
2.虛擬機的快照技術
①什麽是虛擬機的快照,其原理圖如下所示:
②在vmware虛擬機中進行快照步驟如下:
第1步:假設我們對當前的狀態非常滿意,那麽我們就可以對Linux當前狀態進行拍攝
第2步:對快照進行一個詳細的描述便於日後的參考
如果拍攝快照成功,那麽在快照管理當中就會出現當前的快照狀態,如下圖所示:
第3步:假設你當前繼續工作,生成了一個bad.txt的文件在桌面當中而這個操作假設你不臺滿意或者是開發當中做錯的某些配置工作,那麽我們就可以使用快照進行狀態轉回工作,步驟如下:
然後在以下界面選擇確定:
點擊後就會返回到一個你快照滿意的狀態
四.Linux的用戶組和用戶
Linux是一個多任務多用戶的操作系統,在Linux當中使用組文件和用戶文件對用戶進行管理,很多軟件的安裝都必須要有對應的用戶和用戶組,否則軟件無法啟動,例如:mysql和nginx,apache等軟件.
1.用戶和用戶組的原理圖
2.用戶組和用戶的文件
①組文件的組成:
① /etc/group (用戶的組文件,非常重要)
②/etc/gshadown(用戶的組密碼文件,被棄用了,了解即可,一般不會使用)
②用戶文件的組成:
①/etc/passwd文件(這個文件不是用來存儲用戶密碼而拿來存儲用戶的信息)
②/etc/shadow文件(這個文件是用戶的密碼文件)
3./etc/group文件詳解
使用vim打開/etc/group文件
內容如下所示:
以:進行分隔可以把一行內容分成4個列
第1列:表示組名稱
第2列:表示組密碼(x是一個占位符,真正的密碼存放在/etc/gshadow文件當中,但已經被棄用了)
第3列:表示組的id
組id為0-499是系統安裝時定義的默認組,其中0代表超級管理員組,組名稱一定是root
組id為500-500以後這個些組有可能是軟件安裝時定義的組,也有可能是你自己定義的組id,所以我們統稱500到500以上id的組為自定義的用戶組
第4列:表示組內的用戶(但這個選項很少被關註)
4./etc/gshadow文件(用密碼文件,了解)
使用vim打開/etc/gshadow文件
以:進行分隔,一共可以分為4列
第1列 :組名稱
第2列:一般表示為組密碼,但是因為被棄用了,所以不會存放組密碼了
第3列:一般表示為組的權限,因為被棄用了,所以也為空了
第4列:表示組的管理員,這個選項一般被c和c++的開發者所關於,但php開發者了解即可
5.用戶組的管理命令
在Linux當中我們可以通過命令對用戶組進行管理,主要可以管理用戶組的增刪查該功能
①groupadd命令
命令格式:groupadd [-選項][組名稱]
命令作用:添加用戶組,一般使用該命令添加的用戶組大於500
例子1:添加一個名為itcast的用戶組,執行命令如下:groupadd itcast
查看/etc/group文件內容如下:
例子2:添加一個名為itheima,組id為600的組
在groupadd當中加入-g選項,-g選項的作用就用戶組的id,執行命令如下:
groupadd -g 600 itheima
查看/etc/group文件內容如下:
如果我們要查看我們所添加的組信息,每一次用vim打開是不是非常的麻煩啊?
②grep命令
命令格式: grep [搜索關鍵字][文件或者目錄]
命令作用:搜索和定位內容中關鍵字,可以結合其他的命令一起使用,也可以單獨使用
例子1:在/etc/group文件當中搜索組id為600的信息,命令如下:
grep 600 /etc/group
例子2:在/etc/group文件當中搜索組名為itcast的信息,命令如下:
grep itcast /etc/group
③groupmod命令
命令格式:groupmod [-選項][修改的內容][舊的組名稱]
命令作用:更新一個組的信息
例子1:修改itheima的組名稱為heima
選項-n,是修改組的名稱,執行代碼如下:
groupmod -n heima itheima
可以使用grep搜索id為600的組信息如下:
例子2:修改heima的組id為601
選項-g,是修改組的id,執行代碼如下:
groupmod -g 601 heima
可以使用grep搜索祖名為heima的組信息如下:
③groupdel命令
命令格式:groupdel [組名稱]
命令作用:刪除一個用戶組
例子:刪除祖名為heima的組信息,執行命令如下:
groupdel heima
使用grep命令查找組id為601的組信息
沒有返回任何組信息就代表組不存在,刪除成功
CentOS6.5和CentOS6.8或者CentOS7.0當中有一些運維人員他們會使用一種監測工具叫zippitias工具,該工具安裝完成後,groupdel會被這個刪除掉這個命令,因為這個監測認為groupdel是一個危險操作,所以會把這個命令刪除,會使用zippitias_grp_del命令來代替groupdel命令
6.用戶文件/etc/passwd詳解
使用vim打開/etc/passwd文件
內容如下圖所示:
以:進行分隔,一共有7列
第1列:表示用用戶名
第2列:表示用戶密碼(x占位符表示密碼,真實密碼存放在/etc/shadow文件中)
第3列:表示用戶的id,0表示超級管理員
第4列:表示用戶所在的組的id
第5列:表示用戶的備註信息,一般跟用戶名一樣,但也可以不一樣,一般最好不要修改
第6列:用戶的宿主目錄
第7列:表示一個用戶是否具備了登錄linux操作系統的資格
如果是/bin/bash表示該用戶可以登錄linux操作系統
如果是/sbin/nologin表示該用戶不能登錄linux操作系統
7.用戶密碼文件/etc/shadow詳解
在linux當中用戶必須具有密碼才能登錄操作系統,所以密碼文件我們只需要記住兩個重要的列就可以了,使用vim打開/etc/shadow文件,內容如下
以:進行分隔,我們只需記住第1和第2列即可
第1列:表示用戶名
第2列:表示用戶的密碼(密碼的算法是linux特有的散列md5算法,這個算法一般用於軍事領域,一般人很難破解)
如果在密碼列當中出現!!表示用戶沒有密碼,並且無法登錄操作系統
8.用戶的管理命令
①id命令
命令格式:id [用戶名]
命令作用:顯示用戶的基本信息
例子:顯示zhangsan的基本信息,執行命令如下:
id zhangsan
以上命令在現實開發當中使用的幾率基本是100%
②groups命令
命令格式:groups [用戶名]
命令作用:以用戶:組的鍵值對形式展示用戶的信息
例子:使用groups展現zhangsan的鍵值對信息
以上命令是紅帽子認證工程師必考的命令,所以很多運維就會問一些這個命令的使用方法
③useradd命令
命令格式:useradd[-選項][用戶名稱]
命令作用:添加一個linux用戶
例子1:添加一個用戶名為wangwu的用戶,執行命令如下:
useradd wangwu
使用id或者groups命令查看wangwu的用戶信息,如下
在默認的情況下使用useradd命令,創建一個用戶的同時會創建一個與用戶名相關的組,所以由此可以看出每個在linux當中用戶必須歸屬一個用戶組,因此刪除用戶組可能會導致用戶出現一些未知bug,所以刪除組是一個危險的操作
例子2:添加一個用戶名為jimmy的用戶,把該用戶放在itcast的組當中
使用-g選項,該選項用於添加用戶時指定用戶所在的組,執行命令如下:
useradd -g itcast jimmy
使用id或者groups命令查看jimmy的用戶信息,如下
使用grep命令查看/etc/passwd文件中jimmy的信息
註意事項:添加了一個用戶,那麽這個用戶在默認的情況無法登錄操作系統,如果希望用戶添加後可以登錄linux操作系統,就必須給用戶添加一個用戶的登錄密碼
③usermod命令
命令格式:usermod[-選項][用戶名稱]
命令作用:修改用戶的相關信息
例子:把用戶wangwu的修改為lisi,使用選項-l,該選項用於修改用戶的名稱
執行命令如下所示:
usermod -l lisi wangwu
使用id查詢wangwu和lisi的相關信息如下所示
註意:修改了wangwu為lisi之後,id查詢wangwu無法返回用戶信息,使用id查詢lisi,發覺lisi會在wangwu這個用戶組當中
④userdel命令
命令格式:userdel[-選項][用戶名稱]
命令作用:刪除用戶的相關信息
例子1:把lisi這個用戶刪除,執行命令:userdel lisi
刪除後用id查詢lisi的確刪除成功
註意,刪除用戶如果不加任何選項,不會刪除用戶的宿主目錄
例子2:把jimmy這個用戶刪除,同時刪除jimmy的宿主目錄
使用-r選項,該選項用於刪除用戶時刪除用戶的宿主目錄,執行命令如下:
userdel -r jimmy
註意:刪除一個用戶同時刪除用戶的宿主目錄其實與目錄名稱無關。
既然使用-r可以刪除jimmy的目錄,那麽我們在添加的用戶的時候是不是一定要使用與用戶名一樣的宿主目錄呢?
擴展例子:添加一個名為tommy的用戶,其實宿主目錄為php25
這時如果希望完成以上的例子,我們需要在useradd命令中加入-d選項,執行命令如下:
useradd -d /home/php25 tommy
如果切換用戶tommy並且使用cd ~,結果如下所示:
⑤chfn命令
命令格式:chfn [用戶名]
命令作用:編輯用戶的詳細備註信息,一般配置finger命令一起使用
例子:為zhangsan這個用戶添加詳細的備註信息
使用finger命令查看用戶的相關備註詳細信息,使用命令格式如下:
finger [用戶名]
例子:查看zhangsan的詳細備註信息,執行命令: finger zhangsan
註意:在現實中多使用chfn命令,並且安裝finger命令配合使用
9.禁止用戶登錄linux操作系統
1.禁止單個用戶登錄操作系統
例子:禁止羅鴻登錄linux操作系統,步驟如下:
第1步:使用vim打開/etc/passwd文件,然後使用末行模式搜索/luohong
第2步:找到luohong所在是行,然後修改其登錄操作系統的權限為/sbin/nologin
保存並退出(:x)
第3步:註銷退出後無法登錄操作系統,發覺用戶無論如何都不能登錄操作系統了,我們把這種成為凍結單個用戶登錄
第4步:如果希望對某一個用戶進行解凍操作那麽就可以把/etc/passwd的第7列修改為/bin/bash
2.禁止所有普通用戶登錄操作系統
問題:如果在一個公司裏面,有一個運維總監管理著100個運維人員,他們用戶名分為為user1-user100,那麽這時如果系統需要進行維護,總監要求除了root用戶以外所有的普通用戶都不能進入linux操作系統,直到維護完成之後才可以進入,這時我們其實需要對user1-user100逐個進行凍結和解凍嗎?我們如果你真的一個個去凍結和解凍是沒有效率,因此遇到以上場景,我們需要禁止所有普通用戶登錄,步驟如下:
第1步:使用root登錄linux操作系統,並且切換到/etc目錄下,如下圖所示:
第2步:使用touch命令,創建一個名為nologin的文件
完成以上的操作,那麽就禁止了所有的普通用戶(除root以外)登錄操作系統,如果這時普通用戶想登錄操作系統,就會出現以下界面:
第3步:使用root登錄linux操作系統,發覺root登錄正常
第4步:如果維護完成,希望解凍所有的普通用戶,那麽我們只需要刪除/etc/nologin文件,這時問題來了:如何刪除一個文件呢?使用rm命令刪除,y代表yes
第5步:刪除成功後,所有的普通用戶就解凍成功了,都可以重新登錄操作系統
10.管理文件和目錄的命令
①rm命令
命令格式:rm [-選項][目錄或者文件的詳細位置]
命令作用:刪除文件或者目錄
在默認的情況下使用rm命令刪除一個文件會提示是否確認刪除?如果回答y就是確定刪除,如果回答n就不需要 刪除。如果希望刪除的時候不提示任何的錯誤,那麽我們需要加相關的選項:
-f (force)選項,這個選項代表強制刪除,不會提示的錯誤,並且一定會刪除成功
例子1:刪除1.php,不加上-f選項
回答y刪除了1.php
例子2:刪除2.php和3.php,不加上-f選項,刪除2.php回答n,刪除3.php回答y
發覺2.php沒有被刪除
例子2:刪除整個test目錄包括其子目錄和子文件
方法1:切換到test目錄當中使用rm -rf *
-r 選項:表示遞歸刪除目錄中所有的子文件和子目錄
* : 代表刪除當前目錄下所有的文件和目錄
這時你會發覺test目錄本身沒有被刪除,也就說該命令只會刪除當前目錄中的子目錄和子文件但不會刪除當前目錄
方法2:刪除整個test目錄,使用 rm -rf ~/桌面/test
這時會發覺test目錄和其子目錄和子文件都被刪除幹凈了
例子3:刪除test目錄的所有子文件,但不刪除其子目錄
只需要刪除當前目錄中的子文件,可以切換test中刪除比你且去掉-r選項,執行命令如下:
rm -f *
註意:如果當前在根目錄當中,使用rm -rf *那麽就會刪除根目錄中所有文件和目錄,這時linux就直接崩潰了,同樣如果你使用rm -rf / 那麽同樣產生相同的災難,在linux當中rm命令刪除是無法恢復。因為Linux的刪除是叫做粉碎性刪除,刪除的時候會刪除文件的節點。linux當rm -rf * 或者 rm -rf /要謹慎使用
如果希望查看文件節點,可以使用ls -i來看出,執行命令如下:
②cp命令
命令格式:cp [-選項][源文件或目錄][目標位置]
命令作用:復制文件或者目錄
例子1:復制test目錄中1.php到test_sub1目錄中
執行命令: cp ./1.php ./test_sub1,結果如下:
例子2:復制test_sub2目錄復制到test_sub1當中,使用選項-r
-r選項:遞歸復制目錄和子文件
執行命令: cp -r ./test_sub2 ./test_sub1
例子3:復制1.php目錄復制到test_sub1當中,但不進行改名操作
執行命令如下: cp ./1.php ./test_sub1
例子4:復制1.php目錄復制到test_sub1當中,但進行改名操作
執行命令: cp ./1.php ./test_sub1/111.php
③mv命令(move)
命令格式:mv [-選項][源文件或目錄][目標位置]
命令作用:移動文件或者目錄
例子1:剪切1.do到test_sub1當中
執行命令: mv ./1.do ./test_sub1
例子2:剪切test_sub3目錄到test_sub1當中,剪切時包括test_sub3當中所有子文件和子目錄
執行命令: mv ./test_sub3 ./test_sub1
例子3:修改1.jsp為jsp.php
執行命令: mv ./1.jsp ./jsp.php
Linux內核分析+子安全系統selinux+Linux的用戶組和用戶