1. 程式人生 > 實用技巧 >MVC框架的程式碼審計小教程

MVC框架的程式碼審計小教程

2020/3/10

Linux作業系統是UNIX作業系統的一種克隆系統,它誕生於1991 年的10 月5 日(這是第一次正式向外公佈的時間)。以後藉助於Internet網路,並通過全世界各地計算機愛好者的共同努力,已成為今天世界上使用最多的一種UNIX 類作業系統,並且使用人數還在迅猛增長。
Linux是一套免費使用和自由傳播的類Unix作業系統,是一個基於POSIX和UNIX的多使用者、多工、支援多執行緒和多CPU的作業系統。它能執行主要的UNIX工具軟體、應用程式和網路協議。它支援32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多使用者網路作業系統。它主要用於基於Intel x86系列CPU的計算機上。這個系統是由全世界各地的成千上萬的程式設計師設計和實現的。其目的是建立不受任何商品化軟體的版權制約的、全世界都能自由使用的Unix相容產品。
Linux以它的高效性和靈活性著稱,Linux模組化的設計結構,使得它既能在價格昂貴的工作站上執行,也能夠在廉價的PC機上實現全部的Unix特性,具有多工、多使用者的能力。Linux是在GNU公共許可許可權下免費獲得的,是一個符合POSIX標準的作業系統。Linux作業系統軟體包不僅包括完整的Linux作業系統,而且還包括了文字編輯器、高階語言編譯器等應用軟體。它還包括帶有多個視窗管理器的X-Windows圖形使用者介面,如同我們使用Windows NT一樣,允許我們使用視窗、圖示和選單對系統進行操作。

自學站點推薦:

  1. https://www.icourse163.org/(慕課)
    1. https://www.icourse163.org/search.htm?search=linux#/
  2. https://cn.netacad.com/(思科)
  3. https://www.educoder.net/(線上實訓)
    1. https://www.educoder.net/shixuns?id=16&type=sub&palce=6
  4. https://www.linuxprobe.com/(Linux培訓,Linux就該這麼學,資源多)
  5. https://www.fujieace.com/linux/man/china-man.html(命令查詢)

開源協議

主要流行的開原協議有六種:GPL、BSD、MIT、MPL(Mozilla)、Apache和LGPL,需要記住的是開源不等於免費,開源也不等於沒有約束

  1. 簡單寬鬆的協議
    如果你怕麻煩只想要一個簡單協議,MIT協議相對寬鬆但抓住了要點,此協議允許別人以任何方式使用你的程式碼同時署名原作者,但原作者不承擔程式碼使用後的風險,當然也沒有技術支援的義務,jQuery和Rails就是MIT協議。

  2. 有專利的需求
    如果你的作品中涉及到專利相關,Apache協議也是個相對寬鬆與MIT類似的協議,但它簡單指明瞭作品歸屬者的著作權,Apache伺服器,SVN還有NuGet等是使用的Apache協議。

  3. 程式碼分享與促進

    如果你在乎作品的傳播和別人的修改,希望別人也以相同的協議分享出來。GPL(V2或V3)是一種版本自由的協議(可以參照copy right來理解,後者是版本保留,那copyleft便是版權自由,或者無版權,但無版權不代表你可以不遵守軟體中宣告的協議)。此協議要求程式碼分發者或者以此程式碼為基礎開發出來的衍生作品需要以同樣的協議來發布。

參考資料:

  1. http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
  2. https://www.zhihu.com/question/28292322/answer/222922925
  3. https://choosealicense.com/

三種軟體模式

  • 商業軟體
    • 由開發者出售拷貝並提供軟體技術服務,使用者只有使用權, 但不得進行非法拷貝、擴散和修改
  • 共享軟體
    • 共享軟體由開發者提供試用程式拷貝授權,使用者在使用該程式拷貝一段時間之後,必須向開發者繳納使用費,開發者則提供相應的升級和技術服務
  • 自由軟體
    • 自由軟體所指稱的軟體,其使用者有使用、複製、散佈、研究、改寫、再利用該軟體的自由
    • 自由軟體的創始人:Richard M.Stallman,他是黑客歷史上最偉大的黑客,被稱為黑客中的聖者

什麼是作業系統

作業系統(Operating Ststem,簡稱OS)傳統上是負責對電腦硬體直接控制及管理的系統軟體

  • 作業系統的功能一般包括處理器管理、儲存管理、檔案管理、裝置管理和作業管理等
  • 當多個程式同時執行時,作業系統負責規劃以及優化每個程式的處理時間

對計算機系統而言,作業系統是對所有系統資源進行管理的程式的集合;對使用者而言,作業系統提供了對系統資源進行有效利用的簡單抽象的方法

Linux系統

Linux是個類Unix的系統,同時他是一個自由軟體,是免費的、原始碼開放的,編制他的目的是簡歷不受任何商業化軟體版權制約的、全世界都能自由使用的UNIX相容產品,穩定可靠本課主要以centos為主

雖然常被稱為Linux,但他們應該更準確的被稱為GNU/Linux

特點

  • 開放性的系統
  • 多使用者多工的系統
  • 具有出色的穩定性和速度效能
  • 具有可靠的系統安全性
  • 提供了豐富的網路功能
  • 標準相容性和可移植性
  • 提供了良好的使用者介面

組成

  • Linux核心

    核心原始碼:https://www.kernel.org/,核心(Kernel)是系統的心臟,實現作業系統的基本功能

  • Linux Shell:shell是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面

  • LInux應用程式:包括文字編輯器、程式語言、window、辦公套件、Internet工具、資料庫等

  • Linux檔案系統:檔案系統是檔案存放在磁碟等儲存裝置上的組織辦法。通常是按照目錄層次方式進行組織。系統以/為根目錄

核心版本

主流Linux發行套件

主要分redhat紅帽類和debian類,目前主流為紅帽7

  • redhat(伺服器)

    redhat.com

    免費開放下載安裝,但不能自動更新以及後期問題技術解決支援

    收費專案:

    • 自動更新漏洞
    • 後期問題技術解決支援
  • centos(伺服器)

    北美Linux愛好者們製作而成,與紅帽幾乎相等,支援自動更新,但無技術支援(已被紅帽收購)

  • defora(個人)

    介面友好,常用作進入軟體redhat前的測試(紅帽旗下)

  • Ubuntu

    介面友好(debian類)

課後作業:站點推薦的檢視與環境下載與搭建centos7

安裝使用:virtualbox 或 vmware workstation

具體檔案結構

  1. /:根目錄,所有的目錄、檔案、裝置都在/之下,/就是Linux檔案系統的組織者,也是最上級的領導者。
  2. /bin:bin 就是二進位制(binary)英文縮寫。在一般的系統當中,都可以在這個目錄下找到linux常用的命令。系統所需要的那些命令位於此目錄。
  3. /boot:Linux的核心及引導系統程式所需要的檔案目錄,比如 vmlinuz initrd.img 檔案都位於這個目錄中。在一般情況下,GRUB或LILO系統引導管理器也位於這個目錄。
  4. /cdrom:這個目錄在剛剛安裝系統的時候是空的。可以將光碟機檔案系統掛在這個目錄下。例如:mount /dev/cdrom /cdrom
  5. /dev:dev 是裝置(device)的英文縮寫。這個目錄對所有的使用者都十分重要。因為在這個目錄中包含了所有linux系統中使用的外部裝置。但是這裡並不是放的外部裝置的驅動程式。這一點和常用的windows,dos作業系統不一樣。它實際上是一個訪問這些外部裝置的埠。可以非常方便地去訪問這些外部裝置,和訪問一個檔案,一個目錄沒有任何區別。
  6. /etc:etc這個目錄是linux系統中最重要的目錄之一。在這個目錄下存放了系統管理時要用到的各種配置檔案和子目錄。要用到的網路配置檔案,檔案系統,x系統配置檔案,裝置配置資訊,設定使用者資訊等都在這個目錄下。
  7. /home:如果建立一個使用者,使用者名稱是"xx",那麼在/home目錄下就有一個對應的/home/xx路徑,用來存放使用者的主目錄。
  8. /lib:lib是庫(library)英文縮寫。這個目錄是用來存放系統動態連線共享庫的。幾乎所有的應用程式都會用到這個目錄下的共享庫。因此,千萬不要輕易對這個目錄進行什麼操作,一旦發生問題,系統就不能工作了。
  9. /lost+found:在ext2或ext3檔案系統中,當系統意外崩潰或機器意外關機,而產生一些檔案碎片放在這裡。當系統啟動的過程中fsck工具會檢查這裡,並修復已經損壞的檔案系統。有時系統發生問題,有很多的檔案被移到這個目錄中,可能會用手工的方式來修復,或移到檔案到原來的位置上。
  10. /mnt:這個目錄一般是用於存放掛載儲存裝置的掛載目錄的,比如有cdrom等目錄。可以參看/etc/fstab的定義。
  11. /media:有些linux的發行版使用這個目錄來掛載那些usb介面的行動硬碟(包括U盤)、CD/DVD驅動器等等。
  12. /opt:這裡主要存放那些可選的程式。
  13. /proc:可以在這個目錄下獲取系統資訊。這些資訊是在記憶體中,由系統自己產生的。
  14. /root:Linux超級許可權使用者root的家目錄。
  15. /sbin:這個目錄是用來存放系統管理員的系統管理程式。大多是涉及系統管理的命令的存放,是超級許可權使用者root的可執行命令存放地,普通使用者無許可權執行這個目錄下的命令,這個目錄和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目錄是相似的,凡是目錄sbin中包含的都是root許可權才能執行的。
  16. /selinux :對SElinux的一些配置檔案目錄,SElinux可以讓linux更加安全。
  17. /srv: 服務啟動後,所需訪問的資料目錄,舉個例子來說,www服務啟動讀取的網頁資料就可以放在/srv/www中
  18. /tmp:臨時檔案目錄,用來存放不同程式執行時產生的臨時檔案。有時使用者執行程式的時候,會產生臨時檔案。/tmp就用來存放臨時檔案的。/var/tmp目錄和這個目錄相似。
  19. /usr:這是linux系統中佔用硬碟空間最大的目錄。使用者的很多應用程式和檔案都存放在這個目錄下。在這個目錄下,可以找到那些不適合放在/bin或/etc目錄下的額外的工具
  20. /usr/local:這裡主要存放那些手動安裝的軟體,即不是通過“新立得”或apt-get安裝的軟體。它和/usr目錄具有相類似的目錄結構。讓軟體包管理器來管理/usr目錄,而把自定義的指令碼(scripts)放到/usr/local目錄下面、。
  21. /usr/share :系統共用的東西存放地,比如 /usr/share/fonts 是字型目錄,/usr/share/doc和/usr/share/man幫助檔案。
  22. /var:這個目錄的內容是經常變動的,看名字就知道,可以理解為vary的縮寫,/var下有/var/log 這是用來存放系統日誌的目錄。/var/ www目錄是定義Apache伺服器站點存放目錄;/var/lib 用來存放一些庫檔案,比如MySQL的,以及MySQL資料庫的的存放地。

安裝與詳解

2020/3/12

  • 虛擬機器如果出現虛擬機器被鎖定,可以去虛擬機器儲存的目錄中將.lck的檔案刪除
  • 系統版本介紹
    • DVD 標準版(推薦用這個)4G
    • Everything 完整版本10G
    • LiveKDE 體驗版1G
    • Minnimal 最小安裝包0.9G
    • NetInstall 網路安裝0.5G
  • 我們可以在映象站中選擇下載,下面介紹的安裝過程是用了網易的centOS的DVD標準版,http://mirrors.163.com/centos/7.7.1908/isos/x86_64/

安裝過程

首先我們新建虛擬機器,這裡最好用自定義來安裝

選擇硬體相容性這裡越高越好

這裡我們使用稍後安裝作業系統

選擇Linux,並選擇對應的版本

這裡選擇安裝的位置以及在VM中顯示的名稱

為虛擬機器指定的處理器(CPU)數量

為其分配的記憶體

為其分配磁碟大小,為了後期的操作越大越好,接下來都是預設下一步即可

完成之後選擇編輯虛擬機器設定添加掛載光碟映象

點選CD/DVD(IDE)這裡推薦使用centOS DVD即標準版,你也可以使用Everything的版本,選擇好之後點選完成並開啟虛擬機器

開啟虛擬機器之後會讓你選擇安裝還是測試,這裡選擇第一個安裝install CentOS即可

這裡可能需要你按下回車鍵,然後等待一會

進入了安裝介面進行配置,為了體驗良好可以選擇中文安裝,這裡選擇中文在安裝的時候是中文,安裝完成之後也自動會是中文,點選繼續

之後等待一會,這裡的安裝源就是我們的iso檔案,右邊的軟體選擇它預設是最小安裝,如果選擇了最小安裝,安裝之後是沒有影象介面的,如果想安裝帶有GUI姐買你的話這裡就需要點選軟體選擇

然後選擇帶GUI的伺服器,點選完成即可

之後點選安裝位置,這是具體分割槽,我們使用自動配置完成即可

然後點選KDUMP,將其取消,點選完成

最後配置網路設定,這裡需要視具體情況配置,配置虛擬機器的時候使用了NAT,所以直接配置自動獲取就好,假如你使用了橋接的方式則需要根據區域網的配置進行手動獲自動配置,完成之後你也可以更改下面的主機名,記得點選應用然後完成開始安裝

安裝過程中你需要配置一個root密碼(記得設定得複雜點),因為在平時操作中我們都是用普通使用者去登入所以建議再建立一個使用者

配置好之後等待安裝完成,安裝好之後會讓你選擇重啟計算機,點選重啟

等待重啟完成之後會讓你同意開源協議,點進去同意即可,然後點選完成配置

此時已經配置完成了,點選登入你剛剛建立的使用者登入或選擇未列出使用root即可進入帶有圖形介面的centOS

在GUI的介面可以和字元介面進行互換

詳解

影象介面在linux中也只是一個程式

如果是最小化安裝則是純命令列的模式,伺服器的安全級別比較高的話也是純命令列的模式

安裝好圖形介面可以自由切換命令列的圖形介面

字元介面轉圖形介面:init 3

Linux工作介面

Linux的工作介面有兩種:字元介面與圖形介面

字元介面

  • 使用字元介面的好處

    • 在字元操作方式下可以高效的完成所有的任務,尤其是系統管理任務

    • 系統管理任務通常在遠端進行,而遠端登入後進入的是字元工作方式

    • 由於使用字元介面不用啟動圖形工作環境,大大的節省了系統資源開銷

  • 如何進入字元介面

    • 在圖形環境下開啟終端視窗進入字元介面的方式
    • 在系統啟動後直接進入字元工作方式
    • 使用遠端登入方式(Telnet或SSH)進入字元工作方式
    • 字元介面登入與登出
      • 虛擬控制檯(Virtual Console)
        • 系統預設提供了6個虛擬控制檯。每個虛擬控制檯可以獨立的使用,互不影響
        • 使用Alt+F1~Alt+F6進行多個虛擬控制檯之間的切換
      • 登入提示符
        • 超級使用者登入後的操作提示符是:#
        • 普通使用者登入後的操作提示符是:$
      • 登出
        • logout命令
        • Ctrl+D熱鍵
  • 注意:一般應該使用普通使用者登入系統,不要使用root使用者登入,當需要進行超級使用者工作時可以使用su - 命令切換為超級使用者身份

  • 在Linux環境下使用SSH遠端登入Linux

    • ssh:Secure shell
    • 使用者在通過ssh連線到遠端系統時在網路上傳輸的口令和資料都是經過加密的,比傳統的telnet遠端登入更加安全
    • ssh的使用方法:
  • 在Windows環境下使用putty遠端登入Linux

    • 在putty中支援telnet、ssh、rlogin等連線方式
  • 獲取幫組:

    • 字元介面:
      • help:獲得bash的內部命令棒子
      • man:獲得手冊頁幫助(推出man按q即可)
        • $ man passwd
        • $ man 5 passwd
        • $ man -k selinux
      • info:獲得texinfo文件幫助(推出info按q即可)
      • pinfo:獲得texinfo文件幫助
      • wh*命令
        • $ whatis ls
        • $ whereis ls
        • $ whichis ls

圖形介面

在使用環境中圖形介面雖然友好,但是非常耗費系統資源,而且圖形介面存在的安全漏洞也更多

  • 兩種桌面整合環境
    • Gnome整合環境
      • 獲得幫助:
        • tylp:瀏覽幫助文件
    • KDE整合環境

shell

概念

shell是使用者和Linux核心之間的介面程式,為使用者提供使用作業系統的操作介面。他是一種基於傳統字元介面的作業系統,與DOS有幾分類似,在Linux系統中具有極其重要的地位
Shell是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面。它接收使用者輸入的命令並把它送入核心去執行。實際上Shell是一個命令直譯器,它解釋由使用者輸入的命令並且把它們送到核心。不僅如此,Shell有自己的程式語言用於對命令的編輯,它允許使用者編寫由shell命令組成的程式。Shell程式語言具有普通程式語言的很多特點,比如它也有迴圈結構和分支控制結構等,用這種程式語言編寫的Shell程式與其他應用程式具有同樣的效果。同Linux本身一樣,Shell也有多種不同的版本。目前主要有下列版本的Shell: Bourne Shell:是貝爾實驗室開發的。

  • BASH:是GNU的Bourne Again Shell,是GNU作業系統上預設的shell。
  • Korn Shell:是對Bourne SHell的發展,在大部分內容上與Bourne Shell相容。
  • C Shell:是SUN公司Shell的BSD版本。
  • Z Shell:The last shell you’ll ever need! Z是最後一個字母,也就是終極Shell。它集成了bash、ksh的重要特性,同時又增加了自己獨有的特性。

功能

  • 進行命令解釋
  • 解釋型的程式設計語言

shell種類

  • Bourne shell (sh)
  • C shell (csh)
  • Korn shell (ksh)

虛擬終端的作用

  • 當在系統啟動時直接進入字元工作方式後,系統提供了多個虛擬控制檯。每個虛擬控制檯可以獨立使用,互不影響
  • 虛擬控制檯使得 Linux成為一個真正的多使用者作業系統。在不同的控制檯上,可以同時接受多個使用者登入;也允許一個使用者進行多次登入。
  • 虛擬控制檯之間的切換
    • alt+f1~alt+f6
    • ctrl+alt+f1~ctrl+alt+f6(使用者使用startx命令在字元介面下啟動了圖形環境時切換字元虛擬終端的方式,使用ctrl+alrt+f7切換到圖形介面)

X Window概念和作用

一套Unix共通的圖形介面標準,複合X Window協定的軟體都可以在任何X Window上顯示,執行與顯示獨立運作

人性化桌面環境:Gnome與KDE

GNOME桌面圖示的作用

GNOME是GNU網路物件模型環境(GNU Network Object Model Environment)的縮寫,他是GNU專案的一部分,是完全開放原始碼的自由軟體

在Red Hat Linux系統中,已經將GNOME作為預設的桌面管理器

KDE桌面

KDE桌面環境( K desktopnvi ronment)是使用圖示、視窗、選單和麵板之類常用圖形化物件的圖形化桌面。KDE的外觀、操作和 Windows非常相似,大大降低了 Linux使用者的學習難度,同時在穩定性上KDE也非常出色

其他

關機

  • shutdown或shutdown -h now/+n(立即或n分鐘後關閉系統)
  • halt:關閉系統(其實就是呼叫shutdown -h)
  • intit 0

重啟

  • shutdown -r
  • inti 6
  • reboot

PV-VG-LV的裝置名

含義 裝置名
PV 物理卷:磁碟或分割槽 /dev/dsa
VG 卷組:一組磁碟 和/或 分割槽 /dev/<VG name>(目錄)
LV 邏輯卷:LVM分割槽 /dev/<VF name>/<LV name>

系統資料夾

位置 說明
/bin 存放所有使用者可以使用的目錄
/sbin 存放只有系統管理員可以使用的目錄
/boot 用於存放於系統啟動相關的檔案
/dev 裝置檔案存放位置
/etc 配置檔案存放位置
/home 普通使用者家目錄
/lib 使用者存放系統的動態連結庫
/mnt 移動儲存介質的預設掛載點
/root root使用者家目錄。
/proc 位於記憶體中的核心資訊
/tmp 用於存放各種臨時檔案
/var 用於存放經常變化的檔案

每一個使用者都有自己的主目錄(家目錄),主目錄與根目錄不一樣

檔案路徑

linux的路徑採用/開始,資料夾在建立中儘量避免使用 空格,因為空格在shell中是作為分隔符使用

  • rpm的絕對路徑是從/usr/lib/rpm
  • 從usr到rpm的相對路徑是:./lib/rpmvcvcvvvc

絕對路徑與相對路徑

  1. 檢視當前所在的路徑的命令:pwd
  2. 如果想切換到/etc/目錄應使用:cd /etc
  3. 回到上次所在目錄:cd -
  4. 回到主目錄:cd
  5. 切換到根目錄:cd /
  6. 切換到上級目錄:cd ..
  7. 若當前位於/etc/stsconfig/network-scripts/warpper目錄下如何快速回到/etc/stsconfig目錄下:cd ../..

Linux命令介紹

2020/03/17

虛擬機器中linux系統匯出ova檔案放到一個地方

在雲平臺中當用戶需要一個虛擬機器的時候,就可以通過這種ova的方法快速給使用者建立一個虛擬系統

圖形介面與字元介面

圖形介面非常消耗系統資源且安全漏洞較多

大小寫區分

inux系統中命令區分大小寫,windows中區分大小寫,如果在windows中建立資料夾,大小寫相同的資料夾將報錯,在linux中複製a和A的資料夾到windows會報錯!

shell

在shell中是作為分隔符使用,shell也能算是程式設計的一種

Linux常用命令

獲取幫助

man

man [命令]

-h

[命令] -h / --help

help

help [命令]

info

info [命令]

百度/谷歌

init

所謂的init程序,它是一個由核心啟動的使用者級程序。

核心自行啟動(已經被載入記憶體,開始執行,並已初始化所有的裝置驅動程式和資料結構等)之後,就通過啟動一個使用者級程式init的方式,完成引導程序。所以,init始終是第一個程序(其程序編號始終為1)。

核心會在過去曾使用過init的幾個地方查詢它,它的正確位置(對Linux系統來說)是/sbin/init。如果核心找不到init,它就會試著執行/bin/sh,如果執行失敗,系統的啟動也會失敗

  • init一共分為7個級別,這7個級別的所代表的含義如下
  • 0:停機或者關機(千萬不能將initdefault設定為0)
  • 1:單使用者模式,只root使用者進行維護
  • 2:多使用者模式,不能使用NFS(Net File System)
  • 3:完全多使用者模式(標準的執行級別)
  • 4:安全模式
  • 5:圖形化(即圖形介面)
  • 6:重啟(千萬不要把initdefault設定為6)

系統關機或重啟或切換字元介面

通過快捷鍵切換圖形與字元視窗

ctrl+alt+[f1~F6]按這個快捷鍵可以快速的進入其他視窗進行測試

從GUI介面切換字元介面

在終端內輸入:init 3

從字元介面切換到字元介面

在終端內輸入:init 5

init 5和startx的區別

 使用init 5 切換到執行級別5和使用startx登入圖形介面看起來差不多,其實差別挺大的。最主要的差別就是語系,你可能發現你設定的環境是中文的,但是startx後系統桌面環境變成英文的了,並且輸入法也調不出來了。

  • startx是單純的以執行命令者的身份啟動X圖形介面,環境變數是當前身份的。任意使用者可以執行。
  • init 5 切換到執行級別5,則是啟動 runlevel 5所對應的服務,並執行圖形登入管理器,由使用者選擇以何種身份登入。該操作是有重新啟動系統服務的,需要重新輸入使用者名稱和密碼登陸。只有root有權執行。

  可以用chkconfig --list |more 檢視在runlevel 5上啟動的服務,和用ps -aux檢視在startx啟動時執行服務資訊對比即知.startx只是在原執行級別基礎上載入了圖形,而init 5除了圖形外還有

logout

登出推出當前使用者視窗

exit

登出推出當前使用者視窗,和ctrl+d差不多,與windows的ctrl+w類似

shutdown

shutdown會給系統計劃一個時間關機,它可以被用於停止、關機、重啟機器,也可以在後面新增引數進行指定關機的操作

shutdown
shutdown now	 ### 立刻關機
shutdown 13:20   ### 在指定小時/分鐘關機,額外地,你也可以設定一個廣播資訊在系統關閉前傳送給所有已登入的使用者。
shutdown -p now  ### 關閉機器
shutdown -H now  ### 停止機器      
shutdown -r09:35 ### 在 09:35am 重啟機器
shutdown -h now	 ### 立刻關機(生產常用)
shutdown -h +1   ### 一分鐘後關閉

如果下取消即將進行的關機,只需要在下面輸入

shutdown -c

halt

halt是通知硬體來停止所有CPU功能,但是仍然保持通電。你可以用它使系統處於地層維護狀態,但是注意有些情況會讓他完全關閉系統

halt			### 停止機器
halt -p 		### 關閉機器
halt --reboot	### 重啟機器

poweroff

如同名字一般,poweroff會發送一個ACPI習慣好來通知系統關閉

poweroff			### 關閉機器
poweroff --halt		### 停止機器
poweroff --reboot	### 重啟機器

reboot

這個也和名字一樣,通知系統重啟

reboot			### 重啟機器
reboot --halt	### 停止機器
rebopt -p		### 關閉機器

目錄管理與檔案管理

Linux與windows不同,linux是從/根目錄開始的,windows是從碟符開始,在Linux中的絕對路徑與相對路徑的寫法是如何呢?下面先吧目錄結構打出來

|-- /					# 根目錄
|   |--root				# 資料夾
|   |  |--a				# 資料夾
|   |  |  |--b			# 資料夾
|   |  |  |--D			# 資料夾
|   |  |  |  |--C		# 文字檔案

絕對路徑

假設當前檔案位置為/root/a/d要切換到/root/a/b中,切換路徑時使用的絕對路徑的命令為:cd /root/a/b

相對路徑

假設當前檔案位置為/root/a/b要切換到/root 中,切換路徑時使用的相對路徑的命令為:cd ../../

ls

  • 簡介:列出目錄內容,與ls, dir, vdir類似

  • 命令:ls [-選項] [檔名...]
    記得後面的引數要新增空格

    命令 解釋
    ls 直接使用ls命令出來的結果是列出當前目錄下的檔案與資料夾,其中藍色的是目錄,黑色的是檔案
    ls -a 是顯示所有檔案及目錄,包括隱藏檔案(隱藏檔案一般以“.“點號開頭)
    ls -d 是將目錄名像其他檔案一樣列出,而不是列出他們的內容
    ls -l 除檔名稱外,亦將檔案型態、許可權、擁有者、檔案大小等資訊詳細列出
    ls -A -A同-a,但不列出“.”(當前目錄)及“。。”(父目錄)
# 顯示a資料夾內的內容
[root@centos /]# ls -l a
總用量 4
-r-xr--rw-. 1 bit  bit    0 4月   1 21:57 a.txt
drwxr-xr-x. 2 root root  19 4月   1 18:16 b
-rw-r--r--. 1 root root 204 4月   1 21:46 b.txt
drwxr-xr-x. 2 root root  19 4月   1 18:16 c
# 顯示a資料夾
[root@centos /]# ls -ld a
drwxrwsrwx. 4 root root 50 4月   1 21:48 a

cd

  • 切換當前路徑
  • 命令:cd [dirName]
  • cd ~ 跳轉到自己的home目錄
  • cd ../.. 跳轉目前目錄的上兩層

pwd

  • 顯示目前的目錄

mkdir

  • 新加一個資料夾

  • mkdir [-p] 資料夾名
    在Linux中是區分大小寫的所以檔名使用A和a都可以,但是在windows下是不行的

  • mkdir -p 確保目錄名稱存在,不存在就建一個

    mkdir -p a/aa/aaa/aaaa使用這個方式可以一次新建多個資料夾目錄

rmdir

  • 刪除一個空的目錄,若資料夾非空則無法刪除
  • rmdir [-p] 檔名
  • rmdir -p當子目錄被刪除後使它也成為空目錄的話,則一併刪除
    • 加入在資料夾B裡面有個檔案C,如果命令為rmdir -p B/C則此時B和C都會被刪除

cp

  • 複製檔案或資料夾
  • cp [引數] 原始檔 目的地址

    多個檔案cp [引數] 原始檔... 目的地址
  • copy複製檔案,從哪到哪,建議使用tab鍵自動補齊
    • 假如由資料夾b與d,資料夾b裡面有一個檔案c,此時在b裡面使用cp c ../d則可以複製檔案到d裡
  • cp /etc/*.conf /home/a一鍵複製目錄下多個字尾的檔案到指定目錄/home/a
    cp /etc/a*.conf ../../a將以a開頭的conf檔案複製到上兩層的a資料夾中

rm

  • 刪除檔案或目錄

  • rm [引數] 檔名|資料夾

引數 解釋
-i 刪除前逐一詢問確認
-f 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確定
-r 將目錄及以下之檔案亦逐一刪除
  • 刪除資料夾

mv

  • 移動(改名)檔案
  • 命令:mv [S原始檔] [替換的名字 | D目的資料夾]
  • 改名:將檔案d改為dddd
    • mv d dddd
  • 移動:將檔案d移動到上一層的資料夾a裡
    • mv d ../a

cat

  • 連線檔案並在標準輸出上輸出,cat可以建立或者預覽檔案

  • 命令:cat [option] [檔名]

  • [option]

    命令 解釋
    -b 對非空輸出行編號
    -E 在每行結束處顯示“$”
    -n 輸出所有行的編號
    -s 不輸出多行空行
  • 如果當前目錄中沒有所輸入的這個檔案則會自動建立一個

  • cat > filename 將下面內容輸出到filename這個檔案,跳到下一行再按ctrl+c可退出

  • cat filename1 filename2 > filename3 將filename1和filename2的內容輸出到filename3中

  • cat filename1 >> filename2將file1的檔案內容附加到file2的檔案後面,而file2的內容孩子

  • -E 在每行的結束處輸出一個”$”

  • -n 輸出所有行的編號

重定向>與>>

>

我們將檔案ab列印到終端上,如何使用cat >命令進行覆寫,在後面寫完之後按ctrl+c就可以看到後面輸出了之前我們輸入的內容

>>

接著上面的內容我們將ab這個檔案的後面追加一些文字,追加的內容是從最後的下一行開始新增

tac

從最後一行開始現實,可以看到tac是cat的倒寫

touch

  • touch可以建立一個空檔案,也可以更改檔案的時間
  • 命令:touch [檔名] -[引數]
    • -t [[ CC] YY] MMDDhhmm[ .ss]
  • touch wenjianjia
  • touch wenjianjia -t 03171637
    更改時間為三月17日16:37

nl

顯示的時候,順便輸出行號

more

一頁一頁的顯示檔案內容,但是不能往前翻

less

與more類似,但是比more更好的是它可以往前翻頁

  • 輸入了less之後可以用滾輪滑動檢視,按q可推出

只看開頭幾行

tail

只看返回結尾的幾行

  • tail -num filename
    tail-1 filename 則顯示filename的最後一行,-2則顯示左後兩行

grep

  • 列印匹配給定模式的行
  • 命令:cat [檔名] | grep [正則表示式]

小技巧

在複製移動重新命名都可以使用絕對路徑和相對路徑

一次新建多個資料夾mkdir -p a/aa/aaa/aaaa

一次複製目錄下多個字尾檔案cp /etc/*.conf /home/a
你也可以複製目錄下以a開頭的.conf檔案:cp /etc/a*.conf /home/a

重新命名 mv anaconda- ff.txt aa.txt

重定向,不將其輸出至螢幕,而是輸出到指定的檔案內

例如將ls -l的輸出結果輸出到指定的檔案內ls -l aa.txt

壓縮與歸檔

壓縮

前三個都會將單獨的檔案壓縮,會將原來的檔案給刪除

gzip

  • 壓縮每個單獨檔案,並將原始檔刪除,字尾為gz

命令:

gzip [name] 壓縮name這個檔案
注意在壓縮的時候
gzip *.conf`

gunzip name.gz解壓name.gz這個檔案

bzip2

  • 壓縮每個單獨檔案,並將原始檔刪除,字尾為bz2

bzip2 name壓縮name這個檔案

bunzip2 name.bz2 解壓name.bz2這個檔案

xz

壓縮每個單獨檔案,並將原始檔刪除,字尾為xz

  • xz a.txt壓縮a.txt這個檔案
  • unxz a.txt.xz解壓a.txt這個檔案

注意上下不同,上面為每個單獨壓縮,下面為每個壓縮成單個檔案

zip

  • 壓縮多個檔案成單獨的一個檔案,字尾為zip

zip name.zip a*.conf 壓縮檔名為name.zip,壓縮所有a開頭的conf檔案

  • zip name.zip a.conf b.txt單獨選取多個檔案

  • unzip new.zip將new.zip解壓縮,若有重複則會詢問是否覆蓋

歸檔

歸檔只負責吧多個檔案歸類串聯起來,本身不負責壓縮,不過你可以新增引數進行歸檔與壓縮成指定格式的壓縮檔案

tar

將檔案歸檔

tar命令選項說明:

  • -c :建立一個壓縮檔案的引數指令(create 的意思);

    歸檔組合使用,壓縮歸檔檔案會使用到這個

  • -x :解開一個壓縮檔案的引數指令!

    解壓組合使用,解壓歸檔檔案會使用到這個

  • -t :檢視 tarfile 裡面的檔案!

    • 特別注意,在引數的下達中, c/x/t 僅能存在一個!不可同時存在!因為不可能同時壓縮與解壓縮。
  • -z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?

  • -j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?

  • -v :壓縮的過程中顯示檔案!這個常用,但不建議用在背景執行過程!

  • -f :檔名,請留意,在 f 之後要立即接檔名!不要再加引數!

  • -j 用 bzip2 壓縮或解壓

壓縮

tar

tar -cvf new.tar a.*
c:建立一個壓縮檔案的引數指令
v:顯示過程
f:檔名為new.tar

gz

tar -czf a.tar.gz ./
c:建立一個壓縮檔案的引數指令
z:生成一個gzip壓縮過的包
f:檔名為new.tar

bz2

tar -cjf a.tar.bz2 ./
c:建立一個壓縮檔案的引數指令
j:生成一個bzip2壓縮過的包
f:檔名為new.tar

解壓

tar

tar -xvf new.tar a.*
x:解開一個壓縮檔案的引數指令
v:顯示過程
f:檔名為new.tar

gz

tar -xzvf a.tar.gz ./
x:解開一個壓縮檔案的引數指令
z:解開一個gzip壓縮過的包
v:顯示過程
f:檔名為new.tar

bz2

tar -xjvf a.tar.bz2 ./
x:解開一個壓縮檔案的引數指令
j:解開一個bzip2壓縮過的包
v:顯示過程
f:檔名為new.tar

其他

switch

編輯器

常用的文字編輯器

  • Vi(Vim)
  • nano
  • emacs
  • gedit

VI(建議)

vim是vi的升級版,目前大多都是使用VIM,

  • Vim是彩色的,Vi是黑白的
  • Vi每個系統都會有,但是Vim不一定有,Vi與Vim是不同的!

直接輸入vi就可以開始編輯新的檔案

三種模式

  • 普通模式
  • 插入模式
  • 命令模式

普通模式(檢視模式、normal模式)

  • vi [filename] 如果當前路徑存在則檢視,不存在則新建檢視的狀態(read)
  • esc鍵可以進入檢視模式
基本操作
  • G 用於直接跳轉到檔案末尾
  • gg 用於直接跳轉到檔案頭
  • x刪除游標所在的字元 (單獨)
  • r替換游標所在的字元(單獨)
  • ~切換游標所在字母的大小寫(單獨)
  • u取消上一次編輯操作(undo)
  • .重複上一步編輯操作(redo)
  • ZZ用於存檔推出Vi
  • ZQ用於不存檔推出Vi

插入模式(編輯模式)

  • i (insert)插入狀態
  • a 追加模式

命令模式

在下面有獨立一行用作輸入命令

基本命令
  • :w儲存
  • :w newfile存為另一個名為newfile的檔案
  • :wq儲存並退出Vi
  • :q用於直接退出Vi(僅限未作修改的時候推出)
  • q!不儲存並退出Vi(強制退出)
  • :set number 顯示行號
  • :set nonumber不顯示行號
  • :set autoindent縮排,常用於程式的編寫
  • :set noautoindent取消縮排
  • :set tabstop=num設定顯示製表符的空格字元個數
  • :set顯示設定的所有選項
  • :set all 顯示所有可以設定的選項

Nano(不建議)

  • 有的系統有有的沒有
  • 命令列

emacs(不建議)

  • 有的系統有有的沒有
  • 命令列

gedit(不建議)

  • 有圖形介面的文字編輯器,類似於windows下的記事本
  • 有的系統有有的沒有

Linux的遠端管理

命令列介面

SSH

ssh (secure shell),linux預設安裝並開啟的服務
ststemctl status sshd(檢視系統sshd狀態)
SSH 為 Secure Shell 的縮寫,由 IETF 的網路小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH 是較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠端管理過程中的資訊洩露問題。SSH最初是UNIX系統上的一個程式,後來又迅速擴充套件到其他操作平臺。SSH在正確使用時可彌補網路中的漏洞。SSH客戶端適用於多種平臺。幾乎所有UNIX平臺—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平臺,都可執行SSH。

  • 服務端openssh
  • 客戶端putty或xshell

預設已經安裝了openssh-server服務,並啟動

如何使用金鑰免密連線Linux系統?

  1. 用puttygen或xshell產生一對金鑰

    公鑰、金鑰

    公鑰:傳到linux伺服器上
    私鑰:自己儲存

  2. 將公鑰傳輸到linux系統使用者的家目錄ssh/下.檔名稱為authorized_key
    如何傳檔案到linux?可以用sftp

  3. 在客戶端工具中設定用金鑰進行身份驗證

圖形介面

  1. VNC(tigervnc[服務端]、vnc客戶端)

    VNC (Virtual Network Console/compute )是虛擬網路控制檯(虛擬網路計算)的縮寫。它是一款優秀的遠端控制工具軟體,由著名的 AT&T 的歐洲研究實驗室開發的。VNC 是在基於 UNIX 和 Linux 作業系統的免費的開源軟體,遠端控制能力強大,高效實用,其效能可以和 Windows 和 MAC 中的任何遠端控制軟體媲美。 在 Linux 中,VNC 包括以下四個命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多數情況下使用者只需要其中的兩個命令:vncserver 和 vncviewer。
    條件:linux系統應安裝影象介面
    vnc虛擬網路控制檯
    VNC服務
    VNC客戶端
    預設已安裝但是沒有配置

  2. WEB網站的安裝
    webmin(推薦瞭解)
    redhat8系統自帶cockpit

使用金鑰進行身份驗證

參考:https://www.cnblogs.com/dudumao/p/7456208.html

  • 使用xshell生成公鑰,點選工具>新建使用者金鑰生成嚮導

  • 生產金鑰引數預設即可,然後點選下一步進行生成公鑰對,生成好了點選下一步

  • 到了使用者金鑰資訊,金鑰名稱可改或不改,但是不能和已有的重複,密碼可以留空,不過建議還是填寫,填好了就下一步(記得別按完成)

  • 到了公鑰註冊這一步就需要將公鑰儲存為檔案通過ftp傳輸到linux上

  • 接下來轉到linux上操作:

    • 這裡我們預設新建一個新使用者bit

      [root@centos]# useradd bit
      [root@centos]# passwd bit
      
    • 進入管理員模式並在bit使用者資料夾內操作檔案並將公鑰寫入一個檔案中

      [root@centos]# su bit
      [root@centos]$ mkdir .ssh
      [root@centos]$ chmod 700 .ssh/
      [root@centos]$ cd .ssh/
      [root@centos]$ cat id_rsa_1024.pub > authorized_keys
      [root@centos]$ chmod 600 authorized_keys
      [root@centos]$ su -
      
    • 用vim修改ssh部分引數,並重啟ssh服務

      [root@centos]# vim /etc/ssh/sshd_config
      # 以下是修改的內容
      PasswordAuthentication no
      PubkeyAuthentication yes
      AuthorizedKeysFile  .ssh/authorized_keys
      # 以上是修改的內容
      [root@centos]# service sshd resetart
      
    • 接下來在xshell中將連線的屬性>使用者省份驗證>方法改為Public key使用者名稱改為上面寫的bit,選擇剛剛新建的使用者金鑰並輸入上面輸入的密碼

使用VNC進行圖形介面連線

參考:https://jingyan.baidu.com/article/eb9f7b6d5ff296869264e858.html

安裝VNC

yum install vnc-server -y

配置VNC

  • vncserver 安裝完畢後輸入“vncserver”啟動VNC設定密碼,注意:啟動後將自動在user/.vnc目錄下建立xstartup檔案

  • vim /root/.vnc/xstartup在最後面新增下面內容後按esc後輸入:wq儲存並退出

    VNCSERVERS="Z:root"
    VNCSERVERARGS[2]="-GEMETRY 800x600 -nolisten tcp -localhost"
    
  • vncpasswd回車鍵確定,開始輸入VNC訪問密碼並按回車鍵確定

  • netstat -tlup | grep vnc輸入檢視VNC使用埠

    • 注意:VNC訪問預設監聽如下3個TCP埠:

      • RFB(Remote FrameBuffer)協議 預設埠 :5900+顯示器號
      • HTTP協議預設埠: 5800+顯示器號
      • X協議 預設埠 :6000+顯示器號
    • iptables -I INPUT -p tcp --dport 5901 -j ACCEPT

測試

  • 在vnc中輸入IP:1即可連線
  • 1對應5901埠,以此類推9對應5909埠,如超過100則需使用完整埠號

使用putty將inux檔案傳輸下載

# cd 到putty的目錄下
PSFTP.exe
# 連線linux的ip
open 192.168.3.121
# 遇到store key in cache?(y/n) 輸入y就好
# 輸入使用者名稱和密碼
# 上傳檔案
put filename.txt
# 下載檔案
get filename.txt

Linux使用者管理

Linux是一個多使用者多工系統,使用者可以分為三類

  • 超級使用者
    • 最大的許可權
    • root根使用者
  • 系統使用者
    • 系統使用者是僅限於系統使用的,他不可以超出它(FTP)的範圍,你也可以把它理解為一個服務系統使用者
    • 主要是為了滿足相應的系統程序對檔案屬主
    • 他不能登入,例如FTP、bin、adm、ip
  • 普通使用者(可以登入系統中進行相關操作)

使用者管理

使用者主要通過/etc/passwd/etc/shadow這兩個檔案儲存

cd /etc/
less passwd # 檢視使用者詳細情況
less shadow # 檢視使用者密碼與過期時間(已加密)
  • 開啟/etc/passwd檔案裡面都是一行一個賬戶,每一行以冒號分隔開:
    • 使用者名稱:X(密碼):Uid(i組ID):使用者的全名:使用者的主目錄:用的哪一個shell
      普通使用者的ID號從1000開始,根使用者和系統使用者是0
    • 密碼為X是因為
      以前的密碼預設都是儲存在/etc/passwd這個檔案,後來改進將這個密碼更換到/etc/shadow中,上面那個X算是一個佔位,只有系統能讀取這個檔案,其他都不能讀取,裡面的密碼都是經過sha512加密過的檔案
  • /etc/shadow檔案裡面都是儲存是賬戶的密碼與其他配置也是用冒號分隔開
    • 使用者名稱:加密過的密碼:密碼的相關引數(更改時間與過期時間等)

使用者的新增刪除

useradd

  • 新增使用者
  • useradd username不能輸入已存在的usernam
  • 使用者雖然已經添加了但是還沒設定密碼所以不能登入,在/etc/shawod檔案裡密碼會顯示為!,表示不能登入

passwd

  • 設定使用者密碼
  • passwd username回車即可開始設定密碼,簡單的密碼會被提醒

usermod

  • 修改指定使用者的各項設定

  • usermod [-LU][-c <備註>][-d <登入目錄>][-e <有效期限>][-f <緩衝天數>][-g <群組>][-G <群組>][-l <帳號名稱>][-s <shell>][-u <uid>][使用者帳號]

  • 引數:

    • -c <備註>  修改使用者帳號的備註文字。
    • -d <登入目錄>  修改使用者登入時的目錄。
    • -e <有效期限>  修改帳號的有效期限。
    • -f <緩衝天數>  修改在密碼過期後多少天即關閉該帳號。
    • -g <群組>  修改使用者所屬的群組。
    • -G <群組>  修改使用者所屬的附加群組。
    • -l <帳號名稱>  修改使用者帳號名稱。
      • 若使用者中有程序正在使用則需要kill掉指定程序後才能更改使用者名稱
    • -L  鎖定使用者密碼,使密碼無效。
    • -s <shell>  修改使用者登入後所使用的shell。
    • -u <uid>  修改使用者ID。
    • -U  解除密碼鎖定。
  • 例如:

    • 更改使用者的名字

      usermod -l newusername oldusername
      

userdel

  • 刪除使用者username
  • userdel username注意這種方法不會講home目錄下的檔案刪除
  • 引數
    • userdel -r username徹底刪除使用者(包括home目錄下的檔案)

組管理

  • 每個使用者都可以屬於很多組,其中有一個組是使用者的主要組
  • 在建立使用者的時候預設會建立一個使用者的主要組
  • 在linux中組是可以設定密碼的
cd /etc/
less group # 檢視組詳細情況
less gshadow # 檢視組的密碼(已加密)
  • /etc/group中也是以冒號等隔開
    • 組的名稱:組的密碼:組的ID號:組所有的使用者
  • /tec/gshadow中也是以冒號等隔開
    • 組隊名稱:組的名稱:組的密碼:組的管理員

在組管理中-g與-G不同

groupadd

  • 新增組
  • groupadd groupname

gpasswd

  • 修改組密碼
  • gpasswd groupname
    • 回車即可開始設定,當其他使用者需要加入組的時候就可以通過這個密碼加入

groupmod

  • 更改群組識別碼或名稱
  • groupmod [-g <群組識別碼> <-o>][-n <新群組名稱>][群組名稱]
  • 引數
    • -g <群組識別碼>  設定欲使用的群組識別碼。
    • -o  重複使用群組識別碼。
    • -n <新群組名稱>  設定欲使用的群組名稱。

groupdel

  • 刪除組
  • groupdel groupname

使用者和組狀態命令

檢視組的使用者

  • less group
  • tail group

whoami

  • 檢視當前使用者名稱稱
  • whoami
    • 回車就會返回當前使用者的名字

groups

  • 檢視使用者屬於那個組
  • groups username
    • 回車就會返回指定username的所在組:username

id

  • 用於顯示使用者的ID以及所屬群組的ID
  • id [-gGnru][--help][--version][使用者名稱稱]
    • id返回當前使用者的詳細資訊
    • id username返回username使用者的資訊(不同許可權可顯示的內容不同
    • -g或--group  顯示使用者所屬群組的ID。
    • -G或--groups  顯示使用者所屬附加群組的ID。
    • -n或--name  顯示使用者,所屬群組或附加群組的名稱。
    • -r或--real  顯示實際ID。
    • -u或--user  顯示使用者ID。
    • -help  顯示幫助。
    • -version  顯示版本資訊。

newgrp

  • 臨時加入到指定組

  • newgrp groupname

  • linux中的newgrp命令主要是將當前登入使用者臨時加入到已有的組中,用法如下:newgrp groupname

    • 上面命令的含義是將使用者yan加入到現有的組grptest中,注意輸入命令後需要設定對應的組密碼,所以需要先設定gpasswd groupname

    • 驗證方法

     [yan@localhost etc]$ newgrp grptest
     Password:
     [yan@localhost etc]$ groups
     grptest yan
    

切換使用者

su

  • 切換使用者
  • su若後面不輸入其他引數則預設進入root根使用者
  • su -帶入環境變數

可以看到su是直接在當前環境下切換root根使用者,而su -則是切換使用者並切換環境到root的環境變數中

檔案的管理

read 讀許可權

  1. 對於檔案而言,就是檢視裡面的內容

    cat、vim、less、more等

  2. 對目錄而言,就是檢視目錄裡的內容

    ls等

write 寫許可權

  1. 對檔案而言,就是修改裡面的內容

    vi、vim等

  2. 對目錄而言,就是建立、刪除、重新命名、移動

    mkdir、touch、rm、vm、cp

execute 可執行許可權

  1. 對檔案而言,就是執行這個檔案裡的命令

    執行指令碼檔案或可執行檔案

  2. 對目錄而言,就是進入目錄可以使用cd命令進入

檔案許可權表示

  • d 資料夾
  • 後面代表其他人對這個資料夾的許可權,沒有許可權就是---橫線
  • rwx 讀取、寫入、執行(使用者的許可權)
  • r-x 所屬組的許可權
  • r-x 其他人的許可權
  • num 檔案數
  • 使用者
  • 群組
  • 大小
  • 日期
  • 檔案/資料夾名
[root@centos ~]# ls -l
總用量 8
-rw-------. 1 root root 1627 3月  12 12:25 anaconda-ks.cfg
-rw-r--r--. 1 root root 1655 3月  12 12:54 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 3月  12 12:56 公共
drwxr-xr-x. 2 root root    6 3月  12 12:56 模板
drwxr-xr-x. 2 root root    6 3月  12 12:56 視訊
drwxr-xr-x. 2 root root    6 3月  12 12:56 圖片
drwxr-xr-x. 2 root root    6 3月  12 12:56 文件
drwxr-xr-x. 2 root root    6 3月  12 12:56 下載
drwxr-xr-x. 2 root root    6 3月  12 12:56 音樂
drwxr-xr-x. 2 root root    6 3月  12 12:56 桌面
# 另一個使用者
[bit@centos home]$ ls -l
總用量 4
drwx------. 15 bit  bit   4096 3月  31 16:09 bit
drwx------.  3 test test    78 3月  31 15:45 test
drwx------.  5 1002 test1  128 3月  31 15:48 test1

改變檔案或目錄存取許可權的命令

需要記住的引數縮寫

  • u user
  • g group
  • o other
  • a all
  • r read
  • w write
  • x excute
  • + 增加許可權
  • -減去許可權
  • = 直接等於某些許可權
  • -R 遞迴修改指定目錄下所有檔案、子目錄的許可權

chgrp

更改群組

chgrp groupname filename將filename的組許可權改為groupname

chown

更改所有者,修改屬主或屬組,只能在root使用者執行

chown username filename將filename的使用者許可權改為username

chown :groupname filename將filename的群組許可權改為groupname

chmod

更改許可權標記

例子

  • chmod o+w filename 對filename允許其他使用者新增寫功能
  • chmod u+x,g+w,o-w filename 對filename允許當前使用者執行,允許組寫入,不允許其他使用者寫入
  • chmod a-r filename 對filename不允許所有使用者與組讀取
  • 系統對檔案系統的許可權還可以表示為數字:
    • chmod 755 test.txt
      rwx r-x r-x一般可以分3個為一段
      111 101 101
      7 5 5
    • chmod 600 test.txt
      rw- --- ---
      110 000 000
      6 0 0

特殊許可權的設定 chmod s/t

  • 特殊許可權設定
    • SUID (Set User ID)
      • 只對二進位制程式有效
    • SGID(Set Group ID)
    • Sticky-Bit
  • 特殊許可權指的是什麼?什麼時候需要?
    • /bin/passwd命令
    • shadow檔案
  • 對可執行檔案
    • SUID
    • SGID
  • 對目錄
    • SGID
    • sticky-bit
  • 相關命令
    • chmod u+s
    • chmod g+s
    • chmod +t

chmod u+s

  • chmod u+s filename檔案執行的時候擁有檔案所有者的許可權,只限可執行檔案 (二進位制程式)

例子

  • 一個經典的情況:使用者有許可權修改密碼,但是無許可權修改shawod檔案
  • linux解決方案:在linux將passwd檔案的許可權設為S,S表示為若登入賬號為bit使用該檔案的時候,行使的時候還是檔案擁有者者的許可權,不管誰執行都是root
    注:只有管理員才能設定,此方法是有一定危險性的,此許可權只限於可執行檔案
[root@centos ~]# cd /usr/bin/
[root@centos bin]# ls -l passwd
-rwsr-xr-x. 1 root root 27856 8月   9 2019 passwd
過程:
  1. 因為/usr/bin/passwd的許可權對任何的使用者都是可以執行的,所以系統中每個使用者都可以執行此命令。
  2. 而/usr/bin/passwd這個檔案的許可權是屬於root的。
  3. 當某個使用者執行/usr/bin/passwd命令的時候,就擁有了root的許可權了。
  4. 於是某個使用者就可以藉助root使用者的權力,來修改了/etc/shadow檔案了。
  5. 最後,把密碼修改成功。
    注:這個SUID只能執行在二進位制的程式上(系統中的一些命令),不能用在指令碼上(script),因為指令碼還是把很多的程式集合到一起來執行,而不是指令碼自身在執行。同樣,這個SUID也不能放到目錄上,放上也是無效的。

chmod g+s

  • chmod g+s filename 檔案執行的時候擁有群組的許可權 SGID,建立檔案的時候也會歸屬於此使用者組

  • 和SUID一樣,只是SGID是獲得該程式所屬使用者組的許可權。

    1. SGID對二進位制程式有用;

    2. 程式執行者對於該程式來說,需具備x的許可權;

    3. SGID主要用在目錄上;

      如果使用者在此目錄下具有w許可權的話,若使用者在此目錄下建立新檔案,則新檔案的群組與此目錄的群組相同。

chmod +t

  • chmod +t filenamet是粘置位,sticky-bit
    若一個檔案裡有多個使用者的檔案,讓在資料夾的檔案使用者只能刪除自己讀寫的檔案,不能刪除他人的檔案僅有自己與 root才有權力刪除
  • 這個就是針對others來設定的了,和上面兩個一樣,只是功能不同而已。
  • 一般用於臨時檔案,linux的tmp和win的臨時檔案,多個程式臨時使用tmp資料夾,各自獨立執行且不影響

檔案儲存結構與連結檔案

檔案型別

linux下面的檔案型別主要有:

  1. 普通檔案:C語言原始碼、shell指令碼、二進位制的可執行檔案等。分為純文字和二進位制
  2. 目錄檔案:目錄,儲存檔案的唯一地方
  3. 連結檔案:指向同一個檔案或目錄的檔案
  4. 特殊檔案:與系統外設相關的,通常在/dev下面。分為塊裝置和字元裝置

可以通過ls -l, file,stat,ls -i幾個命令來檢視檔案的型別等相關資訊

檔案儲存

Linux正統的檔案系統(如ext2、ext3、ext4)一個檔案由目錄項、inode和資料塊組成

  • 目錄項:包含檔名和inode節點號
  • Inode:又稱檔案索引節點,是檔案基本資訊的存放地和資料塊指標存放地
  • 資料塊:檔案的具體內容存放地

Linux正統的檔案系統(如ext2、ext3、ext4等)將硬碟分割槽時會劃分出目錄塊、 inode table區塊和data block資料區域。一個檔案由一個目錄項、 inode和資料區域塊組成。 Inode包含檔案的屬性(如讀寫屬性、 owner等,以及指向資料塊的指標),資料區域塊則是檔案內容。當査看某個檔案時,會先從iode tabe中查出檔案屬性及資料存放點,再從資料塊中讀取資料

  • 有個目錄項,每一個目錄項檔案指向一個索引inode表(索引節點編號)

  • 目錄項結構:

    • 檢視節點編號

      • li -li可以檢視當前檔案下的索引節點號

      • stat filename檢視單個檔案的詳細inode資訊

        [root@centos a]# stat bit 
          檔案:"bit"
          大小:34        	塊:0          IO 塊:4096   目錄
        裝置:fd00h/64768d	Inode:17709411    硬連結:2
        許可權:(2775/drwxrwsr-x)  Uid:( 1000/     bit)   Gid:( 1000/     bit)
        環境:unconfined_u:object_r:default_t:s0
        最近訪問:2020-04-02 21:31:55.421690059 +0800
        最近更改:2020-04-02 21:31:53.500668341 +0800
        最近改動:2020-04-02 21:31:53.500668341 +0800
        建立時間:-
        
  • inode表再指向了資料,資料是儲存在一個單獨的資料區

  • inode結構

    • 一般inode目錄表只佔檔案系統磁碟空間的1%

硬連結、符號連結

  • 符號連結和硬連結是我們常見的兩個概念:
  • 硬連結
    • 是給檔案一個副本,同時建立兩者之間的連線關係。修改其中一個,與其連線的檔案同時被修改。如果刪除其中任意一個其餘的檔案將不受影響。
  • 符號連結
    • 也叫軟連結,他只是對原始檔在鑫的位置建立一個“快捷方式”接的檔案將成為無源之水->僅剩下檔名了,當然刪除這個連結,也不會影響到原始檔,但對連結檔案的使用、應用都是直接呼叫原始檔的

硬連結

  • ln 原始檔 連結檔名
  • 修改其副本檔案將會對儲存的內容進行修改,其餘副本或主檔案讀取儲存內容的時候也會修改,使用ln建立的檔案本質上是建立一個連結指向儲存的內容
  • 沒增加一個檔名,inode節點上的連結數增加一,每刪除一個對應的檔名,inode節點上的連結數減一,直到為0,inode節點和對應的資料塊被回收,
  • 檔案的大小為檔案內容的大小,硬連結不能連結目錄

軟連結

  • ln -s 原始檔 連結檔名
  • 類似建立了一個快捷連結,指向了原始檔,當被指向的原始檔被刪除了軟連結還存在但是失效了,可以看到原始檔和軟連結指向的inode表都不一樣
  • 符號連結的大小為路徑的長度,軟連結可以連結目錄

其他說明

  • rm A刪除的只是A這個檔名,而A對應的資料塊(檔案)只有inode節點連結數減少為0的時候才會被系統回收

使用限制

  • 硬連結Hard Link
    • 建立硬連結會增加額外的記錄項以引用檔案
    • 對應於同一檔案系統上的一個物理檔案
    • 每個目錄項引用相同的inode號
    • 建立時連線數遞增
    • 不能跨檔案系統
    • 不能link目錄
  • 符號連線(軟連結)Stmbolic Link
    • 一個符號連結的內容是它引用檔案的名稱
    • 可以對目錄進行連結
    • 可以跨分割槽
    • 指向的是另一個檔案的路徑;其大小為指向的路徑字串的長度;不增加或減少目標檔案inode的引用計數

程序管理

概述

程序是正在執行的程式的例項

  • 狹義定義:程序是正在執行的程式的例項(an instance of a computer program that is being executed)。
  • 廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。
  • 程序的概念主要有兩點:第一,程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的程式碼;資料區域儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。第二,程序是一個“執行中的程式”。程式是一個沒有生命的實體,只有處理器賦予程式生命時(作業系統執行之),它才能成為一個活動的實體,我們稱其為程序。
  • 程序是作業系統中最基本、重要的概念。是多道程式系統出現後,為了刻畫系統內部出現的動態情況,描述系統內部各道程式的活動規律引進的一個概念,所有多道程式設計作業系統都建立在程序的基礎上。

程序分類

  • 互動程序
    • 由一個shell啟動的程序,使用者釋出一個命令後系統執行,執行完畢顯示結果然後等待使用者再次輸入命令
  • 守護程序
    • 在開機啟動的程式,一般是在後臺執行的特殊程序,執行的是特定的系統任務,使用者是不可以與計算機對話的,linux中守護程序在windows中叫做服務

程序的屬性

程序ID

  • ps通過此命令可以檢視當前執行程序的id號

  • pid(PID process IDentity)是一個整數,每一個程序都有一個唯一的PID來代表自己身份,程序也可以根據PID來識別其他的程序

父程序和父程序ID

  • 可以使用ps -o ppid,pid,cmd命令檢視父程序ID,程序ID,命令
  • 其中ppid是parent PID,可以通過下圖看到ps命令的PPID與-bash的PID 9291相同
    • 可以說-bash是ps命令的父程序
    • ps是-bash的子程序
  • 也可以使用pstree命令將程序樹打印出來,可以看到下圖中第二個dhclientNetworkManager的子程序

啟動程序的使用者ID和所屬組GID

​ RUID(Real User ID) RGID(Real Group ID)

​ EUID(Effect User ID) EGID(Effect Group ID)

可以使用ps -eo ruid,rgid, euid,egid,pid, cmd

程序的狀態

由於cpu只能一個時間內對一個程序執行,多個程式需要執行則需要分時執行

  • 執行 run

  • 休眠 suspend

  • 僵死 zombie

    • 執行程式過多或重複執行或執行錯誤
  • 由於cpu只能一個時間內對一個程序執行,多個程式需要執行則需要分時執行,所以會產生三種執行狀態,執行的時候就是程序執行在前臺,休眠則是程序在後臺中暫停活動,僵死則是當前程序報錯卡主或程式子程序的退出資訊滯留在核心中的狀況(父程序不對子程序呼叫wait函式),這樣的情況下,子程序成為殭屍(zombie)程序。當大量殭屍程序積累時,記憶體空間會被擠佔

  • 當子程序終結時,它會通知父程序,並清空自己所佔據的記憶體,並在核心裡留下自己的退出資訊(exit code,如果順利執行,為0;如果有錯誤或異常狀況,為>0的整數)。在這個資訊裡,會解釋該程序為什麼退出。父程序在得知子程序終結時,有責任對該子程序使用wait系統呼叫。這個wait函式能從核心中取出子程序的退出資訊,並清空該資訊在核心中所佔據的空間。但是,如果父程序早於子程序終結,子程序就會成為一個孤兒(orphand)程序。孤兒程序會被過繼給init程序,init程序也就成了該程序的父程序。init程序負責該子程序終結時呼叫wait函式。

    當然,一個糟糕的程式也完全可能造成子程序的退出資訊滯留在核心中的狀況(父程序不對子程序呼叫wait函式),這樣的情況下,子程序成為殭屍(zombie)程序。當大量殭屍程序積累時,記憶體空間會被擠佔。

程序執行的優先級別

可以指定某一程序在被執行時的優先度

程序所連線的終端名

從哪個終端獲取的

程序資源佔用

TTY teletype

tty一詞源於Teletypes,或teletypewriters,原來指的是電傳打字機,是通過序列線用印表機鍵盤通過閱讀和傳送資訊的東西,後來這東西被鍵盤和顯示器取代,所以現在叫終端比較合適。

終端是一種字元型裝置,他有多種型別,通常使用tty來簡稱各種型別的終端裝置。

程序啟動

  • 手動啟動

  • 排程啟動

    • at定時在某一時間點啟動程式任務

    • 結束時輸入ctrl+D結束

    • 操作

      at now+1minutes
      ls /a
      cat bit2.ini
      

    要結束的時候輸入ctrl+D

在VIM掛起程序

在vim中使用ctrl+Z可以暫停(掛起)程序回到命令列

檢視程序資訊

ps

  • ps [options] [--help] 檢視當前系統執行的程序狀態
  • ps :process status,他可以相容多種選項的型別例如:
    • UNIX中ps -a -u -x
    • BSDps aux
    • GNU
    • 推薦使用ps -aux
  • ps -aux顯示所有的程序的全部資訊
  • ps -e -e表示列出全部程序(只顯示PID、TTY、time、CMD)
  • ps -eo pid,comm,cmd-o指定輸出後面三個引數
    • pid(PID process IDentity)是一個整數,每一個程序都有一個唯一的PID來代表自己身份,程序也可以根據PID來識別其他的程序
    • comm(COMMAND)這個程序的簡稱
    • CMD是程序所對應的程式以及執行時所帶的引數,一些中括號[]括 起來的,他們是核心的一部分功能,被打扮成程序的樣子以方便作業系統管理
  • ps 的引數非常多, 在此僅列出幾個常用的引數並大略介紹含義
  • -A 列出所有的行程
  • -w 顯示加寬可以顯示較多的資訊
  • -au 顯示較詳細的資訊
  • -aux 顯示所有包含其他使用者的行程
  • au(x) 輸出格式 :
  • USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • USER: 行程擁有者
  • PID: pid
  • %CPU: 佔用的 CPU 使用率
  • %MEM: 佔用的記憶體使用率
  • VSZ: 佔用的虛擬記憶體大小
  • RSS: 佔用的記憶體大小
  • TTY: 終端的次要裝置號碼 (minor device number of tty)
  • STAT: 該行程的狀態:
  • D: 無法中斷的休眠狀態 (通常 IO 的程序)
  • R: 正在執行中
  • S: 靜止狀態
  • T: 暫停執行
  • Z: 不存在但暫時無法消除
  • W: 沒有足夠的記憶體分頁可分配
  • <: 高優先序的行程
  • N: 低優先序的行程
  • L: 有記憶體分頁分配並鎖在記憶體內 (實時系統或捱A I/O)
  • START: 行程開始時間
  • TIME: 執行的時間
  • COMMAND:所執行的指令

uptime

系統已經運行了多長時間

[root@centos /]# uptime
 20:59:26 up 37 min,  3 users,  load average: 0.01, 0.29, 0.58

w

當前登入的使用者,以及他們正在幹什麼

[root@centos /]# w
 21:02:13 up 40 min,  3 users,  load average: 0.74, 0.58, 0.65
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
bit      :0       :0               173月20 ?xdm?   4:11   0.62s /usr/libexec/gnome-ses
root     :1       :1               20:36   ?xdm?   4:11   0.48s /usr/libexec/gnome-ses
bit      pts/1    :0               21:00    5.00s  0.32s  1.57s /usr/libexec/gnome-ter

top

  • top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
  • Linux top命令用於實時顯示 process 的動態,互動式監視資源密集型流程
  • 引數
    • d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 s
    • q : 沒有任何延遲的顯示速度,如果使用者是有 superuser 的許可權,則 top 將會以最高的優先序執行
    • c : 切換顯示模式,共有兩種模式,一是隻顯示執行檔的名稱,另一種是顯示完整的路徑與名稱S : 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來
    • s : 安全模式,將交談式指令取消, 避免潛在的危機
    • i : 不顯示任何閒置 (idle) 或無用 (zombie) 的行程
    • n : 更新的次數,完成後將會退出 top
    • b : 批次檔模式,搭配 "n" 引數一起使用,可以用來將 top 的結果輸出到檔案內
    • p:顯示指定的pid程序

pstree

顯示程序樹,將所有程序以柱狀圖顯示

free

顯示 記憶體使用情況

[root@centos /]# free
              total        used        free      shared  buff/cache   available
Mem:        2027940     1082188      523028       18212      422724      778284
Swap:       2097148      161536     1935612

管理程序

kill

  • kill PID 殺死程序
    • PID指的是用ps命令檢視的PID
  • 用kill來結束程序(傳送值15,終止訊號給程序)
  • kill -9 PIDkill PID無法關閉程序則使用值9殺死程序訊號
    • 在殺死程序的時候切記會對檔案當前執行狀態損壞!
  • man 7 signal值的說明

timeout

  • timeout 時間 命令 指定時間內檢視指定的命令,超出時間自動退出
  • timeout 10 top 執行10秒的top命令

nice

  • nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]]配置呼叫程式的優先順序
  • linux nice命令以更改過的優先序來執行程式,如果未指定程式,則會打印出目前的排程優先序,內定的adjustment為10,範圍為-20(最高優先序)到19(最低優先序)
  • 比如,你希望作業系統能分配更多的CPU資源給瀏覽器程序,讓瀏覽速度更快、更流暢,操作體驗更好。那具體應該怎麼做呢?儘管linux的程序排程演算法十分複雜,但都是以程序的優先順序為基礎的。因此,只需要改變程序的優先順序即可。
  • 命令
    • nice當nice沒有選項時,輸出值表示系統程序預設的優先順序值,一般為0
      • 當沒有給出具體的優先順序值時預設為10,如nice vi設定vi程序的優先順序值為10
    • nice -n 優先順序值 排程的任務,-n與--adjustment的效果是一樣的

renice

  • renice [優先等級][-g<程式群組名稱>...][-p<程式識別碼>...][-u <使用者名稱稱>...]

  • 重置改變程式的優先順序

  • 命令

    • renice -5 -p 5200 #將PID為5200的程序的niceness設為-5
    • renice -5 -u xie #將屬於使用者xie的程序的niceness設為-5
    • renice -5 -g group1 #將屬於group1組的程式的niceness設為5

殺程序

kill

上面有將這裡不復述

killall

  • killall 正在執行的程式名

  • killall和pkill是相似的,不過如果給出的程序名不完整,killall會報錯

  • 操作

    [root@centos /]# ps
       PID TTY          TIME CMD
      6009 pts/1    00:00:00 su
      6019 pts/1    00:00:00 bash
      6130 pts/1    00:00:00 vim
      6144 pts/1    00:00:00 ps
    [root@centos /]# killall vi
    vi: no process found
    [root@centos /]# killall vim
    

pkill

  • pkill 正在執行的程式名

  • pkill 和killall 應用方法差不多,相比killall他可以不輸入全名,也是直接殺死執行中的程式;如果你想殺掉單個程序,請用kill 來殺掉。

  • pkill=pgrep+kill。

  • 操作

    [root@centos /]# ps
       PID TTY          TIME CMD
      6009 pts/1    00:00:00 su
      6019 pts/1    00:00:00 bash
      6130 pts/1    00:00:00 vim
      6173 pts/1    00:00:00 ps
    [root@centos /]# pkill vi
    [root@centos /]# pkill vim
    

管理後臺任務

  • 前臺(foreground)
  • 後臺(background)

前臺就是在當前視窗中執行的程序,後臺大多是一種在不需使用者干預的情況下運行於作業系統後臺的計算機程序,通常用於執行如日誌記錄、系統監測、作業排程以及使用者提醒等任務

如何讓工作進入後臺? &

jobs

list your jobs 檢視後臺的工作

&

  • vi file.txt &
  • Run a job in the background 在後臺執行作業
  • vi &這樣也可以直接在後臺運作

^Z

  • 在vim的操作檢視中使用ctrl+Z命令即可掛起當前作業回到字元介面
  • Suspend the current (foreground) job 掛起當前(前臺)作業

fg

  • fg jobID

    • jobID為在jobs中檢視的ID數
  • Unsuspend a job: bring it into the foreground 取消暫停作業:將其置於前臺。

  • 可以將後臺的程序呼叫置於前臺

  • 操作

    [root@centos /]# jobs
    [1]+  已停止               vi
    [root@centos /]# pkill vi
    [root@centos /]# fg 1
    vi
    Vim: Caught deadly signal TERM
    Vim: Finished.
    已終止
    

bg

  • bg jobID

    • 將掛起的作業在後臺執行,使jobs命令可以看到左邊有+、-、空格
  • Make a suspended job run in the background 使掛起的作業在後臺執行

  • 操作

    [root@centos /]# jobs
    [1]   已停止               vi
    [2]-  已停止               vi
    [3]+  已停止               vi
    [root@centos /]# bg 1
    [1] vi &
    
    [1]+  已停止               vi
    [root@centos /]# jobs
    [1]+  已停止               vi
    [2]   已停止               vi
    [3]-  已停止               vi
    

^C

  • 在前臺應用中使用ctrl+C可以中斷執行

網路配置

檢視

  • /etc/sysconfig/network-scripts網路配置的檔案一般存放於此,也可以直接配置這些檔案來達到網路配置,但是容易出錯所以不建議直接配置此檔案!新版本中將不被允許而是由服務代替編輯配置
  • ifconfig此命令也不建議使用,因為在Linux作業系統中最小安裝時預設不安裝ifconfig這個命令,使用ip這個命令來取代配置IP地址

顯示當前連線情況 - ip

參考

ip addr

ip addr show 顯示當前所有的網路情況

  • ip addr
  • ip a s
  • ip a

ip route

  • ip route顯示路由資訊
    • ip route show
  • ip link顯示連線狀態
    • ip link show
    • ip link set ens33 up指定物理裝置連線開啟
  • ip -s link顯示所有網路連線和資料包情況

ip addr add

  • ip addr add 192.168.3.110/24 dev ens33給ens33新增一個ip

ip addr del

  • ip addr del 192.168.3.110/24 dev ens33刪除ens的一個ip

檢視埠和服務狀況

netstat

  • netstat用於顯示網路狀態,利用netstat指令可讓你得知整個Linux系統的網路情況
  • netstat [-acCeFghilMnNoprstuvVwx][-A<網路型別>][--ip]
  • 參考

ss

  • ss [-引數]ss 是 Socket Statistics 的縮寫,用來統計 socket 連線的相關資訊,它跟 netstat 差不多,但有著比 netstat 更強大的統計功能,能夠顯示更多更詳細的連線資訊
  • 命令
    • ss -l 顯示本地開啟的所有埠
    • ss -pl 顯示每個程序具體開啟的socket
    • ss -t -a 顯示所有tcp socket
    • ss -u -a 顯示所有的UDP Socekt
    • ss -o state established '( dport = :smtp or sport = :smtp )' 顯示所有已建立的SMTP連線
    • ss -o state established '( dport = :http or sport = :http )' 顯示所有已建立的HTTP連線
  • 命令可以提供如下資訊:
    • 所有的TCP sockets
      • 所有的UDP sockets
      • 所有ssh/ftp/ttp/https持久連線
      • 所有連線到Xserver的本地程序
      • 使用state(例如:connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)、地址、埠過濾
      • 所有的state FIN-WAIT-1 tcpsocket連線以及更多.
  • 使用ss命令替代netstat部分命令,例如netsat -ant/lnt等.
  • 參考

ping

  • ping [-引數]Linux ping命令用於檢測主機。

    執行ping指令會使用ICMP傳輸協議,發出要求迴應的資訊,若遠端主機的網路功能沒有問題,就會迴應該資訊,因而得知該主機運作正常

  • 引數

    • -d 使用Socket的SO_DEBUG功能。
    • -c<完成次數> 設定完成要求迴應的次數。
      • ping -c 4 8.8.8.8
    • -f 極限檢測。
    • -i<間隔秒數> 指定收發資訊的間隔時間。
    • -I<網路介面> 使用指定的網路介面送出資料包。
    • -l<前置載入> 設定在送出要求資訊之前,先行發出的資料包。
    • -n 只輸出數值。
    • -p<範本樣式> 設定填滿資料包的範本樣式。
    • -q 不顯示指令執行過程,開頭和結尾的相關資訊除外。
    • -r 忽略普通的Routing Table,直接將資料包送到遠端主機上。
    • -R 記錄路由過程。
  • 參考

    • -s<資料包大小> 設定資料包的大小。
    • -t<存活數值> 設定存活數值TTL的大小。
    • -v 詳細顯示指令的執行過程。

IP 配置網路配置

  • ip a add 192.168.1.1/24 dev ens33
    • 給指定網絡卡新增一個ip(不是覆蓋修改)
    • dev ens33 指定的網絡卡

網路服務說明

  • 新的服務:NetworkManager(優先)
    • 開機優先啟動
  • 舊服務:network(次級、第二)
    • 開機後啟動

device與connection的區別

  • 簡介
    • device:裝置
    • connection:連線
  • 一個裝置可以有多個連線配置,

配置網路的主要命令

nmtui

  • nmtuiNetworkManager Text user interface
    命令列下圖形介面的配置網路設定

nmcli

  • nmcli OPTIONS OBJECT {COMMAND|help}
  • OPTIONS 選項
    • -p[retty] 漂亮的輸出 *
    • -t[erse] 簡介的輸出
    • -m[ode]tabular|multiline輸出模式
    • -c[olors]auto|yes|no是否在輸出中使用顏色
    • -f[ields]<field1,field2,...>|all|common指定要輸出的欄位
    • -e[scape]yes|no值中的列分隔符
    • -a[sk]詢問缺少的引數
    • -s[how-secrets]允許顯示密碼
    • -w[ait]<seconds>設定超時等待完成操作
    • -v[version]顯示程式版本
    • -h[elp]列印幫助
  • OBJECT 科目(* -常用)
    • g[eneral] 通用,網路管理的一般狀況及操作 *
      • nmcli general檢視裝置簡要狀態
      • nmcli general permissions檢視當前使用者對網路設定的的許可權
      • nmcli general hostname YOURHOSTNAME設定計算機名YOURHOSTNAME
        • hostname可以直接檢視,或者vi /etc/hostname
      • nmcli general logging記錄日誌的等級,預設為INFO
        • nmcli general logging level 日誌等級 domains 所選域更改日誌記錄等級!只是一次生效,重啟恢復原狀
        • journalctl檢視日誌
        • journalctl -u NetworkManager檢視NetworkManager日誌
    • n[etworking] 網路,網路開啟與禁用
      • nmcli networking connectivity check當前模式(全雙工/半雙工)
      • nmcli networking on|off開關網路連線
    • r[adio] 無線,網路開關
      • nmcli radio all on|off開關無線
    • c[onnection] 連線,網路連線管理 *
      • nmcli connection show可以檢視又有什麼裝置後再輸入
    • d[evice] 裝置,裝置管理 *
      • nmcli device status 當前裝置狀態(簡要)
      • nmcli device show ens33顯示裝置資訊(詳細)
      • nmcli device disconnect ens33禁用裝置ens33
      • nmcli device connect ens33啟用裝置ens33
      • nmcli device monitor ens33監控指定裝置ens33
      • nmcli device set ens33 autoconnect yes|no指定裝置是否設定自動連線
      • nmcli device set ens33 managed yes|no指定裝置是否設定被NetworkManager管理
    • a[gent]代理,安裝代理
    • m[onitor] 監控,監控NetworkManager的變動,每當NetworkManager出現改動時列印一行資訊
      • nmcli monitor顯示更改日誌,會佔用前臺,所有網路裝置當變動時會在下方打印出
    • help 幫助
  • 命令
    • nmcliNetworkManager command line interface
      純命令列配置網路設定
    • nmcli con show檢視當前連線
    • nmcli con show ens33檢視指定裝置連線屬性
    • nmcli con add con-name “interface-name” ifname ens33 type ethernet 建立一個連線
    • nmcli con up “interface-name”生效一個連線
    • nmcli dev show ens33檢視ens33屬性
    • nm-connection-editor限定圖形介面下配置網路

設定主機名

  • hostnamectl檢視主機名與本機資訊
  • hostnamectl set-hostname MYNEWNAME設定主機名為MYNEWNAME

Linux軟體管理

RPM

  • RPM軟體包管理器,英文原義:RPM Package Manager(原Red Hat Package Manager,是一個遞迴縮寫)。
  • 註解:一種用於網際網路下載包的打包及安裝工具,它包含在某些Linux分發版中。它生成具有.RPM副檔名的檔案。作為一個軟體包管理工具,RPM管理著系統已安裝的所有RPM程式元件的資料。
  • 包命名規則
    • software-1.2.3-1.tar.gz
    • software-1.2.3-1.i386.rpm
  • 主要功能
    • 安裝
    • 解除安裝
    • 升級
    • 查詢
    • 驗證
  • 輸出選項
    • -v
      • 安裝時顯示軟體名稱
    • -h
      • 使用#顯示進度
  • 常見的基於RPM的更新系統
    • Red Hat Network
    • yum
    • zypp
    • urpmi
    • ART-RPM

安裝

  • rpm -i|-install package_name.rpm
    • rpm -ivh rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm安裝httpd包
  • rpm -F|--freshen package_name重灌

安裝Apache阿帕奇

如果是第一次安裝會提示依賴包

[root@centos Packages]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm 
錯誤:依賴檢測失敗:
	/etc/mime.types 被 httpd-2.4.6-90.el7.centos.x86_64 需要
	httpd-tools = 2.4.6-90.el7.centos 被 httpd-2.4.6-90.el7.centos.x86_64 需要
	libapr-1.so.0()(64bit) 被 httpd-2.4.6-90.el7.centos.x86_64 需要
	libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-90.el7.centos.x86_64 需要
[root@centos Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
[root@centos Packages]# rpm -ivh apr-1.4.8-5.el7.x86_64.rpm apr-util-1.5.2-6.el7.x86_64.rpm
[root@centos Packages]# rpm -ivh httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
[root@centos Packages]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm

解除安裝

  • rpm -e|--erase pack_path_name切記是package,包含軟體名的

升級

  • rpm -U|--upagrade package_name

查詢

  • rpm -p package_name
  • rom -q package_name查詢軟體包是否安裝並檢視軟體包的版本
  • rpm -qa查詢已安裝的所有軟體包
  • rpm -qa | grep package_name查詢已安裝的所有關於與rpmfile名字的包
    • rpm -qa | grep dhcp查詢安裝了的DHCP
  • rpm -ql package_name檢視指定rpmfile包安裝了什麼檔案與安裝路徑

檢視安裝檔案

rpm -ql dhcp檢查DHCP安裝了什麼檔案

其他

  • --replacepkgs重新安裝rpm包
  • --justdb升級資料庫,不修改檔案系統
  • --percent在軟體包安裝時輸出百分比
  • --help幫助
  • --version顯示版本資訊
  • -c顯示所有配置檔案
  • -d顯示所有文件檔案
  • -h顯示安裝進度
  • -l列出軟體包中的檔案
  • -a顯示出檔案狀態
  • -p查詢/校驗一個軟體包檔案
  • -v顯示詳細的處理資訊
  • --dump顯示基本檔案資訊
  • --nomd5不驗證檔案的md5支援
  • --nofiles不驗證軟體包中的檔案
  • --nodeps不驗證軟體包的依賴關係
  • --whatrequires查詢/驗證需要一個依賴性的軟體包
  • --whatprovides查詢/驗證提供一個依賴性的軟體包

yum

  • yum是Yellow dog Updater,Modified的簡稱 ,用python寫成,基於RPM可以自動解決依賴問題,他擁有自己的配置檔案位於/etc/yum.conf,庫在/etc/yum.repos.d/,由於yum追求安全可靠,所以新的軟體不會在庫上出現
  • 特點
    • 便於管理大量系統的更新問題
    • 可以同時配置多個資源庫*.repo(Repository)
    • 簡介的配置檔案

常用命令

  1. 列出所有可更新的軟體清單命令:yum check-update
  2. 更新所有軟體命令:yum update
  3. 僅安裝指定的軟體命令:yum install <package_name>
  4. 僅更新指定的軟體命令:yum update <package_name>
  5. 列出所有可安裝的軟體清單命令:yum list
  6. 刪除軟體包命令:yum remove <package_name>
  7. 查詢軟體包 命令:yum search <keyword>
  8. 清除快取命令:
    • yum clean packages: 清除快取目錄下的軟體包
    • yum clean headers: 清除快取目錄下的 headers
      • yum clean oldheaders: 清除快取目錄下舊的 headers
      • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除快取目錄下的軟體包及舊的headers

查詢

  • yum search NAME 可支援模糊查詢軟體包名

安裝

  • yum install NAME安裝指定軟體包名安裝包
  • yum install NAME -y

刪除解除安裝

  • yum remove NAME 刪除解除安裝指定軟體

清理yum索引

  • yum clean all將本地yum庫索引清理掉,下次索引時就會下載新的索引

  • less /etc/yum.conf檢視yum配置檔案

  • 檢視yum庫

      [root@centos ~]# cd /etc/yum.repos.d/
      [root@centos yum.repos.d]# ls
      CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
      CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo
    

手動新增線上yum庫

新增國內源映象

  • /etc/yum.repos.dcentos yum原始檔存放目錄

  • CentOS-Base開頭的檔案為系統預設的原始檔如需新增國內映象,只需要先備份這個檔案,並改成其他名字,再用國內的源改成這個名字的原始檔即可

  • 這裡我們通過重新命名來備份

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
    
  • 新增國內源

    • 網易

      CentOS7
      [root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
      CentOS6
      [root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
      CentOS5
      [root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
      
    • 阿里雲

      CentOS7
      [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base-aliyun.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      CentOS6
      [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base-aliyun.repo http://mirrors.aliyun.com/repo/Centos-6.repo
      CentOS5
      [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base-aliyun.repo http://mirrors.aliyun.com/repo/Centos-5.repo
      
  • 編譯源資訊:

    yum makecache 
    
  • 更新源會看到映象資訊

     yum -y update
    

新增制定軟體源

  • 新建Nginx.repo檔案來並下載Nginx,好處是可以一直與官方保持最新版本(需要聯網)

    • touch /etc/yum.repos.d/Nginx.repo新建檔案

    • vi /etc/yum.repos.d/Nginx.repo編輯檔案

    • 並將Nginx給的內容貼上上去

      20200416舊版:

      [nginx-stable]
      name=nginx stable repo
      baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
      gpgcheck=1
      enabled=1
      gpgkey=https://nginx.org/keys/nginx_signing.key
      module_hotfixes=true
      
    • yum install nginx安裝nginx

yun掛載虛擬機器iso源

參考

為了能直接使用本地,請先將本地網路斷開nmcli d con dis ens33

  • pwd命令先得到iso的路徑,我這裡的iso路徑為:/run/media/root/CentOS\ 7\ x86_64 /mnt

    • 首先我們將其掛載,CentOS\ 7\ x86_64z中的\作用是轉義空格,不作為分隔符使用
    mount /run/media/root/CentOS\ 7\ x86_64 /mnt
    
  • 然後去CentOS\ 7\ x86_64將yum掛載源更改其中三個內容,注意baseurl=file:///後面的內容以你的iso路徑為準

    baseurl=file:///run/media/root/CentOS\ 7\ x86_64/
    gpgcheck=0
    enabled=1
    
    • 然後使用yum repolist all檢視是否有啟用源
      顯示的結果應該為

      c7-media     CentOS-7 - Media       啟用
      
  • 成功之後使用yum search httpd,以下結果為本地源的查詢結果

製作yum離線軟體庫 - createrepo

  • /myrpm/中有許多rpm檔案,要製作索引
  • createrepo /myrpm/製作在/myrpm/全部rpm檔案的索引,建立好之後會多出一個資料夾repodata,裡面包含了索引檔案

yum將逐漸淘汰

yum將逐漸淘汰,取而代之的是DNF,在8中會替代yum的操作,yum已經停止更新不再更新

磁碟管理

概念

硬碟的技術指標

  • 主軸轉速:指硬碟碟片在一分鐘內所能完成的最大轉數。
  • 平均尋道時間:指磁頭從得到指令到尋找到資料所在磁軌的時間,它描述硬碟讀取資料的能力。
  • 資料傳輸率:指的是從硬碟快取向外輸出資料的速度,單位為MB/S.
  • 快取記憶體:快取是資料的臨時暫存器,主要用來緩解速度差和實現資料預存取等。
  • 單碟容量:指每張碟片的最大容量。這是反映硬碟綜合性能指標的一個重要的因素。

硬碟介面方式

  • FC-AL介面主要應用於任務級的關鍵資料的大容量實時儲存。可以滿足髙效能、高可靠和高擴充套件性的儲存需要
  • SCSI介面主要應用於商業級的關鍵資料的大容量儲存。
  • SAS介面是個全才,可以支援SAS和SATA磁碟,很方便地滿足不同價效比的儲存需求,是具有高效能、高可靠和高擴充套件性的解決方案,因而被業界公認為取代並行SCSI的不二之選。
  • SATA介面主要應用於非關鍵資料的大容量儲存,近線儲存和非關鍵性應用(如替代以前使用磁帶的資料備份).
  • PATA(俗稱IDE)介面已基本淘汰。

主引導記錄 MBR

MBR (Main Boot Record)

  • MBR位於硬碟的0磁軌0柱面1扇區【512位元組】
    • 裝載作業系統的硬碟載入程式【446位元組】
    • 硬碟分割槽表( Disk Partition Table,DPT)【64位元組】
      • 分割槽ID或者型別
      • 分割槽起始磁軌
      • 分割槽磁軌數
    • 最後兩個位元組“55, AA”是分割槽的結束標誌
  • MBR是由分割槽程式(如fdisk)所產生的
    • 不依賴任何作業系統
    • 硬碟載入程式是可以改變的,從而實現多系統共存

磁碟分割槽

  • 指向附加分割槽描述符的擴充套件分割槽
  • 核心最多支援分割槽數:
    • IDE驅動器為63
    • SCSI驅動器為15
  • 為什麼是分割槽驅動?
  • 容量、效能、配額和修復

分割槽型別

三個主系統,第四個為擴充套件分割槽,裡面有L的邏輯分割槽

兩種硬碟儲存方式

  • 基本硬碟儲存
    • 在基本磁碟上儲存資料需要在磁碟上建立主分割槽、擴充套件分割槽和邏輯分割槽,然後對這些分割槽進行管理
  • 動態硬碟儲存
    • 在動態硬碟上儲存資料需要在磁碟上建立動態卷,然後對這些捲進行管理

操作 - 分割槽管理工具

常用的操作:分割槽、格式化、掛載/解除安裝、自動掛載

  • 常用的分割槽工具
    • fdisk
    • sfdisk
    • GNU parted - 高階分割槽操作(建立、複製、調整大小等等)
  • partprobe - 重新設定記憶體中的核心分割槽表版本

fdisk

  • fdisk -l檢視本地儲存列表
    • fdisk -l /dev/sdb 檢視指定的
  • fdisk /dev/sdb 這裡/dev/sdb為指定的磁碟進入分割槽管理介面
    • m 獲取幫組
    • l 顯示可支援的型別
    • n 新增新的分割槽
      • p 主要分割槽,可用來安裝作業系統
        • 選擇指定的分割槽號(1-4)
        • 起始扇區(2048-10485759,預設為 2048) - 由於我的硬碟設定為5G所以實際最大的大小會不一樣
        • Last扇區 結束的扇區(+扇區 or +size{K,M,G} (2048-10485759,預設為 10485759)
          • 假如我輸入100000,這個表示為100000個扇區
            返回:分割槽 1 已設定為 Linux 型別,大小設為 47.8 MiB
          • 假如我輸入+1G,這個表示為新增1G的記憶體
            返回:分割槽 2 已設定為 Linux 型別,大小設為 1 GiB
      • e 擴充套件分割槽,只能用於儲存,不可安裝作業系統
        • 擴充套件分割槽是不能格式化的,擴充套件分割槽必須建立邏輯分割槽使用
        • l 邏輯分割槽
          • 這個分割槽是可以被格式化的
          • 不管有沒有邏輯分割槽都是從/dev/sdb5開始,只建立擴充套件分割槽是不能直接用的,建立了擴充套件分割槽之後還要再次n後之前的e就會變成l(logical邏輯)的命令
          • 新增邏輯分割槽的扇區大小操作與主要分割槽一樣
    • p 檢視分割槽情況
    • w 寫入硬碟
      • 注意這個命令將寫入硬碟,此命令不可逆!

格式化分割槽 format

格式化成指定系統格式,擴充套件分割槽是不能格式化的

  • mkfs -t vfat /dev/sdb1
  • mkfs -t ext4 /dev/sdb5
  • mkfs.ext4 /dev/sdb2
  • mkfs.vfat /dev/sdb2
    • 如果是使用mkfs.***的格式就不需要加-t

掛載 mount

  • 掛載的檔案與裝置都是臨時的,重啟之後就沒了
  • 當分割槽建立好了之後是不能直接使用的,需要將其掛載到分割槽內,擴充套件分割槽是不能掛載的!要掛載邏輯分割槽
  1. 先建立空資料夾

    預設的linux會自動掛載到mnt和media資料夾中

    cd mntmkdir diskb1 diskb2資料夾的名字可以隨便起

  2. 掛載分割槽到資料夾內

  • mount 選項 裝置名 掛載點(目錄)

  • mount -t vfat /dev/sdb1 /mnt/diskb1

  • mount /dev/sdb1 /mnt/diskb2

  • mount 檢視已掛載的分割槽(有點複雜)

遇到NTFS的檔案系統需要安裝工具才能對NTFS檔案系統操作

df 檢視分割槽情況

lsblk 檢視塊裝置命令

  • list block devices

blkid 檢視UUID

問題

  1. 能否掛載到非空目錄?

    可以,但不建議,會將原本的內容都隱藏

  2. 能否將一個分割槽多次掛載?

    可以,還可以用不同的許可權掛載,但一般用的不多

  3. 如何讀取NTFS檔案系統?如NTFS的U盤或exFAT

    直接使用是不支援,需要配合第三方工具,但最新的系統中支援了exFAT,要使用NTFS則需要安裝ntfs-3g這個軟體

解除安裝 - umount

這個解除安裝不是刪除檔案,而是解除安裝掛載

這裡假設分割槽/dev/sdb1掛載在目錄/mnt/cdrom1

  • umount 掛載的分割槽名
    • umount /dev/sdb1
  • umount 掛載點目錄
    • umount /mnt/cdrom1

自動掛載 - 開機自動掛載

vim /etc/fstab

  • 限制說明:

    • /目錄必須優先於其他mount point被掛載進來
    • 其他掛載點必須已經建立的目錄
    • 所有掛載點同一時間內只能掛載一次
    • 所有分割槽在同一時間內只能掛載一次
  • 目錄/etc/fstab

  • 在fstab檔案內新增內容:分割槽名稱 掛載點 檔案系統型別 defaults 0 0

    • 後面兩個0代表是否自動檢查與備份
    • 新建掛載點資料夾mkdir /mnt/cdrom1
    • /dev/sdb1 /mnt/cdrom1 vfat defaults 0 0
  • LABEL=

    • LABEL=/dev/sdb1 /mnt/cdrm1 vfat defaults 0 0
  • UUID

    • 先使用lsblk命令獲得清晰的全域性塊裝置佈局
    • 然後使用blkid命令獲得裝置的UUID
    • 使用 vi命令,vi /etc/fstab
    • 在最後一行新增UUID=第二部獲取的UUID 掛載點 檔案系統型別 defaults 0 0,然後命令模式下使用:wq儲存退出
    • 重啟一次使用dfdf -h命令檢視

其他工具

parted

  • 互動模式
    • parted [選項] <硬碟裝置名>
  • 命令列模式
    • parted [選項] <硬碟裝置名> <子命令> [<子命令引數>]
    • 子命令
      • help [COMMAND]列印幫助資訊
      • print [free |NUMBER|all]顯示分割槽表
      • mkpart PART-TYPE [FS-TYPE] START END建立新分割槽
      • rm NUMBER刪除指定分割槽
      • set NUMBER FLAG STATE設定分割槽標記

邏輯卷管理

概念

  • LVM是邏輯卷管理(Logical Bolume Manager)的簡稱,他是Linux環境下對捲進行方便的抽象層

  • LVM是建立在硬碟和分割槽之上的一個邏輯層來為檔案系統遮蔽下層磁碟分割槽佈局,從而提高磁碟分割槽管理的靈活性。

  • LVM允許在多個物理裝置間重新組織檔案系統,包括重新設定檔案系統的大小。

LVM結構

先將其變成物理卷(physical volume, PV),再轉換邏輯捲成為一個大VG大磁碟(vgcreate),再劃分成若干個邏輯分割槽後像普通分割槽一樣格式化後直接掛在到檔案系統中

LVM - 物理區域

  • 每一個物理卷被劃分為基本單元(稱為 Physical EXtent,PE),具有唯一編號的
  • PE是可以被LWM定址的最小儲存單元PE的大小可根據實際情況在建立物理卷時指定,預設為4MB
  • PE的大小一旦確定將不能改變,同一個卷組中的所有物理卷的PE的大小需要一致

LVM - 卷組

  • 卷組( Volume group,VG)建立在物理卷之上,它由一個或多個物理卷組成
  • 卷組建立之後,可以動態新增物理捲到卷組中,在卷組上可以建立一個或多個“LVM分割槽”(邏輯卷)
  • 一個LVM系統中可以只有一個卷組,也可以包含多個卷組
  • LVM的卷組類似於非LWM系統中的物理硬碟

LVM - 邏輯卷

  • 邏輯卷( Logical Volume,LV)建立在卷組之上,它是從卷組中“切出”的一塊空間
  • 邏輯卷建立之後,其大小可以伸縮
  • LVM的邏輯卷類似於非LVM系統中的硬碟分割槽,在邏輯卷之上可以建立檔案系統(比如/home或者/usr等)

操作

磁碟(分割槽)

  • disk /partition

物理卷(physical volume, PV)

  • /dev/sd*?
  • pvdisplay檢視擁有哪些物理卷
  • pvcreate 分割槽或磁碟
    • pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb5 /dev/sdb6一次建立多個物理卷
    • pvcreate /dev/sdc也可以直接對磁碟進行物理卷建立

卷組(volume group, VG)

  • /dev/VG name/
  • 建立卷組
    • vgcreate 卷組名稱 物理卷列表
    • vgcreate vg1 /dev/sdb1 /dev/sdb2 /dec/sdc將三個物理卷加到一個卷組中(邏輯上指定的大磁碟)
  • 向組卷vg新增物理卷pv
    • vgextend [選項] 引數
    • 例項
      • vgextend vg1 /dev/sdb2將物理卷/dev/sdb2新增至卷組vg1
    • 選項
      • -d除錯模式
      • -t僅測試
    • 引數
      • 卷組:指定要操作的卷組名稱
      • 物理卷列表:指定要刪除的物理卷列表
  • 刪除卷組vg內物理卷pv
    • vgreduce [選項] 引數
    • 例項
      • vgreduce vg1 /dev/sdb2將物理卷/dev/sdb2從卷組vg1中刪除
    • 選項
      • -a如果命令列中沒有指定要刪除的物理卷,則刪除所有空物理卷
      • --removemissing刪除卷組中丟失的物理卷,使卷組恢復正常狀態
    • 引數
      • 卷組:指定要操作的卷組名稱
      • 物理卷列表:指定要刪除的物理卷列表
  • vgchange啟用與停用
    • 啟用卷組 - linux系統會自動啟用卷組
      • vgchange -a y vg1 啟用卷組vg1
    • 停用卷組
      • vgvhange -a n vg1停用卷組vg1

邏輯卷(logical volume, LV)

  • /dev/VG name/LV name/

  • 建立邏輯卷

    • lvcreate [選項] 引數
    • 例項
      • lvcreate -L 大小 -n 名稱 卷組名
      • lvcreate -L 500M -n newlv1 vg1建立大小為500M的邏輯卷,名為newlv1
    • 選項
      • -L指定邏輯卷大小,單位為lLmMgGtT位元組
      • -l指定邏輯卷大小(LE數)
  • 刪除指定LVM邏輯卷

    • lvremove [選項] 引數
    • 例項
      • lvremove /dev/vg1/newlv1刪除邏輯卷newlv1
    • 選項
      • -f強制刪除
    • 引數
      • 邏輯卷:指定要刪除的邏輯卷
  • 擴充套件邏輯卷空間

    • lvextend [選項] 引數
    • 例項
      • lvextend -L + 100M /dev/vg1/newlv1增加100M空間
    • 選項
      • 與建立邏輯卷一致
  • 調整邏輯卷空間大小

    lvresize命令用於調整LVM邏輯卷的空間大小,可以增大空間和縮小空間。使用lvresize命令調整邏輯卷空間大小和縮小空間時需要謹慎,因為它有可能導致資料丟失。

    • lvresize [選項] 引數
    • 例項
      • lvresize -L +200M /dev/vg1/newlv1將邏輯卷空間增加200M
    • 選項
      • 與建立邏輯一致
    • 引數
      • 邏輯卷:指定要刪除的邏輯卷

格式化

mkfs -t ext4 /dev/vg1/newlv1

掛載

mkdir /a/newlv1dir
mount /dev/vg1/newlv1 /a/newlv1dir

服務

systemctl

  • systemctl [starat|stop|restart|try-restart|reload|status|is-active] SERVERNAME
    • 引數
      • systemctl start啟動服務
        • systemctl start dhcpd.service啟動dhcp服務
      • systemctl restart先stop,如果失敗則再start
      • systemctl try-restart先stop,如果失敗不再啟動;如果停止成功則再start
      • systemctl reload重新載入
      • systemctl status狀態檢視
        • systemctl status dhcpd[.server]檢視dhcp服務狀態
        • systemctl status dhcp[.server] -l檢視服務詳細內容,可以使用這個命令來檢視服務報錯的詳細內容
      • systemctl stop firewalld關閉防火牆
      • systemctl enable vsftpd設定vsftpd開機自啟
      • systemctl is-enabled vsftpd檢查vsftpd是否開機自啟

DHCP

20200428

概念

  • DHCP (Dynamic Host Configuration Protocol)動態主機配置協議是TCP/IP協議簇中的一種
  • DHCP是由因特網工程任務組(IETF)設計的,詳盡的協議內容參考RFC2131和RFC1541
  • DHCP協議主要是用來自動為區域網中的客戶機器分配TCP/IP資訊的網路協議,並完成每臺客戶機的 TCP/IP協議配置
    • TCP/IP資訊包括IP地址、子網掩碼、閘道器,以及DNS伺服器等。
  • DHCP的前身是 BOOTP(引導協議),DHCP可以說是 BOOTP的增強版本

優點

  • 減少管理員的工作量
  • 避免IP衝突
  • 減少收入錯誤的可能
  • 能方便地更改網路的IP網段
  • 移動計算機後不用重新配置網路資訊
  • 提高IP地址的利用率

DHCP相關概念

  • DHCP客戶
    • 是指一臺通過DHCP伺服器來獲得網路配置引數的主機,通常是不同的客戶機或工作站。
  • DHCP伺服器
    • 是指提供網路配置引數給DHCP客戶的主機。
  • DHCP中繼代理
    • 是指在DHCP伺服器和DHCP客戶之間轉發DHCP訊息的主機或路由器。若要使用DHCP伺服器支援跨越多重路由的子網,則路由器可能需要硬體升級路由器必須支援RFC1533、RFC1534、RFC1541和RFC1542.
  • 作用域
    • 是指一個網路中的所有可分配的IP地址的連續範圍。作用域主要用來定義網路中單一的物理子網的IP地址範圍。作用域是伺服器用來管理分配給網路客戶的IP地址的主要手段。
  • 超級作用域
    • 是指一組作用域的集合,它用來實現同一個物理子網中包含多個邏輯IP子網的情況。在超級作用域中只包含一個成員作用域或子作用域的列表。然而超級作用域並不用於設定具體的範圍。子作用域的各種屬性需要單獨設定。
  • 排除範圍
    • 是指作用域內從DHCP服務中排除的有限P地址序列。
      排除範圍確保在這些範圍內的任何地址都不由DHCP伺服器分配給DHCP客戶機。
  • 地址池
    • 定義DHCP作用域並應用排除範圍之後,剩餘的地址在作用域內形成可用地址池。地址池內的地址由DHCP伺服器在網路上動態指派給DHCP客戶機。
  • 保留
    • 指通過DHCP伺服器的永久地址租約指派。保留確保了子網上指定的硬體裝置始終可使用相同的IP地址。
  • 租用
    • 是指DHCP客戶從DHCP伺服器上獲得並臨時佔用某IP地址的過程。
  • 租約
    • 是指客戶機可使用的被DHCP伺服器指派的IP地址的時間長度,在這個時間範圍內客戶機可以使用所獲得的IP地址。
    • 當客戶機獲得IP地址時租約被啟用。在租約過期之前,客戶機一般需要通過伺服器更新其地址租約。當租約期滿或在伺服器上刪除時租約停止。租約期限決定租約何時期滿以及客戶需要用伺服器更新它的次數。

簡單描述過程

  1. 複製dhcpd.conf.example檔案
  2. 編輯配置dhcpd.conf檔案
  3. 建立作用域,設定閘道器、dns
  4. 啟動systemctl start dhcpd.service
  5. 檢視客戶端獲取情況

動手

  1. yum install dhcp安裝dhcp伺服器

    1. 查詢是否已經安裝DHCP服務rpm -qa | grep dhcp
    2. 檢視安裝檔案rpm -ql dhcp
  2. 配置一個靜態IP,兩臺機器建議配置網路設定為自定義特定虛擬網路

  3. 根據需求配置靜態IP

    • systemctl start dhcpd.service啟動服務,在啟動前需要先配置dhcp,如果沒有配置啟動則會報錯

    • cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf將其覆蓋

    • vim /etc/dhcp/dhcpd.con簡略模式

      subnet 192.168.3.0 netmask 255.255.255.0 {
              range dynamic-bootp 192.168.3.100 192.168.3.200;	#地址池
              option routers 192.168.3.1;	
      }
      
    • vim /etc/dhcp/dhcpd.condhcpd.conf詳細模式(可選)

    # 設定作用域名
    # option definitions common to all supported networks...
    option domain-name "bit.cn";		# 客戶機上顯示的域名
    option domain-name-servers ns1.bit.cn, ns2.bit.cn;	#DNS域名
    #......省略中間的大部分內容
    # 定義一個作用域,劃分網段並配置閘道器,mac繫結指定IP
    subnet 192.168.3.128 netmask 255.255.255.128 {
            range dynamic-bootp 192.168.3.130 192.168.3.200;	#地址池
            option routers 192.168.3.1;	
            option domain-name-servers 114.114.114.114;	# DNS服務地址
            option domain-name "bit.cn";	# 域名
            option broadcast-address 192.168.1.255;	#廣播地址
            default-lease-time 300;	# 預設租約時間
            max-lease-time 7200;	# 最大租約時間
            host Bcomputer{		#host後什麼名字都可以
                    hardware ethernet 00:0C:29:15:D0:66;		#繫結的mac地址
                    fixed-address 192.168.3.155;		# 繫結的ip地址
    }
    }
    
  4. systemctl start dhcpd啟動dhcpd服務

  5. 測試,讓DHCP伺服器和客戶機在同一物理網路下然後獲取IP地址

DNS

20200430

概念

  • DNS( Domain Name Service,域名系統)是個分散式資料庫系統,其作用將域名解析成IP地址

  • 域名系統允許使用者使用友好的名字而不是難以記憶的數字-IP地址來訪問 Iinternet上的主機。

  • DNS是基於客戶/伺服器模型設計的。

  • Linux下假設DNS伺服器通常是使用BIND來進行

  • 組成

    • 域名系統
      • 標識一組主機並提供他們的有關資訊的樹結構的詳細說明
    • 域名伺服器
      • 保持和維持域名空間中資料的程式
    • Stub解析器
      • 解析器是簡單的程式或子程式庫,它從伺服器中提取資訊以響應對域名空間中主機的查詢,用於DNS客戶
  • 域名空間的分層結構

  • DNS伺服器型別——權威性伺服器

    • 主域名伺服器( Primary Name Server)
      • 是區資料的最根本的來源,是從本地硬碟檔案中讀取域的資料的,它是所有輔域名伺服器進行域傳輸的源。
    • 輔域名伺服器( Secondary Name Server)
      • 通過“區傳輸( zone transfer)”從主伺服器複製區資料,輔域名伺服器可以提供必需的冗餘服務。所有的輔域名伺服器都應該寫在這個域的NS記錄中。
    • 殘根域名伺服器( Stub Name Server)
      • 與輔域名伺服器類似,但只複製NS記錄而不復制主機資料。
    • 祕密域名伺服器( Stealth Name Server)
      • 並沒有列在這個域的NS記錄裡,僅對於知道其IP地址的人可見。

動手

配置一個主DNS

  1. 安裝

    chroot機制,當服務被攻陷的時候,只會限制在服務內,而不會影響到實機

    • yum install bind-libs bind bind-chroot bind-utils
      • bind-libs
      • bind
      • bind-chroot
      • bind-utils
    • rpm -ql bind檢視安裝檔案
  2. 配置主配置檔案(新建區域)

    • 概念

    • 主配置檔案位置:/etc/named.conf

    • vim /etc/named.conf改了第2、9行的any,並添加了第17行的zone

  • 配置/etc/named.conf

    options {
            listen-on port 53 { any; };	#偵聽的埠{偵聽的IP地址;};
            directory       "/var/named";	# 區域配置檔案所存放的位置,正常不改動
            dump-file       "/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
            recursing-file  "/var/named/data/named.recursing";
            secroots-file   "/var/named/data/named.secroots";
            allow-query     { any; };	# 允許查詢的{允許的IP地址;};
    #......省略中間的大部分內容
    zone "." IN {
            type hint;
            file "named.ca";
    };  # "."代表DNS的根伺服器,檔案位於、var/named/named.ca
    
    # 宣告一個自己的DNS區域,區域的名稱引號引起來
    zone "bit.com" {
    	type master;	# 主要區域
    	file "bit.com.zone";	# 此區域的區域檔名,路徑在directory指定的/var/named
    };
    # 宣告一個自己的DNS區域,末尾記得加;
    
    # 也可以將自己的區域放在named.rfc1912.zones這個檔案中
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";
    
  1. 編輯區域檔案(資源記錄檔案)注意許可權!

    • 概念

      • 預設區域檔案位置:/var/named
      • bit.com.zone注意這裡的區域檔名為在主配置檔案中申明的檔名
    • cp /var/named/named.localhost /var/named/bit.com.zone 使用模板檔案,然後將其名改為bit.com.zone

    • chown :named bit.com.zone安全起見要將組許可權要修改為named

    • vim /var/named/bit.com.zone編輯區域檔案
      第二行中123321.qq.com[email protected]的意思,這裡用處是當dns出現問題會發送郵件給管理員郵箱[email protected]

      • 操作

        $TTL 1D
        @       IN SOA  dns.bit.com. 123321.qq.com (
                                                0       ; serial
                                                1D      ; refresh
                                                1H      ; retry
                                                1W      ; expire
                                                3H )    ; minimum
                IN      NS      dns.bit.com.
        dns     IN      A       192.168.129.136
        www     IN      A       192.168.129.100
        mail    IN      A       1.2.3.4
        
  2. 檢查配置和區域檔案語法問題

    • named-checkconf
    • named-checkzone bit.com bit.com.zone
  3. 啟動

    • systemctl start named-chroot建議使用這個方法啟用DNS服務,會更加安全
    • systemclt start named 啟用DNS服務
  4. 測試

    • nslookup在nslookup中檢查區域配置檔案中配置的dns、www、mail是否解析正確,在其他機器上可能會由於防火牆的問題唄攔截
      • server localhost 使用本地dns服務
      • dns.bit.com 解析dns.bit.com
      • www.bit.com
      • mail.bit.com
      • exit退出
補充
  • /etc/named.rfc1912.zones為標準的dns擴充套件模板,你也可以在這個檔案中新增zone進行操作
  • 在zone選項中
    • file "host.com.zone"後面的檔名其實可以隨便取,只需要/var/named/這個目錄下有host.com.zone這個檔案即可
    • allow-update是否允許更新
    • 主配置檔案可以完全手打也可以使用模板named.localhost,將其複製並改名host.com.zone並修改其中內容即可

配置主DNS與輔DNS

由於上面已經有詳細說明,這裡就不再重複

  • 主DNS在named.conf檔案中新增

    ...
    zone "bit.com" IN {
            type master;
            file "bit.com.zone";
            allow-update{none;};	# 不允許更新
            allow-transfer {192.168.3.104;};	# 允許傳輸
    };
    
    • 重啟named-chroot服務

    • 若輔助區域擁有多個,則根據需要允許資料傳輸的IP有多個

      allow-transfer{
      	192.168.3.22;
      	192.168.3.33;
      };
      
  • 輔助DNS在named.conf檔案或/etc/named.rfc1912.zones中新增

    ....
    zone "bit.com" IN {
            type slave;		# 輔助DNS
            file "slaves/bit.com.zone";
            masters {192.168.3.105};	# 如果有多個主DNS可以繼續在後面新增
    };
    
    • 啟動named-chroot服務
  • 可參考:

補充
  • 如果nslookup驗證失敗了,可以試試允許dns通過或關閉防火牆systemctl stop firewalld

轉發器

具體參考:https://blog.51cto.com/sweetpotato/1607383

轉發器在一臺擁有dns環境的空機上配置/etc/named.conf檔案:

options {
forwarders { 192.168.3.105; }; #指明轉發器是誰
forward only; #only表示僅轉發 ;也可以使用first表示先進行轉發,如果沒查詢到結果,那麼它自己還會根據根提示向外迭代查詢
};

驗證

假設DNS的IP地址為192.168.3.105

  • ping

    • ping 192.168.3.105測試與DNS的連通性
    • ping mail.bit.com此時解析到的會是主區域配置表裡的ip
  • dig

    • dig @DNS_IP 請求的域名
    • dig @192.168.3.1005 mail.bit.com
  • nslookup

     [root@centos ~]# nslookup
     > server localhost
     Default server: localhost
     Address: ::1#53
     Default server: localhost
     Address: 127.0.0.1#53
     > mail.bit.com
     Server:		localhost
     Address:	::1#53
     
     Name:	mail.bit.com
     Address: 192.168.3.123
     > 
     
    

WEB服務

工作原理

一般可分成4個步驟:連線過程、請求過程、應答過程以及關閉連線

常見的web伺服器

  • IIS
  • kangle
  • websphere
  • apache
  • tomcat
  • jboss

WEB元件

  • 統一資源識別符號URI
    • 協議名稱://極其地址:埠號/路徑號/檔名
      • 協議名稱一所使用的訪問協議。如:htt、ftp等
      • 機器地址一資料所在的機器,IP地址/域名
      • 埠號一請求資料的資料來源埠(可省略)
      • 路徑名一資料所在的相對路徑
      • 檔名一請求數椐的檔名
  • Web客戶和Web伺服器
    • Web伺服器的職責
      • 預設監聽 TCP/IP的80埠
      • 接受Web客戶請求
      • 檢查請求的合法性,包括安全性遮蔽
      • 針對請求獲取並製作和處理資料
      • 把處理後的資訊傳送給提出請求的客戶機
    • Web瀏覽器的職責
      • 生成一個Web請求(通常在単擊某個連結點時啟動)
      • 通過網路將Web請求傳送給某個Web伺服器
      • 解釋伺服器傳來的Web文件,並把結果顯示在螢幕上
    • WEB客戶端與伺服器通訊過程
      • 每取一個網頁建立一次連線,讀完後馬上斷開,當需要另一個網頁時重新連線,周而復始
  • 超文字傳輸協議HTTP
    • 超文字傳輸協議( Hyper Text Transfer Protocol)是在Web上傳輸資源最常用的方式
    • HTTP規定了客戶機和伺服器等Web元件相互交換資訊的格式和含義
    • HTTP協議的特點
      • URL資源識別
      • 請求-響應方式
      • 無狀態性
      • 攜帶元資料
    • HTTP的連線方式
      • 傳統方式
      • 持久連線方式
      • 管線化方式
    • HTTP的協議頭
      • 請求頭
      • 響應頭
    • HTTP的請求方式
      • HEAD
      • GET
      • POST
      • PUT
      • DELETE
      • CONNECT
      • OPTIONS
      • TRACE
    • HTTP的響應程式碼
      • 資訊1xx
        • 表明服務端接收了客戶端請求,客戶端繼續傳送請求
      • 成功2xx
        • 客戶端傳送的請求被服務端成功接收併成功進行了處理
      • 重定向3xx
        • 服務端給客戶端返回用於重定向的資訊
      • 客戶端錯誤4x
        • 客戶端的請求有非法內容
      • 伺服器錯誤5xx
        • 服務端未能正常處理客戶端的請求而出現意外錯誤
  • Web快取和Web代理
    • WEB快取
      • HTTP協議定義了客戶端快取機制
      • 架設Web快取伺服器和內容分發網路(CDN)可以加快客戶端訪問
    • WEB代理
      • 同時扮演者客戶和伺服器的雙重身份
        • 對於Web客戶來說是伺服器
        • 對於Web伺服器來說是客戶
      • 還可以過濾不希望的Web請求,實現快取記憶體
  • Cookie和 Session機制
    • HTTP是一個無狀態協議,因此當Web伺服器將Web客戶請求的響應傳送出去後,伺服器便
      不必儲存任何資訊了。
    • Web伺服器可以指示Web客戶以儲存Cookie的方式在一系列請求和響應之間維持狀態,而伺服器端則採用 Session機制保持狀態
  • Web內容的構建元件
    • 使用HTML/XHTML、CSS、Javascript構建靜態Web頁面
    • 使用CGI、PHP、Python、Ruby、Java、Servlet、Node.js等技術構建動態Web應用
    • 使用各種資料釋出格式及語言(XML、YAML、JSON、RSS/Atom)交換資料

Linux下常用的Web伺服器

  • Apache
  • Nginx
  • Lighttpd

Apache

安裝與啟動

  • yum install httpd httpd-tools httpd-manual安裝
  • systemctl start httpd啟動
  • 網頁開啟失敗大部分是防火牆導致,具體參考下面關閉防火牆或允許http服務規則

配置

  • /etc/httpd/conf/httpd.confhttpd服務的配置檔案
  • /var/www/html/index.html可以在這個路徑下建立html檔案替換掉預設網站

虛擬主機

  • 若要建立不同的虛擬主機,使用不同的ip、port、servername即可

使用不同的主機名埠等配置

先建立對應的目錄,建議在/var/www/這個目錄下,假設這裡需要使用bit.com作為主機名

先配置html檔案

  • mkdir bit.com/var/www/目錄下建立資料夾bit.com

  • 然後在裡面再創一個檔案:touch index.html這裡只是單純測試所以只需要在裡面隨便放一些文字即可

  • 我這裡只是想測試所以只放了一些文字:

    This is www.bit.com!
    

配置httpd服務配置檔案

  • vim /etc/httpd/conf/httpd.conf修改添加了埠記得去linux安全設定裡面允許埠通過,可參考Linux安全

    ...
    # 可以直接使用這個命令新增不同埠訪問
    Listen 81
    # 也可以新增不同IP和埠訪問
    Listen 192.168.3.199:85
    # 建立一個虛擬主機名
    <VirtualHost 192.168.3.105:80>
    	DocumentRoot "/var/www/bit.com"
    	ServerName www.bit.com
    </VirtualHost>
    # 也可以配置多個,ip和埠也都可以修改
    <VirtualHost 192.168.3.106:81>
    	DocumentRoot "/var/www/bit.xyz"
    	ServerName www.bit.xyz
    </VirtualHost>
    

啟動apache服務

  • systemctl start httpd啟動後去瀏覽器中檢視,若無法開啟可能是防火牆未允許通過或配置有誤

Nginx

  • nginx小巧,功能強大,有逐漸佔Apache的趨勢
  • /usr/share/nginx/html/index.htmlnginx的預設html檔案在這裡

建立repo庫檔案

也可以參考這裡,因為Linux系統一般不自帶Nginx,所以需要手動新增庫檔案以便下載或更新Nginx

  • touch /etc/yum.repos.d/nginx.repo新建repo檔案,名字可隨意
  • 官網中選擇RHEL-CentOS,或者直接複製下面repo資訊然後貼上到:vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

安裝啟動測試

  • yum install nginx -y當repo庫儲存好了之後就可以使用這個命令安裝
  • rpm -ql nginx檢視nginx檔案
  • systemctl start nginx測試nginx服務是否能正常啟動,此時可以在瀏覽器中輸入centos的ip地址檢視,若不能正常開啟可能是防火牆未允許或者nginx的配置有誤

配置nginx

  • 新增配置html檔案

    • mkdir /var/www/bit.com與apache一樣新增一個資料夾並建立一個index.html檔案
    • vim var/www/bit.com/index.html僅測試所以隨便新增內容即可,我在裡面輸入的是This is www.bit.com
  • /etc/nginx/conf.d/default.d編輯預設網站配置

    • 配置檔案

      ... 
      # 一個server就是一個網站
      server{
      	listen	192.168.3.106:80;
      	server_name	www.bit.com;
      	root	/var/www/bit.com;
      }
      
    • 如果需要不同IP或埠可以修改listen後的引數,例如:listen 192.168.3.199:85;

    • 如果需要修改不同的域名可以在server_name後修改引數,如:server_name www.bit.xyz;

    • 記得/var/www/bit.com目錄下需要擁有一個index.html檔案

重啟nginx測試

由於上面已經開啟了nginx服務所以這裡重啟一次

  • systemctl restart nginx重啟nginx服務
  • 此時192.168.3.105是nginx的預設站點,192.168.3.106是我自己的www.bit.com站點
  • 開啟瀏覽器輸入192.168.3.106
    • 或修改dns或修改hosts檔案再輸入www.bit.com

Tomcat

Tomcat也是一直web伺服器,但他是需要配合java使用,也可以參考這裡

安裝

  • 先開啟官網,在左側可以選擇對應的版本,我選擇的是Tomcat 9.你也可以直接點我直接到達tomcat 9的下載頁面,下滑找到Core下的tar.gz連結將其下載下來

  • 在命令列中對其進行解壓

    [root@centos 下載]# ls
    apache-tomcat-9.0.35.tar.gz
    [root@centos 下載]# tar -zx -f apache-tomcat-9.0.35.tar.gz 
    [root@centos 下載]# mv apache-tomcat-9.0.35 tomcat
    [root@centos 下載]# ls
    apache-tomcat-9.0.35.tar.gz  tomcat
    

啟用服務

[root@centos 下載]# tomcat/bin/startup.sh 
Using CATALINA_BASE:   /root/下載/tomcat
Using CATALINA_HOME:   /root/下載/tomcat
Using CATALINA_TMPDIR: /root/下載/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /root/下載/tomcat/bin/bootstrap.jar:/root/下載/tomcat/bin/tomcat-juli.jar
Tomcat started.

此時去瀏覽器中輸入localhost:8080即可發現服務已啟用成功!

資料庫

目前MariaDB等同於MySQL,由於MariaDB有逐漸上升的趨勢,且MySQL有弱化的趨勢,所以這裡只敘述MariaDB,其他部分涉及到SQL語句這裡也不敘述

MariaDB

安裝

yum install mariadb-server安裝MariaDB

啟動

systemctl start mariadb啟動mariaDB服務

初始化

  • mysql_secure_installation初始化資料庫
    • 一開始會詢問是否設定資料庫root的密碼,回車確認
    • Set root password? [Y/n] 是否設定root密碼,推薦y
      • New password:之後會讓你輸入密碼
    • Disallow root login remotely? [Y/n]是否不允許root使用者遠端登入,推薦n
    • Remove anonymous users? [Y/n]移除anonymous使用者,推薦y
    • Remove test database and access to it? [Y/n]是否要移除測試資料庫
    • Reload privilege tables now? [Y/n]是否要重啟以生效剛剛的設定

訪問測試

  • mysql -u root -p後面會讓你輸入密碼,這裡輸入你上面設定的密碼即可
  • flush privileges重新整理資料庫

外部訪問

參考:https://www.cnblogs.com/mapu/p/9184212.html

  • firewall-cmd --add-service=mysql外部訪問,首先第一步需要允許防火牆通過3306或mysql服務,如果你需要永久允許通過可以在後面新增--permanent
  • 對於外部訪問的工具,你可以使用NavicatMYSQL-Front等工具...
  • 外部訪問最主要的是使用者,指定使用者IP所訪問的資料庫

指定使用者通過“指定IP”訪問“所有”的資料庫

  • grant all privileges on *.* to "root"@"192.168.1.99" identified by "password";
    • on *.* 表示允許訪問任意資料庫
    • to "root"@"192.168.1.99"表示指定使用者root只能被192.168.1.99這個IP的主機訪問資料庫
    • by "password"表示需要通過passowrd這個密碼訪問

指定使用者通過“任何ip”訪問“指定”的資料庫

  • grant all privileges on bit.* to "bit"@"%" identified by "password" with grant option;
    • on bit.*表示允許訪問bit這個資料庫下的任意資料表
    • to "bit"@"%"表示指定使用者bit可以被任意IP的主機訪問資料庫
    • by "password"表示需要通過passowrd這個密碼訪問

Linux安全

防火牆 firewall

一般真機中為了安全起見建議不要直接關閉,後果自負

常用命令

服務

  • firewall-cmd -add-service=http 新增
  • firewall-cmd --remove-service=http 刪除
  • 若要永久儲存(持久化)後面加上 --permanent
    • firewall-cmd --reload重新載入防火牆配置

  • firewall-cmd -add-port=3306/tcp 新增,也可以將tcp改為udp

  • firewall-cmd --remove-service=3306/tcp 刪除,也可以將tcp改為udp

  • 若要永久儲存(持久化)後面加上 --permanent

  • 重新載入防火牆策略:systemctl reload firewalld

詳細

  • 防火牆在執行的時候會有兩種配置模式,Runtime Mode(當前執行模式)和Permanent Mode(永久模式),Runtime mode只會在當前執行的時候生效,重啟後失效,Permanent mode則是在每次重啟時生效,立刻新增不會立刻生效(寫如檔案)

檢視

  • firewall-cmd --get-default-zone檢視當前的預設區域
  • firewall-cmd --get-zone檢視所有可使用區域
  • firewall-cmd --get-services檢視當前系統可用服務,可以新增到防火牆
  • firewall-cmd --list-services當前區域可使用的服務,已經新增到伺服器
  • firewall-cmd --list-all當前區域所有資訊
  • firewall-cmd --add-service=vnc-server新增服務
  • firewall-cmd --list-port檢視開放的埠
  • firewall-cmd --reload重新載入防火牆配置

新增到永久模式

  • firewall -cmd --add-service=http --permanent將http寫入永久模式
  • systemctl restart firewalld需要重啟一次才會啟動http防火牆配置

新增指定埠-永久模式

  • firewall-cmd --add-port=3306/tcp --permanent新增允許埠到永久預設

刪除指定服務

  • firewall-cmd --remove-service=http刪除http服務

SELinux

概念

SELinux 主要作用就是最大限度地減小系統中服務程序可訪問的資源(最小許可權原則)可參考

  • 其他程式之外增加的安全機制,Linux系統中會預設安裝,所有的程式都會受到SELinux限制,所以即使當http服務受到了控制也不會影響系統
  • 根目錄:/etc/selinux/
  • 配置檔案:/etc/selinux/config

Mac

MAC(Mandatory Access Control)強制訪問控制

  • 在使用了 SELinux 的作業系統中,決定一個資源是否能被訪問的因素除了上述因素之外,還需要判斷每一類程序是否擁有對某一類資源的訪問許可權。
  • 這樣一來,即使程序是以 root 身份執行的,也需要判斷這個程序的型別以及允許訪問的資源型別才能決定是否允許訪問某個資源。程序的活動空間也可以被壓縮到最小。
  • 即使是以 root 身份執行的服務程序,一般也只能訪問到它所需要的資源。即使程式出了漏洞,影響範圍也只有在其允許訪問的資源範圍內。安全性大大增加。
  • 這種許可權管理機制的主體是程序,也稱為強制訪問控制(MAC)。
  • 而 MAC 又細分為了兩種方式,一種叫類別安全(MCS)模式,另一種叫多級安全(MLS)模式。

DAC

DAC(Discretionary Access Control)自主訪問控制

  • 在沒有使用 SELinux 的作業系統中,決定一個資源是否能被訪問的因素是:某個資源是否擁有對應使用者的許可權(讀、寫、執行)。
  • 只要訪問這個資源的程序符合以上的條件就可以被訪問。
  • 而最致命問題是,root 使用者不受任何管制,系統上任何資源都可以無限制地訪問。
  • 這種許可權管理機制的主體是使用者,也稱為自主訪問控制(DAC)。

MAC和DAC的對比

可以看到,在 DAC 模式下,只要相應目錄有相應使用者的許可權,就可以被訪問。而在 MAC 模式下,還要受程序允許訪問目錄範圍的限制。

SELinux的基本概念

  • 主體(Subject)

    • 可以完全等同於程序(注:為了方便理解,如無特別說明,以下均把程序視為主體。)
  • 物件(Object)

  • 被主體訪問的資源。可以是檔案、目錄、埠、裝置等。(注:為了方便理解,如無特別說明,以下均把檔案或者目錄視為物件。)

  • 政策和規則(Policy & Rule)

    • 系統中通常有大量的檔案和程序,為了節省時間和開銷,通常我們只是選擇性地對某些程序進行管制。

      而哪些程序需要管制、要怎麼管制是由政策決定的。

      一套政策裡面有多個規則。部分規則可以按照需求啟用或禁用(以下把該型別的規則稱為布林型規則)。

      規則是模組化、可擴充套件的。在安裝新的應用程式時,應用程式可通過新增新的模組來新增規則。使用者也可以手動地增減規則。

      在 CentOS 7 系統中,有三套政策,分別是:

      1. targeted:對大部分網路服務程序進行管制。這是系統預設使用的政策(下文均使用此政策)。

      2. minimum:以 targeted 為基礎,僅對選定的網路服務程序進行管制。一般不用。

      3. mls:多級安全保護。對所有的程序進行管制。這是最嚴格的政策,配置難度非常大。一般不用,除非對安全性有極高的要求。

      政策可以在 /etc/selinux/config 中設定。

  • 安全上下文(Security Context)

    • 安全上下文是 SELinux 的核心

      安全上下文我自己把它分為「程序安全上下文」和「檔案安全上下文」。一個「程序安全上下文」一般對應多個「檔案安全上下文」。只有兩者的安全上下文對應上了,程序才能訪問檔案。它們的對應關係由政策中的規則決定。

    • 檔案安全上下文由檔案建立的位置和建立檔案的程序所決定。而且系統有一套預設值,使用者也可以對預設值進行設定。需要注意的是,單純的移動檔案操作並不會改變檔案的安全上下文。

    • 安全上下文的結構及含義

      安全上下文有四個欄位,分別用冒號隔開。形如:system_u:object_r:admin_home_t:s0

SELinux的三種工作模式

  • enforcing強制模式,selinux徹底檢查,保護linux的安全
  • permissive寬容模式,selinux不執行,但只記錄
  • disabled關閉模式,關閉selinux

SELinux 工作模式可以在 /etc/selinux/config 中設定。

如果想從 disabled 切換到 enforcing 或者 permissive 的話,需要重啟系統。反過來也一樣。需要注意的是,如果系統已經在關閉 SELinux 的狀態下運行了一段時間,在開啟 SELinux 之後的第一次重啟速度可能會比較慢。因為系統必須為磁碟中的檔案建立安全上下文(原作者表示重啟了大約10分鐘),SELinux 日誌的記錄需要藉助 auditd.service 這個服務,請不要禁用它。

SELinux工作流程

動手

檢視狀態

  • getenforce檢視SELinux當前執行的工作模式
  • sestatus詳細的SELinux當前執行的工作狀態
  • getsebool -a檢視系統服務是否允許的布林值on/off,-a是所有的
    • setsebool ftpd_anon_write=on臨時設定為開啟
    • setsebool ftpd_full_access=1臨時設定為開啟
    • setsebool ftpd_anon_write=on -P永久有效
    • ftp_home_dir(centos7/redhat沒有)由於沒有用處所以官方將其取消

改變狀態

一般真機中為了安全起見建議不要直接關閉,後果自負,有時候服務不能訪問,有可能是防火牆也有可能是SELinux的問題,在保證安全的情況下暫時關閉測試是否因為他們所導致,如果是則需要對其進行設定

  • setenforce 0臨時關閉SELinux的狀態,變成permissive狀態
  • setenforce 1臨時開啟SELinux的狀態,變成enforcing狀態

對服務埠

新增

semanage port -a -t http_port_t -p tcp 12345對htttp服務新增埠

刪除

semanage port -d -t http_port_t -p tcp 12345對http服務刪除埠

Types型別

檢視程序的安全上下文

ps auxZ | grep -v grep | grep http

檢視檔案或資料夾型別

ls -Z可以檢視當前資料夾下的Types型別

改變檔案或資料夾型別

chcon -R -t htpd_sys_content_y /mydir/改變資料夾mydir的types型別

示例

除了防火牆上預設允許http開放的80等埠,其他埠SELinux都會對其進行管制,如果我要http新增83埠,因為其中預設不包含83,所以需要在SELinux上新增此埠外部才能訪問,若是單獨在防火牆中進行新增也無法訪問

  • semanage port -l |grep -w http_port_t檢視http預設允許的埠
  • 這裡以http為例子,若在httpd.conf檔案中新增listen 83,如果我沒有在SELinux中新增,則無法啟動httpd服務,因為SELinux會為了安全拒絕,可以用下面這條命令對其放行
    • semanage port -a -t http_port_t -p tcp 83在SELinux中放行83埠給http
    • firewall-cmd --add-port=83/tcp如果防火牆中沒有允許83埠通過,那就需要在防火牆中新增埠

上下文

  • ls -Z`顯示上下文
    • 使用者 角色 型別
    • public_content_t
    • public_content_rw_t
  • chcon改變上下文
    • chcon -R -t public_content_t filename更改檔案的上下文為public_content_t
    • chcon --reference=/var/www/html filename改變資料夾的上下文,參考自資料夾html的上下文

FTP

FTP,TFTP, SFTP,FTPS總結和對比

概念

  • 型別
    • tftp 簡單檔案傳輸協議 UDP
      • TFTP是TCP/IP協議族中在客戶機與伺服器之間進行簡單檔案傳輸的協議,提供不復雜、開銷不大的檔案傳輸服務。埠號為69。
      • 優勢
        1. TFTP能夠用於那些有UDP而無TCP的環境
        2. TFTP程式碼所佔的記憶體要比FTP小
    • ftp
      • FTP是在網路層傳輸檔案的應用層協議,基於TCP連線,使用客戶/伺服器模式。
        對於ftp伺服器來說,常用的埠有兩個,一個是tcp埠21,此埠經常用於連線,另一個是tcp埠號20, 此埠經常用於傳輸資料。
    • SFTP與FTPS
      • SFTP(SSH 檔案傳輸協議SSH File transfer protocol)也稱為通過安全套接層的檔案傳輸協議File Transfer protocol via Secure Socket Layer, 以及 FTPS(FTP-SSL) 都是最常見的安全 FTP 通訊技術,用於通過 TCP 協議將計算機檔案從一個主機傳輸到另一個主機。SFTP 和 FTPS 都提供高級別檔案傳輸安全保護,通過強大的演算法(如 AES 和 Triple DES)來加密傳輸的資料。當你在FTP伺服器上收發檔案的時候,你面臨兩個風險。第一個風險是在上載檔案的時候為檔案加密。第二個風險是,這些檔案在你等待接收方下載的時候將停留在FTP伺服器上,這時你如何保證這些檔案的安全。一個選擇是建立一個支援SSL的FTP伺服器,它能夠讓你的主機使用一個FTPS連線上載這些檔案。這包括使用一個在FTP協議下面的SSL層加密控制和資料通道。一種替代FTPS的協議是安全檔案傳輸協議(SFTP)。這個協議使用SSH檔案傳輸協議加密從客戶機到伺服器的FTP連線。
    • sftp
      • sftp是Secure File Transfer Protocol的縮寫,安全檔案傳送協議。可以為傳輸檔案提供一種安全的加密方法。sftp 與 ftp 有著幾乎一樣的語法和功能。SFTP 為 SSH的一部分,是一種傳輸檔案至 Blogger 伺服器的安全方式。其實在SSH軟體包中,已經包含了一個叫作SFTP(Secure File Transfer Protocol)的安全檔案傳輸子系統,SFTP本身沒有單獨的守護程序,它必須使用sshd守護程序(埠號預設是22)來完成相應的連線操作,所以從某種意義上來說,SFTP並不像一個伺服器程式,而更像是一個客戶端程式。SFTP同樣是使用加密傳輸認證資訊和傳輸的資料,所以,使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網路安全性要求更高時,可以使用SFTP代替FTP。
      • SFTP 或 SSH 檔案傳輸協議是另一種安全的安全檔案傳輸協議,設計為 SSH 擴充套件以提供檔案傳輸功能,因此它通常僅使用 SSH 埠用於資料傳輸和控制。當 FTP 客戶端軟體連線到 SFTP 伺服器時,它會將公鑰傳輸到伺服器進行認證。如果金鑰匹配,提供任何使用者/密碼,身份驗證就會成功。
    • ftps (ftp over ssh)
      • FTPS也稱作“FTP-SSL”和“FTP-over-SSL”,是一種多傳輸協議,相當於加密版的FTP。預設埠號是21。FTPS是在安全套接層使用標準的FTP協議和指令的一種增強型FTP協議,為FTP協議和資料通道增加了SSL安全功能。SSL是一個在客戶機和具有SSL功能的伺服器之間的安全連線中對資料進行加密和解密的協議。
      • FTPS最常見的問題之一是建立資料傳輸連線。在FTPS中,資料通過單獨的通道(不同於發起命令的主通道,DATA)傳輸。 這意味著每次列出目錄或上傳/下載檔案時都會建立新連線。
  • ftp有兩種模式
    • 主動
    • 被動

配置

安裝

  • yum install vsftpd安裝vsftp服務
  • rpm -ql vsftpd

配置開機啟動

  • systemctl enable vsftpd設定開機自啟
  • systemctl is-enabled vsftpd查詢是否開機啟動

配置檔案

  • vim /etc/vsftpd/vsftpd.conf配置vsftpd配置檔案
  • grep -v "^#" vsftpd.conf檢視vsftpd.conf的有效配置
  • vsftp是通過/etc/pam.d/vsftpd這個檔案來身份驗證,同時是在/etc/vsftpd/vsftpd.conf檔案中的末尾pam_serice_name=vsftpd來指向身份驗證檔案

啟動

systemctl start vsftpd啟動vsftpd

訪問

匿名賬戶

如果需要登入匿名賬戶,則需要在vsftpd.conf檔案中更改允許匿名選項:anonymous_enable=YES,記得重啟一次vsftpd服務,不輸入任何東西則系統ftp會預設填充anonymous,但命令列一定要輸入,一般只能下載不能上傳

  1. 賬戶名:anonymous,密碼:空(不輸入)或者郵件地址
  2. 賬戶名:ftp,密碼:ftp
  • 如果需要匿名使用者寫入需要開啟SELinux的ftpd_anon_writeftpd_full_access

  • setsebool ftpd_anon_write=on臨時設定為開啟,允許匿名使用者讀寫

  • setsebool ftpd_full_access=1臨時設定為開啟,取消對本地虛擬使用者的限制

  • setsebool ftpd_anon_write=on -P永久有效

  • ftp_home_dir(centos7/redhat沒有)由於沒有用處所以官方將其取消

  • 如果出現登入失敗: 500 OOPS: vsftpd: refusing to run with writable root inside chroot(),需要在vsftp的配置檔案中新增一條命令

    • vim /etc/vsftpd/vsftpd.conf編輯配置檔案

      allow_writeable_chroot=YES
      

本地使用者

我們可以在FTP上使用系統本地使用者進行登入訪問,如果賬戶沒有限制在自己的家目錄內(chroot),則這種方法不安全,因為可以直接跳轉到其他根目錄去,幾乎能看到任何資料夾

防火牆

  • firewall-cmd --add-service=ftp配置防火牆允許ftp通過
  • firewall-cmd --add-service=ftp --permanent配置永久允許防火牆允許ftp通過
    • firewall-cmd --reload 重新載入防火牆配置

命令列

  • ftp 192.168.3.105在windows的cmd中輸入即可發起連線,如果需要使用匿名使用者anonymous則需要修改ftp的根路徑

  • 之後會要求輸入賬號與密碼,以下是輸入成功樣子:

    使用者(192.168.3.105:(none)): bit
    331 Please specify the password.
    密碼:
    230 Login successful.
    
  • 登入成功後就如同在centos的shell一樣,輸入命令即可:

    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    下載
    公共
    圖片
    文件
    桌面
    模板
    視訊
    音樂
    

工具

這裡使用的工具是FileZilla,你也可以使用其他工具

其他

將本地使用者限制在其家目錄中

參考1 參考2

  • 先新建使用者

    # 將vuser1檔案目錄放置在/vuser1中,這裡將限制其在此
    useradd -d /vuser1 vuser1
    passwd vuser1
    # vuser2預設會在/home/vuser2中,這裡將限制在此
    useradd vuser2
    passwd vuser2
    # vuser3也會在home目錄裡,但不做限制
    useradd vuser3
    passwd vuser3
    
  • vim /etc/vsftpd/vsftpd.conf

    chroot_local_user=YES # YES為所有的人都限制,NO為所有人都不被限制
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list 
    allow_writeable_chroot=YES # 新增許可權
    
    • 可能上述可能模糊,這裡拆分一下
    chroot_local_user=YES # YES 為所有的使用者都開啟限制
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list # 若此檔案存在此檔案內的使用者名稱不會受到限制
    --------------------------
    chroot_local_user=NO # NO 不限制所有使用者
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list # 若此檔案存在此檔案內的使用者名稱會受到限制
    
  • firewall-cmd --add-service=ftp後面在防火牆中允許其通過

  • setsebool ftpd_full_access=1允許登入

  • setsebool ftpd_anon_write=1允許寫入

    • 如果測試過程中還是失敗可以嘗試將selinux暫時停止setenforce 0,也可以將防火牆臨時關閉systemctl stop firewalld
  • 測試,在另外一臺機器上,可以是linux也可以是windows,這裡以windows為例子,注:下面有將一些不必要的資訊給去掉了

    C:\>ftp 192.168.3.105
    使用者(192.168.3.105:(none)): vftp1
    密碼:
    230 Login successful.
    ftp> mkdir vftp1
    257 "/vftp1" created
    ftp> ls
    linux1
    vftp1
    ftp> quit
    221 Goodbye.
    C:\>ftp 192.168.3.105
    使用者(192.168.3.105:(none)): vftp2
    密碼:
    230 Login successful.
    ftp> ls
    linux2
    ftp> mkdir vftp2
    257 "/vftp2" created
    ftp> pwd
    257 "/"
    ftp> quit
    C:\>ftp 192.168.3.105
    使用者(192.168.3.105:(none)): vuser3
    密碼:
    230 Login successful.
    ftp> cd /
    250 Directory successfully changed.
    ftp> ls
    bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
    

虛擬使用者

參考

  • 使用linux中建立的使用者登入可能會導致linux的安全問題,所以建立虛擬的使用者相對會安全一點

    • setsebool ftpd_anon_write=on臨時設定為開啟,允許匿名使用者讀寫
    • setsebool ftpd_full_access=1臨時設定為開啟,取消對本地虛擬使用者的限制
  • 先建立一個使用者名稱、密碼,明文的檔案,將使用者名稱和密碼放入vim ftpuser

    vuser1
    12345678
    vuser2
    87654321
    
  • db_load -T -t hash -f ftpuser /etc/vsftpd/vu.dbftpuser檔案處理轉換成資料庫檔案

  • chmod 600 vu.db為了安全,更改許可權防止其他使用者讀取更改

  • vim /etc/vsftpd/vsftpd.conf編輯vsftp配置檔案

    chroot_local_user=YES
    chroot_list_enable=YES
    # (default follows)
    chroot_list_file=/etc/vsftpd/chroot_list
    ...
    pam_service_name=vsftpd
    # 在檔案的末尾新增
    guest_enable=YES
    guest_username=vftp
    user_config_dir=/etc/vsftpd/vuserconf
    allow_writeable_chroot=YES
    # 結束
    userlist_enable=YES
    tcp_wrappers=YES
    
  • cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.copy複製備份一個vsftpd檔案

  • vim /etc/pam.d/vsftpd編輯vsftpd檔案

    #%PAM-1.0
    auth    required        pam_userdb.so   db=/etc/vsftpd/vu
    account required        pam_userdb.so   db=/etc/vsftpd/vu
    
  • 建立一個vftp使用者

    • useradd vftp
    • passwd vftp
  • mkdir /etc/vsftpd/vuserconf建立虛擬使用者配置檔案目錄

  • 配置虛擬使用者的配置檔案

    • vim /etc/vsftpd/vuserconf/vftp1這裡只記錄一個,有多少個使用者就建立多少個虛擬使用者配置檔案

    • 簡單配置:

      local_root=/home/vftp1
      
    • 詳細配置:

      # 設定虛擬使用者的目錄
      local_root=/home/vftp1
      # 設定虛擬使用者是否可以寫入
      write_enable=YES
      local_umask=022
      anon_world_readable_only=NO
      # 允許虛擬使用者的上傳功能
      anon_upload_enable=YES
      # 設定虛擬使用者是否可以建立資料夾
      anon_mkdir_write_enable=YES
      # 設定虛擬使用者是否可以知曉其他的寫入操作,比如刪除、重命、覆蓋操作
      anon_other_write_enable=YES
      # 最多允許同意賬號在10個不同的IP登入
      max_per_ip=10
      # 最大下載速度(位元組/秒)
      local_max_rate=2500000
      # session超時時間
      idle_session_timeout=600
      # 連線超時時間
      data_connection_timeout=120
      # 最多連線數量
      max_clients=10
      
    • mkdir /home/vftp1建立資料夾給vftp1這個使用者作家目錄

    • chmod 777 vftp如果需要ftp在這個資料夾內操作可以使用這個命令(僅供測試)

  • systemctl restart vsftpd重啟vsftpd服務

  • 常見錯誤

    • 錯誤 :500 OOPS: cannot change directory:/
      • 許可權問題 或者
        1. setsebool ftpd_disable_trans 1
        2. service vsftpd restart
    • 錯誤:500 OOPS: unrecognised variable in config file: cal_root
      • 大部分情況是複製的時候丟失了字元,應該是 local_root 回頭去看看vsftpd.conf配置檔案!
    • 錯誤:500 OOPS:could not read chroot() list file:/etc/Vsftpd/chroot_list
      • 遇到這種情況是因為在/etc/Vsftpd目錄下沒有一個檔案叫做chroot_list的檔案,建立即可

多個虛擬FTP主機

參考

  • ifconfig ens33:0 192.168.3.107/24新增一個虛擬IP

  • useradd -d /ftp2 ftp2新增一個ftp2使用者並設定其家目錄為/ftp2

  • passwd ftp2設定密碼

  • cp /etc/vsfptd/vsftpd.conf /etc/vsftpd/vsftpd2.conf將原有的vsftpd.conf配置檔案複製一份用作於新的虛擬FTP

  • vim /etc/vsftpd/vsftpd.conf配置原vsftpd.conf新增內容

    listen_address=192.168.3.105 #原本主機的IP
    
  • vim /etc/vsftpd/vsftpd2.conf配置新的vsftpd2.conf新增內容

    listen_address=192.168.3.107
    ftp_username=ftp2
    local_root=/var/ftp2
    
  • 測試,使用不同的IP進行測試即可

  • 如果失敗了請配置selinux與firewall服務,這裡不再贅述

FTPS

參考

  • yum install openssl安裝openssl

  • cd /etc/pki/tls/certs切換目錄進行金鑰生成

  • make vsftpd.pem生成證書金鑰檔案

    • 後面填寫的資料可以隨便填

      Country Name (2 letter code) [XX]:CN
      State or Province Name (full name) []:SD
      Locality Name (eg, city) [Default City]:XX
      Organization Name (eg, company) [Default Company Ltd]:
      Organizational Unit Name (eg, section) []:
      Common Name (eg, your name or your server's hostname) []:ftp.name.com
      Email Address []:
      
  • 編輯配置vsftpd.conf配置檔案對其新增ssl加密引數

    ssl_enable=YES   #啟用ssl加密
    allow_anon_ssl=YES   #允許匿名使用者使用ssl加密
    force_local_data_ssl=YES     #強制本地使用者資料傳輸加密
    force_local_logins_ssl=YES   #強制本地使用者登入加密
    force_anon_logins_ssl=YES    #強制匿名使用者登入加密
    force_anon_data_ssl=YES  #強制匿名使用者資料傳輸加密
    ssl_tlsv1=YES    #支援TLS方式
    ssl_sslv2=NO     
    ssl_sslv3=NO     
    rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem      #RSA憑證檔案所在
    pasv_min_port=64000
    pasv_max_port=64100
    
  • 配置selinux

    • setsebool ftpd_full_access on
    • setsebool ftpd_use_passive_mode on
  • 配置防火牆

    • firewall-cmd --add-port=64000-64100/tcp允許指定埠的tcp連線
    • firewall-cmd --add-service=ftp 允許ftp防火牆服務項通過
  • 測試,可在FileZilla等工具上測試

  • 如果失敗了請配置selinux與firewall服務,這裡不再贅述

SELinux與FTP

  • 如何FTP服務配置使用中出現了問題可以從SELinux或防火牆中尋找問題
    • SELinux
      • getenforce檢視狀態
      • setenforce 00關、1開,Permissive和Enforcing的切換
      • ftp_home_dir(centos7/redhat沒有)由於沒有用處所以官方將其取消

LAMP

概念

(Linux+Apache+MariaDB+PHP,開源黃金組合)

  • LAMP是指一組通常一起使用來執行動態網站或者伺服器的自由軟體名稱首字母縮寫:
    • Linux,作業系統
    • Apache,網頁伺服器
    • MariaDB或MySQL,資料庫管理系統(或者資料庫伺服器)
    • PHP、Perl或Python,指令碼語言
  • 雖然這些開放原始碼程式本身並不是專門設計成同另幾個程式一起工作的,但由於它們的廉價和普遍,這個組合開始流行(大多數Linux發行版本捆綁了這些軟體)。當一起使用的時候,它們表現的像一個具有活力的“解決方案包”(Solution Packages)。其他的方案包有蘋果的WebObjects(最初是應用伺服器),Java/J2EE和微軟的.NET架構。
  • “LAMP包”的指令碼元件中包括了CGIweb介面,它在90年代初期變得流行。這個技術允許網頁瀏覽器的使用者在伺服器上執行一個程式,並且和接受靜態的內容一樣接受動態的內容。程式設計師使用指令碼語言來建立這些程式因為它們能很容易有效的操作文字流,甚至當這些文字流並非源自程式自身時也是。正是由於這個原因系統設計者經常稱這些指令碼語言為膠水語言。

簡易配置

  • 安裝

    • yum install httpd mariadb-server php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash
  • 啟動

    • systemctl start httpd mariadb
  • 初始化資料庫

    • mysql_secure_installation初始化資料庫
      • 一開始會詢問是否設定資料庫root的密碼,回車確認
      • Set root password? [Y/n] 是否設定root密碼,推薦y
        • New password:之後會讓你輸入密碼
      • Disallow root login remotely? [Y/n]是否不允許root使用者遠端登入,推薦n
      • Remove anonymous users? [Y/n]移除anonymous使用者,推薦y
      • Remove test database and access to it? [Y/n]是否要移除測試資料庫
      • Reload privilege tables now? [Y/n]是否要重啟以生效剛剛的設定
  • 編輯配置主頁

    • vim /var/www/html/index.php編輯php檔案

      <?PHP
      $connect = mysqli_connect('localhost','root','password','myDB','3306')or die("連線資料庫失敗".mysql_error());
      if($connect){
          echo "連線成功!";
      }
      ?>
      
  • 防火牆與selinux

    • firewall-cmd --add-service=http --add-service=https --add-service=mysql
    • setenforce 0
  • 測試

    • 開啟瀏覽器輸入http:\\localhost\index.php
  • 應用測試請往下翻看

詳細基礎搭建

  1. Apache

    • 安裝yum install httpd
    • 設定開機啟動systemctl enable httpd
    • 啟動systemctl start httpd
  2. mariadb

    • 安裝yum install mariadb-server
    • 設定開機啟動systemctl enable mariadb
    • 啟動systemctl start mariadb
    • mysql_secure_installation初始化資料庫
      • 一開始會詢問是否設定資料庫root的密碼,回車確認
      • Set root password? [Y/n] 是否設定root密碼,推薦y
        • New password:之後會讓你輸入密碼
      • Disallow root login remotely? [Y/n]是否不允許root使用者遠端登入,推薦n
      • Remove anonymous users? [Y/n]移除anonymous使用者,推薦y
      • Remove test database and access to it? [Y/n]是否要移除測試資料庫
      • Reload privilege tables now? [Y/n]是否要重啟以生效剛剛的設定
  3. PHP

    • 安裝yum install php

    • 安裝web常用PHP元件yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash

    • 可選測試

  • vim /var/www/html/index.php在網頁根目錄中新建一個php主頁
    <?PHP echo "hello world!"; ?>

  • 重啟Apache載入PHPsystemctl restart httpd

  • vim /var/www/html/inde.phpPHP+SQL簡單測試

    <?PHP
    $connect = mysqli_connect('localhost','root','password','myDB','3306')or die("連線資料庫失敗".mysql_error());
    if($connect){
        echo "連線成功!";
    }
    ?>
    
  • vim /var/www/html/inde.phpPHP連線資料庫,忘記了可參考(可選)

    <?PHP
    	$connect = mysqli_connect('localhost','root','password','myDB','3306');
        //2.定義sql語句
         $sql='select * from table';
            mysqli_query($connect,'set names utf8');
        //3.傳送SQL語句
            $result=mysqli_query($connect,$sql);
    $arr=array();//定義空陣列       
            while($row =mysqli_fetch_array($result)){
                    var_dump($arr);
                    echo "<br>";
            }
        //4.關閉連線
           mysqli_close($connect);
    ?>
    

擴充套件應用

可以使用織夢、可道雲、moodle等應用

可道雲

  • 教程其實可以參考官網:https://kodcloud.com/download/
  • wget http://static.kodcloud.com/update/download/kodbox.1.09.zip下載kod的壓縮包檔案(最新的版本命令可在上面的官網連結獲取)
  • unzip kodbox.1.09.zip解壓壓縮包到當前目錄下
  • mv kodbox.1.09.zip /var/www/html/kodbox將資料夾重新命名並放置在其他位置
  • cd /var/www/html/kodbox切換到此目錄下
  • chmod -Rf 755 ./*按官方說明授予許可權
  • 開啟瀏覽器訪問localhost/kodbox根據提示進行設定即可

織夢

  • 先在官網下載安裝壓縮包:http://www.dedecms.com/products/dedecms/downloads/
  • tar -xzvf DedeCMS-V5.7-UTF8-SP2.tar.gz下載好之後對其進行解壓(檔名視具體情況變動)
  • mv kodbox.1.09.zip /var/www/html/dede
  • cd /var/www/html/dede切換到此目錄下
  • chmod -Rf 755 dede授予許可權
  • 開啟瀏覽器訪問localhost/dede/uploads/install/index.php根據提示進行設定即可

moodle

  • PHP版本>7.1
  • PHP5
    • wget https://download.moodle.org/stable30/moodle-3.0.tgz下載歷史舊版本
    • tar -xvf moodle-3.0.tgz解壓壓縮包
    • chmod -R 755 moodle授予許可權
    • 開啟瀏覽器訪問localhost/moodle/install.php根據提示進行設定即可

NFS

概念

主要用於linux之間的檔案共享

  • 網路檔案系統( Network File System,NFS)採
    用客戶機伺服器工作模式
  • NFS是分散式計算系統的一個組成部分,可實現在異種網路上共享和裝配遠端檔案系統。
  • NFS提供了一種在類UNX系統上共享檔案的方法。
  • NFS還可以結合遠端網路啟動實現
    • 無盤工作站(PXE啟動系統,所有資料均在伺服器的磁碟陣列上)
    • 瘦客戶工作站(本地啟動系統,本地磁碟儲存了常用的系統工具,而所有/home目錄的使用者資料被放在NFS伺服器上並且在網路上處處可用)

協議模型

  • NFS協議提供了一種遠端檔案系統規範

NFS協議版本

RHEL/CentOS7支援NFS V3、NFS V4客戶端,預設使用NFS V4協議

NFS V4

NFSv4內建了遠端掛裝和檔案鎖定等協議支援,因此NFSv4不再需要與 rpcbindrpc. mountd、rpc. statd和 locks互動
在 Centos7中,當NFS伺服器端使用exportfs命令時仍然需要rpc. mountd守護程序,但它不參與跨越網路線路的操作。
NFSv4的nfs服務仍然監聽在tcp:2049埠。

與NFS相關的RPM包

  • nfs- utils:NFS的主要元件。包含有rpc.nfsd及rpc. mountd這兩個NFS的核心守護程序及其相關文件、執行檔案等
  • rpcbind:提供RPC的埠對映的守護程序及其相關文件、執行檔案等

與NFS相關的工具

  • exportfs:在NFS伺服器端,維護NFS共享資源的命令
  • showmount:用來在NFS客戶端檢視伺服器共享的目錄
  • nfsstat:顯示NFS的狀態統計資訊
  • recinto:顯示由RPC維護的埠對映,顯示已經註冊的RPC服務列表。

動手

安裝

  • yum install nfs-utils安裝
  • systemctl enable nfs-server開機自啟
    • 因為作者做了軟連線,所以也可以使用nfs

  • systemctl start nfs-server啟動nfs服務

配置共享資料夾

  • 配置檔案:/etc/exports
  • vim /etc/exports編輯nfs配置檔案
  • 格式:共享目錄 主機表(引數表) 主機表2(引數表)
    • /srv/nfs 192.168.3.0(ro) 192.168.4.45(rw)
    • /srv/nfs *(ro)允許所有主機,ro-readonly只讀
    • showmount -e localhost檢視本機共享情況
  • 引數
    • ro 設定共享目錄為只讀的許可權
    • rw 設定共享目錄為可讀寫的許可權
    • root_squash 將root喲使用者或其所屬組對映為匿名使用者或組(nfsnobody),這是預設值
    • no_root_squash 將root使用者或其所屬組對映成匿名使用者或組,這樣設定很不安全不建議使用
    • all_squaash將所有遠端訪問的普通使用者或組都對映成匿名使用者或組,適合公用目錄
    • no_all_squash 不將所有遠端訪問的普通使用者或組都對映成匿名使用者或組,這是預設值

配置防火牆

  • firewall-cmd --add-service=nfs --add-service=mountd --add-service=rpc-bind --permanent
  • firewall-cmd --reload

Linux客戶端

查詢

  • showmount -e 192.168.3.106

掛載

  • mkdir /mnt/linux_nfs新建資料夾以掛載
  • mount -t nfs nfs伺服器地址:/共享目錄 掛載點
  • mkdir /mnt/linux_nfs新建資料夾以掛載
  • mount -t nfs 192.168.3.106:/srv/nfs /mnt/linux_nfs將主機192.168.3.106的資料夾/srv/nfs掛載到本機的/mnt/linux_nfs

解除安裝

  • umount /srv/nfs

windwos客戶端訪問NFS

  • 一開始windows並不支援NFS,但隨後增加了訪問功能,但需要安裝額外功能,通過對映網路驅動器的方式來使用
  • 控制面板>程式>程式和功能>啟用或關閉Windows功能>NFS服務將NFS服務勾選上,確定並安裝即可
  • 安裝完成開啟cmd
    • showmount -e 192.168.3.105查詢NFS,有的windows版本不支援
    • mount 192.168.3.105:/srv/nfs f:對映網路驅動器到f盤

開機啟動

ip:/共享目錄 掛載點 nfs _netdwv 0 0

其他

  • exportfs
    • 用於維護NFS共享的目錄列表
    • 當修改了/etc/ exports之後,無需重新啟動nfs服務,可以使用 exports命令使改動立刻生效。
    • exportfs [-aruv]
      • -a全部掛載或解除安裝/etc/ exports配置檔案中的設定
      • -r全部掛載/etc/exports中的設定,同步更新/var/lib/nfs/xtab的內容
      • -u解除安裝共享目錄
      • -v在顯示輸出列表的同時顯示這頂引數
  • nfsstat
  • rpcinfo

SAMBA

概念

Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟體,由伺服器及客戶端程式構成。SMB(Server Messages Block,服務訊息塊)是一種在區域網上共享檔案和印表機的一種通訊協議,它為區域網內的不同計算機之間提供檔案及印表機等資源的共享服務。SMB協議是客戶機/伺服器型協議,客戶機通過該協議可以訪問伺服器上的共享檔案系統、印表機及其他資源。通過設定“NetBIOS over TCP/IP”使得Samba不但能與區域網絡主機分享資源,還能與全世界的電腦分享資源。

SMB/CIFS協議和SAMBA,Linux用NFS,Windows用SMB,由於Linux覺得SMB不錯,但win不理睬,Linux是後面才將SAMBA補上

  • SMB( Server Message Block,服務資訊塊)協議是個高層協議,它提供了在網路上的不同計算機之間共享檔案、印表機和不同通訊資料的手段
  • SMB使用NetBIOS API實現面向連線的協議,該協議為 Windows客戶程式和服務提供了一個通過虛電路按照請求一響應方式進行通訊的機制。
  • SMB的工作原理就是讓NetBIOS與SMB協議執行在TCP/IP上,並且使用 NetBIOS的名字直譯器讓Linux機器可以在 Windows的網路上的芳鄰中被看到,從而和 Windows9X/NT200X進行相互溝通,共享檔案和印表機。
  • Samba允許 Linux伺服器與 Windows系統之間進行通訊,使跨平臺的互訪成為可能。 Samba採用C/S模式,其工作機制是讓 Netbios( Windows網路上的芳鄰的通訊協議)和SMB兩個協議運行於TCP/IP通訊協議之上並且用 Vetbeult協議讓 Windows在“網路上的芳鄰”中能瀏覽Linux伺服器
  • Sambar伺服器可實現如下功能:WINS和DNS服務;網路瀏覽服務; Linux和 Windows城之間的認證和授權; UNICODE字符集和城名對映滿足CFS協議的UNX共享等。 Sambal伺服器可實現如下功能:WINS和DNS服務;網路瀏覽服務; Linux和 Windows城之間的認證和授權;UNICODE字符集和阪名對映滿足CIFS協議的UNX共享等

Samba主要服務

  • 檔案和印表機共享
  • 使用者驗證和授權
  • 名稱解析
  • 流浪(服務通告)

Samba守護程序

  • Smbd:實現共享和驗證授權服務
  • Nmbd:實現名字解析和瀏覽服務

mba伺服器包括兩個後臺應用程式:Smbd和Nmbd.Smbd是 Samba的核心,主要負責建立 Linux Samba伺服器與 Samba客戶機之間的對話,驗正使用者身份並提供對檔案和列印系統的訪;Nmbd主要負責對外發布 Linux Samba伺服器可以提供的 Netbios:名稱和瀏覽服務,使 Windows使用者可以在“網路上的芳鄰”中瀏覽 Linux Samba伺服器中共享的源另外 Samba還包括一些管理工具,如smb- client, smbmount, testp arm, smbpasswd等

服務概覽

  • 軟體包:samba,samba-common
  • 服務型別:由Systemd啟動的守護程序
  • 配置單元:/usr/lib/systemd/system/[smb|nmb]d.service
  • 守護程序:/usr/sbin/nmbd,/usr/sbin/smbd
  • 監聽埠:
    • NetBIOS UDP:137(-ns),UDP:138(-dgm),TCP:139(-ssn)
    • SMB over TCP TCP:445(-ds)
  • 配置檔案:/etc/samba/
  • 相關軟體包:samba-swat,samba-client,testoarm,cifs-utils

動手

安裝

  • yum install samba

編輯配置檔案

  • mkdir -p /srv/samba/example 配置一個共享資料夾

    • touch test.txt放置檔案以驗證
  • semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"修改檔案型別

  • restorecon -Rv /srv/samba/example/用於恢復selinux檔案屬性即恢復檔案的安全上下文,-R 連同子目錄一起修改,-v 將過程顯示到螢幕上

  • vim /etc/samba/smb.conf編輯配置檔案

    [global] #段
    	workgroup = SAMBA-name	#工作組
    	netbios name = Server
    	security = user
    	log file = /var/log/samba/%m.log
    	log level = 1
    [bit] #自定義的名字
    	path = /srv/smaba/example/
    	read only = no
    
  • testparm檢查sam.conf配置檔案

建立smb使用者

Linux共享必須是單獨的系統使用者,nologin建立系統使用者但不能登入

  • useradd -M -s /sbin/nologin example建立一個使用者以新增到smb中,直接新建使用者smb是不能使用的
  • passwd example配置密碼
  • smbpasswd -a example新增到smb賬戶中以供遠端訪問
    • -a新增使用者,要新增的使用者必須是系統使用者
    • -d凍結使用者,將這個使用者凍結,禁止使用
    • -c恢復使用者,將使用者解凍,允許使用
    • -n吧使用者的密碼設定成空,要在global中寫入 null passwords -ture
    • -x刪除使用者

啟動服務

  • systemctl start smb啟動smb服務
  • firewall-cmd --add-service=samba --permanent允許smb服務通過
  • firewall-cmd --reload重新載入配置檔案
  • systemctl enable smb設定開機自啟

訪問測試

  • \\192.168.3.105在外部windows機器的檔案管理器輸入Linux的IP,賬戶密碼是剛剛建立的example

刪除

如果想重新連線,則需要先在cmd中將其刪除

  • net use \\192.168.3.105 /del

定時任務

Scheduling tasks,定時迴圈執行指定操作以保障系統長久化使用,這是系統自帶的服務,無需安裝

  • cron

  • 檔案位置:/etc/cron.d

  • 計劃任務儲存的地方:/var/spool/cron/

  • cat /etc/crontab檢視

    [root@centos /]# cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    

動手

設定任務

  • crontab -e一般使用者使用這個命令為這個使用者的任務
    • -e需要編輯
  • crontab -e -u username管理員可以給指定使用者新增任務

格式

執行的最小時間間隔是每分鐘,每分鐘檢查一次需要做什麼任務

  • 分鐘、小時、日、月、星期、使用者名稱(管理員下)、命令

  • minute 0-59

  • hour 0-23

  • month 1-12

  • day of week 0-7(0=0,星期天)

  • *代表任意允許的值

  • 8,19如果有多個值用逗號隔開

  • 0-23/2*/2代表偶數的值(0,2,4,6...22)

  • 具體

    # 分鐘、小時、日、月、星期、[使用者名稱(管理員下,可選)]、命令
    # 每年的一月一日 重啟一次電腦 `*`表示都匹配
    0	0	1	1	*	reboot
    # 每個新七天的凌晨3點鐘 重啟一次httpd
    0	3	*	*	0	systemctl restart httpd
    # 每個工作日的8點和19點執行 記錄一個日誌
    0	8,19	*	*	1-5	logger message rom root
    

檢視計劃任務

如果設定了任務,可以在/var/spool/cron/這個目錄下檢視,檔名為設定任務的指定使用者名稱,不建議直接使用vim編輯,標準的編輯是使用crontab -e

  • cat /car/spool/cron/root檢視root使用者設定的計劃任務
  • crontab -l當前使用者的任務

安全

計劃是預設所有使用者都能使用,預設系統使用黑名單cron.deny

  • /etc/cron.allow在其中填寫使用者名稱則能使指定使用者可以使用crontab命令,其他使用者不允許

  • /etc/cron.deny在其中填寫使用者名稱則能使指定使用者不可以使用crontab命令,其他使用者允許

    • 這裡將使用者bit新增至cron.deny

      [bit@centos cron.hourly]$ crontab -e
      You (bit) are not allowed to use this program (crontab)
      See crontab(1) for more information
      

定時執行臨時任務

只能臨時執行一次,而不是迴圈執行.(at.d)

  • at(windows下也有)

    • ctrl+D儲存並退出編輯

    • 在十一點執行一個任務

      [root@centos /]# at 11:00
      at> dir / > /rootdir.txt
      at> <EOT>
      job 1 at Thu Jun  4 11:00:00 2020
      [root@centos cron.hourly]# atq
      1	Thu Jun  4 11:00:00 2020 a root
      
  • atq檢視建立的工作

  • atrm [num]

log日誌

  • logger this is a logger記錄日誌
  • Direct write(Apache samba)服務個體記錄的日誌
  • rsyslogd 系統本身服務記錄的日誌
    • unix上是使用了syslogd,後來的rsyslogd是他的升級版(r:更可靠的)
    • rsyslogd資訊多,寫帶不用檔案,可遠端
  • journald(sysemd-journald)與系統程序繫結的服務記錄的日誌
    • 二進位制儲存的檔案,不能直接檢視,自開機啟動以來的日誌資訊(重啟後會重新開始記錄,舊記錄會丟失)
    • journal可以通過這個命令檢視開機啟動以來的日誌

rsyslogd

  • 獲取資訊的途徑

    • /var/log/*通常的資訊會寫入到此目錄中
    • journalctl
    • systemctl status 服務名
  • 檢視日誌檔案

    • tail /var/log/messages檢視日誌檔案
      • tail -f /var/log/messages實時檢視日誌檔案
  • /etc/rsyslog.conf系統自帶的日誌檔案配置

    • 模組、全域性指令、規則

    • facility、priority、destination服務、資訊級別、目的檔案

      • rsyslog.conf

        # mail服務 .*代表全部的級別 /../..什麼級別的資訊儲存在什麼地方
        mail.*                                                  -/var/log/maillog
        
    • 資訊級別:debug、info、notice、warning、error、crit、alert、emerg越來越嚴重

journalctl

  • journalctl --no-pager
  • journalctl --follow實時檢視日誌資訊
  • journalctl -f實時檢視日誌資訊
  • journalctl _UID=0
  • journalctl -n 20等同於tail -n 20
  • journalctl -p eror只顯示錯誤資訊
  • journalctl --since yesterday -p err自什麼時間到什麼時間的錯誤
  • journalctl --since --until(YYYY-MM-DD hh:mm:ss)從什麼時候到什麼時候
  • journalctl -o verbose
  • journalctl _SYSTEMD_UNIT=sshd.service
  • 儲存journal資訊
    • /run/log/journal
    • /var/log/journal monthly儲存總空間10%或15%就開始清理之前的記錄
    • /etc/systemd/journald.conf配置檔案

rotaing log files

  • 按時間歸檔日誌檔案(每週)
  • /etc/logrotate.conf
  • /etc/logrotatd.d

SSL

  • web安全->HTTPS
  • Secure Sockets Layer(SSL)
    • v2與v3都有漏洞,逐漸被TLS
  • Transport Layer Security (TLS)
  • CA(Certificate Authority)

配置HTTPS

環境搭建

  • yum install http
  • yum install mod_ssl

ssl配置檔案

此處做介紹無需配置/etc/httpd/conf.d/ssl.conf

...
# 啟用ssl
SSLEngine on
# sslv2喝sslv3都有爆過出現漏洞
# 與所有ssl協議相容,排除SSLv2與SSLv3
SSLProtocol all -SSLv2 -SSLv3
# 建議的寫法,排除所有隻使用1、1.1、1.2版本
# SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2

生成SSL

  • openssl rsa -text -in /etc/pki/tls/private/localhost.key
  • openssl x509 -text -in /etc/pki/tls/certs/localhost.crt

驗證SSL和TLS協議

  • 格式:openssl s_client -connect hostname:port -protocol
  • openssl s_client -connect localhost:443 -tls1

防火牆配置

  • firewall-cmd --add-service=https

驗證

  • ip a得到本機IP:192.168.1.2
  • 開啟瀏覽器輸入:https://192.168.1.2

配置FTPS

環境配置

  • yum install vsftpd
  • yum install mod_ssl

生成SSL

  • openssl rsa -text -in /etc/pki/tls/private/localhost.key
  • openssl x509 -text -in /etc/pki/tls/certs/localhost.crt

驗證SSL和TLS協議

  • 格式:openssl s_client -connect hostname:port -protocol
  • openssl s_client -connect localhost:443 -tls1

配置FTP

vim /etc/vsftpd/vsftpd.conf

...
# 末尾新增如下內容
ssl_enable=YES
ssl_tlsv1_2=YES
ssl_tlsv1_1=YES
ssl_tlsv1=NO
ssl_tlsv1=NO
ssl_sslv2=NO
ssl_sslv3=NO

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/pki/tls/certs/localhost.crt
rsa_private_key_file=/etc/pki/tls/private/localhost.key

其他

如果登入失敗或不能訪問可以嘗試關閉selinux與防火牆

  • setenforce 0
  • systemctl stop firewalld

驗證

使用FileZilla新建站點,使用SFTP協議輸入主機IP、賬號密碼即可