前言:中文期刊網精心挑選了linux系統范文供你參考和學習,希望我們的參考范文能激發你的文章創作靈感,歡迎閱讀。
linux系統范文1
關鍵詞:虛擬文件系統;內存技術設備;日志文件系統
中圖分類號:TP316 文獻標識碼:A
嵌入式產品已經滲透到人們生活的方方面面,特別是在數字信息技術和網絡技術高速發展的今天,手持信息產品正拓展著一片越來越大的市場。PDA、手機、掌上電腦、信息家電等各式手持產品已擁有了龐大的用戶群。手持信息產品所運用的最關鍵的核心技術就是嵌入式操作系統。linux以其開源的內核和免費的應用程序、能夠自由地移植和開發的優勢,更迎合了嵌入式市場的需求。
嵌入式Linux的開發大致可分為三個層次:引導裝載內核、構造文件系統和圖形用戶界面。作為操作系統重要組成部分的文件系統,它決定了操作系統本身的信息和用戶的數據在存儲設備上的組織形式。對嵌入式文件系統的研究、設計和開發也逐漸成為嵌入式系統研究領域的一個方向。
1 嵌入式Linux文件系統
1.1 簡介
文件系統是指在一個物理設備上的任何文件組織和目錄,它構成了Linux系統上所有數據的基礎。Linux程序、庫、系統文件和用戶文件都駐留其中,因此它是系統中龐大復雜且又是最為基本和重要的資源。值得提出的是,Linux系統中的文件不僅包括普通的文件和目錄,每個和設備相關的實際實體也都被映射為一個文件,例如磁盤、打印機、終端等。這樣的設備文件又稱為特殊文件。所以,Linux下的文件是操作系統服務和設備的簡單而又統一的接口。從某種意義上可以說,Linux里的一切事物都是文件。
在Linux中,文件系統的結構是基于樹狀的,根在頂部,各個目錄和文件從樹根向下分支。
目錄樹的最頂端被稱為根目錄(/)。在后面介紹的所構造文件系統結構圖(圖1)即顯示了樹狀的文件系統。Linux操作系統由一些目錄和許多文件組成。
由于Linux是一個多任務、多用戶的操作系統,因此它里面的文件還都被賦予了一定的權限,來決定誰能讀、寫或執行一個文件,以及這個文件的類型和如何執行。例如下面的文件列表:
-rw-r-r- 1 root root 1756 Sep 9 2005 inittab
其表示:這個名為inittab的文件是普通文件;所有者有讀寫的權限;所在組和其他人都只有讀的權限;它的連接數為1;所有者及文件所屬的組都是root 文件中字節數為1756;文件創建日期是2005年9月9日??梢酝ㄟ^對文件屬性的設置,來滿足文件在不同用戶組、不同用戶操作下的不同狀態。
1.2 特點
由于嵌入式設備的一些特殊性,使得嵌入式文件系統除了滿足一般文件系統的基本要求外,還有一些自身的特性:文件系統面對的存儲介質特殊;文件系統有快速恢復的特殊要求;物理文件系統的多樣性和動態可裝配性;需要文件系統具有跨操作平臺的安全性;文件系統要能滿足整個系統的實時性要求。
2 文件系統的設計
2.1 實驗主機和目標平臺的連接
實驗主機和目標平臺的連接有兩種方法:一種是以太網連接,這種連接方式可以進行內核文件、根文件系統映像文件的下載;另一種是串口連接,這樣的連接方式可以供調試之用。
2.2 構建文件系統
構造基本目錄首先建立一個文件系統的工作空間。創建目錄/home/work,所構造的文件系統就在work這個目錄中。建立基本目錄,如bin、dev、etc、lib、mnt、proc、sbin、tmp、usr、vat、tools。具體結構見圖l。
其中,tools是便于開發而創建的目錄。因為整個系統要求盡量小,所以應只包含一些必須的二進制程序。開發過程中需要用到的命令就放在tools中。/etc目錄下只包含了一些啟動過程的配置文件。/ l i b 目錄下的modules子目錄包含了可動態加載到核心的各種模塊。另外,目錄var下還應創建兩個子目錄log和run,負責記錄系統的日志和運行狀態。整個文件系統中除了tmp和var 目錄放在SDRAM內以外,其他所有目錄都放在Flash中,因為trap和var中的內容需要經常寫入,所以放在可讀寫的RAM里。 當在目標平臺實現了一個嵌入式Linux之后,為了很好地管理操作系統和用戶的數據文件,引入了文件系統。物理文件系統是JFFS2,考慮到擴充物理文件系統的要求,保留了Linux的VFS層次??紤]到存儲設備擴充的要求,在Linux內核中加入了對MTD設備的支持。根據上面的敘述,可給出整個文件系統的體系結構圖,如圖2所示。
構建文件系統最基本的要求就是系統能夠在此基礎上啟動運行起來,所以,/sbin下的init程序必不可少。init程序是引導過程完成后內核運行的第一個程序,它能啟動全部其他程序。只要init完成運行全部必要的程序,該系統就開始建立并開始運行。當程序開始啟動時,init讀取一個配置文件inittab,這個文件位于/etc下,它確定了init在啟動和關機時的工作特性。在開發的這個嵌入式系統中,所有的文件內容只需保留與開發要求有關的必須部分。所以inittab的內容根據需要重新寫入。
這個系統運行單用戶模式啟動,啟動后立即運行rc.sysinit腳本,進行系統初始化動作。rc.sysinit腳本也進行了精簡,只保留了以讀寫的方式重新加載(mount)根文件系統的操作(內核啟動時只以只讀的方式加載了根文件系統)。具體rc.sysinit腳本中的內容如下:
# Remount the root filesystem read-write
# mount -n -o remount.rw /mount -o remount.rw -n /dev/mtdblock2/mount -a
為了在開發過程中讓用戶與系統能進行交互需要,啟動/bin/bash 這個命令解釋器。用戶在鍵盤上輸入某些命令,bash將讀取輸入加以解析然后執行該程序。/tools中的telnetd和/sbin中的pppd分別是遠程登陸和串口通訊的后臺程序,加入它們也是為了方便開發。另外,為了盡量精簡內核,程序都以動態鏈接庫文件的方式編譯,即當程序運行到所需庫文件時才動態加載。為確保運行各種程序都能在/lib目錄中找到合適的庫文件,就干脆對/lib中的庫文件不作任何刪減,而完整的/lib目錄(含子目錄及全部庫文件)也不過2MB大小。
2.3 進一步開發
按照上一部份給出的文件系統體系結構,文件系統的實現主要在VFS層、物理文件系統層和MTD層。下面給出在MTD層Linux的源代碼做的一些修改,同時介紹JFFS2物理文件系統映像文件的生成。
3 支持MTD設備
對MTD設備的支持要經過配置內核、編寫設備驅動程序和建立MTD設備這幾個步驟。
第一步,配置內核參數。選中Memory Technology Devices(MTD)support,下面的子項中至少要選擇MTD partitioning support、Direct Char device access to M TD devices和Caching block device access to MTD devices這三項。其他的有關NFTL、CFI的支持根據需要選取。
第二步,編寫針對目標平臺Flash設備的MTD驅動程序,主要實現創建MTD 分區和刪除MTD分區的函數。創建分區的流程見圖3所示。刪除分區的函數比較簡單,如果存在MTD分區,就調用del_mtd_partitions(struct mtd info*)刪除分區,并且刪除為MTD設備創建的映射表。
第三步,將修改過的MTD驅動文件作為內核文件的補丁,并給內核文件打上這個補丁, 最后,編譯生成內核文件。
第四步,使用mknod命令建立MTD設備。mknod命令的格式如下:
mknodc 90 //MTD字符設備
mknodb 31 //MTD塊設備
4 網卡設置方法
首先需要Linux kernel 2.6.1+,其次需要在編譯內核的時候選上CONFIG_NET_RADIO。
安裝hostap-driver:
tar zxvf hostap-driver-0.1.3.tar.gz
cd hostap-driver-0.1.3
然后,用任意編輯器打開該目錄下的Makefile文件,將第三行的KERNEL_PATH=加上你的內核source地址,保存。
然后Make
make install
接下來,先加載sysfs。修改/etc/fstab,加一行none /sys sysfs defaults 0 0。
在/etc/sysconfig/network-scripts/下建立一個ifcfg-eth1文件,內容如下:
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Wireless
WIRELESS_ENC_KEY=“你的WEP加密字符串”
WIRELESS_ESSID=“AP網絡名”
WIRELESS_CHANNEL=“”
WIRELESS_MODE=“”
這樣就行了,其他的參數應該會自動從服務端獲取。除了enc,還有幾個常用的參數,essid mode channel nick,其他參數請用iwconfig-help或者man iwconfig查看。
啟動你的無線網卡,需要啟動hostap和ipw2100這兩個模塊。找到/etc/modprobe.preload
在文件的最后依此加上:hostapipw2100,保存后退出。
5 小結
我們構造了一個嵌入式版本的Linux文件系統,它使得內核在系統盡量精簡的情況下能夠運行起來,并滿足產品和系統各方面的要求。在這個嵌入式文件系統中,引入了VFS的支持,雖然犧牲了一些空間,但是大大方便了今后各種物理文件系統的動態加載。
參考文獻
[1]Karim Yaghmour著.韓存兵等譯.構建嵌入式Linux系統[M].北京:中國電力出版社,2004.
[2]鄭樺.嵌入式Linux文件系統的設汁與實現[M].武漢:武漢理工大學,2004.
linux系統范文2
關鍵詞:Linux操作系統;安全策略;計算機技術;安全性問題
在計算機技術飛速發展的今天人們的學習、工作和生活與計算機聯系得越來越緊密,與之相應的計算機安全性問題也被提到了前所未有的高度。隨著具有開源特性的Linux操作系統的廣泛應用,Linux操作系統在計算機安全策略中不但是一個易于移植程序的平臺,而且是一個構建和運行程序的平臺。本文針對Linux操作系統,通過總結和歸納Linux操作系統其中的共性,在技術性能和應用安裝性能方面提出一些安全策略。
1、Linux操作系統編程安全模型設計
Linux操作系統是面向多用戶的,在同一時間可以有許多用戶向操作系統發出各種系統命令,在現代的操作系統里面都有編程安全的概念,編程程序是一個包含可以執行代碼的文件,當編程程序被系統調用到內存以后,系統會給程序分配一定的資源,然后進行一系列的復雜操作使程序變成進程以供系統調用。在Linux操作系統里面為了區分各個不同的進程,Linux操作系統給每一個進程分配了一個ID以便識別,為了充分的利用資源,Linux操作系統還對編程進行了安全模型的設計。
1.1嚴格權限禁止非法切換,保障編程模型安全
在Linux中SU是一個很常用的命令,它可以完成從普通用戶到root用戶的切換也可以用于普通用戶之間的切換,只要用戶知道root密碼就可以完成此項操作,使系統存在一定風險。因此,有必要限制使用SU進行用戶切換,只有屬于wheel組的用戶才可以使用SU命令來切換用戶。
SU命令限制是由PAM機制來限定的,PAM是由SUN提出的一種認證機制,它通過提供一系列動態鏈接庫和一套統一的API,將系統提供的服務和認證方式分開。使得系統管理員可以靈活地根據服務需要配置不同的認證方式,同時也便于向系統中添加新的認證手段。PAM最初是集成在Solaris中,目前已移植到Linux操作系統之中。
1.2 Linux信號系統安全策略訪問控制模型
安全操作系統的訪問控制模型,將密碼服務與高級別存取控制機制有機地結合起來,形成一個適應各類安全實用的操作系統。該安全服務器將在Linux操作系統的基礎上,目前Linux操作系統主要發行版本的安全性大致處于《TCSEC》標準, 該類模型是從訪問控制的角度描述安全系統,主要針對系統中主體對客體的訪問及其安全控制。
BLP模型的安全策略包括強制訪問控制和自主訪問控制兩部分,強制訪問控制中的安全特性,要求對給定安全級別的主體,對給定安全級別上的主體,僅被允許向相同安全級別或較高安全級別上的客體進行信息服務,任意訪問控制允許用戶自行定義是否讓個人或組織存取數據;DTE模型它通過賦予文件不同的型(type)、賦予進程不同的域(domain)來進行訪問控制,從一個域訪問其他的域以及從一個域訪問不同的型都要通過DTE策略的控制,DTE使域和每一個正在運行的進程相關聯,型和每一個對象相關聯,DTE 系統的內核在做標準的系統許可檢查之前先做DTE許可檢查,如果當前域擁有被訪問文件所屬的型所要求的訪問權,那么這個訪問得以批準,繼續執行正常的系統檢查。
2、安全策略科學化系統共享設計
隨著Linux操作系統的廣泛應用,它的安全性也越來越受到用戶的關注。在實際的使用中用戶希望Linux操作系統可以和360安全衛士等安裝操作一樣的簡單、界面形象直觀、易于管理。我們在應用Linux強大網絡功能的同時,要同時著手于解決其安全性問題,在使用Linux操作系統時要將安全性、科學化的系統共享進行合理化的設計安裝。
2.1合理規劃實現多系統共存,創建使用庫
在Linux操作系統的初步安裝操作中用戶可以先使用雙硬盤,在硬盤中分別安裝Windows和Linux操作系統。第一塊硬盤安裝Windows系統,第二塊硬盤安裝好Linux服務器版和默認安裝GRUB(引導裝載管理器),并確保GRUB安裝在第二塊硬盤的主引導扇區,接好兩塊硬盤的數據線,借助Linux的GRUB進行配置,自動接管雙重系統的啟動選單。
完成Linux系統的初步安裝過程后,可以從一個靜態庫中直接拷貝函數到可執行二進制映像,或者在可執行程序正在運行時從共享庫文件中讀出,從而間接地應用到Linux操作系統之中。構建Linux系統數據庫當多個進程同時使用一個共享庫時,Linux將把共享庫中存放可執行代碼的內存進行共享。
2.2嚴謹系統操作,創建Linux操作系統編程安全策略
Linux操作要求在程序的應用中力求嚴謹、認真的態度,在系統的使用和運行時保證內部信息安全是設計系統安全的最為重要的核心部分。嚴謹的系統操作主要表現在隱藏文件夾的保護,在隱藏文件夾中如果有不想讓別人直接看到的文件,最簡單的辦法就是對文件進行加密處理,也可以在終端通過MVTEST.TEST命令實現。“test”文件會出現在文件夾中但“.test”則不會出現,如果需要查看隱藏文件,就必須要在終端進入對應文件夾用Jsa命令查看,這樣可以達到保護Linux系統內部隱藏文件的作用。
2.3設計密碼保證Linux系統安全
無論是Linux系統的操作還是計算機的其他應用系統,密碼是保證系統安全的第一道防線,因此在Linux系統的必須要有一個強健的密碼設計。密碼設置的原則是足夠長不要用完整的單詞,盡可能要包括數字、字母、特殊字符和大小寫混寫,經常進行修改,所以在Linux系統中必須要遵循以上原則外。
在此之外,啟動和加載程序時,要盡量使用GRUB而不要使用LILO,這樣可以防止使用被定制的內核來啟動系統。此外Linux是一個多用戶操作系統,為了保證系統安全,在登出和鎖定屏幕的時候也是非常重要的,特別是在系統上是唯一用戶時,建議鎖定屏幕保證系統安全。在啟動和加載程序時,ULO在配置文件中可以使用明文口令,這樣可以防止使用被定制的內核來啟動系統。
結語:本系統通過對Linux核心結構和操作系統安全體系的層次結構研究,并且遵循國內、外的相關安全標準,將Linux操作系統安全策略模型和已有技術有機地結合起來,增加了強制訪問控制、可信路徑等安全功能。Linux操作系統安全技術作為計算機信息安全的關鍵部分,對安全策略的研究和建模有重要意義,對Linux操作系統安全的研究在實際應用中還需要進一步地考驗和完善。
參考文獻:
[1]Michael K. Linux應用程序開發[M].電子工業出版社,2005.
linux系統范文3
關鍵詞: Linux系統安全性能 非法黑客
中圖分類號: TU714 文獻標識碼: A
一、Linux概述
Linux是免費使用和自由傳播的類Unix操作系統,它是由全世界各地成千上萬的程序員設計和實現的.其目的是建立不受任何商品化軟件的版權制約的,全世界都能自由使用的Unix兼容產品.
Linux以它的高效性和靈活性著稱.它能夠在PC計算機上實現全部的Unix特性,具有多任務、多用戶的能力.Linux是在GNU公共許可權限下獲得的,是一個符合POSIX(可移植操作系統接口規范)標準的操作系統.Linux操作系統軟件包不僅包括完整的Linux操作系統,而且還包括了文本編輯器、高級語言編譯器等應用軟件.它還包括帶有多個窗口管理器的X-Windows圖形用戶界面,同Windows一樣,允許用戶使用圖形界面對系統進行操作,突破了只能使用命令行字符界面進行操作的局限。
二、Linux一般有四個主要部分:內核、Shell、文件系統和實用工具.
1Linux內核
內核是操作系統的核心部分,是運行程序和管理像磁盤和打印機等硬件設備的核心程序.操作系統的其余部分如Shell、實用工具等都是通過內核而起作用的.
2Linux Shell
Shell是系統的用戶界面,是用戶與內核進行交互操作的接口.Shell是一個命令解釋器,它接收、解釋由用戶輸入的命令并且把它們送到內核.不僅如此,Shell有自己的編程語言用于對命令的編輯,它允許用戶編寫由shell命令組成的程序.Shell編程語言具有普通編程語言的很多特點,比如它也有循環結構和分支控制結構等,用這種編程語言編寫的Shell程序與其他應用程序具有同樣的效果.
Linux提供T像Microsoft Windows那樣的可視化的操作界面----X Window的圖形用戶界面(GUI).它提供了很多窗口管理器,其操作就象Microsoft Windows一樣.
同Linux本身一樣,Shell也有多種不同的版本.
每個Linux系統的用戶可以擁有他自己的用戶界面或Shell,用以滿足他們自己專門的需要.
3 Linux文件系統
文件系統是文件存放在磁盤等存儲設備上的組織方法.主要體現在對文件和目錄的組織上.目錄提供了管理文件的一個方便而有效的途徑.
使用Linux,用戶可以設置目錄和文件的權限和共享程度,以便允許或拒絕其他人對其進行訪問.Linux目錄采用多級樹形結構.用戶可以瀏覽整個系統,可以進入任何一個己授權進入的目錄,訪問那里的文件.
文件系統的相互關聯性使共享數據變得容易,幾個用戶可以訪問同一個文件.Linux是一個多用戶系統,操作系統本身的駐留程序存放在以根目錄開始的專用目錄中,有時被指定為系統目錄.
內核,Shell和文件系統一起形成了基本的操作系統.用戶可以運行程序,管理文件以及使用系統.此外,Linux操作系統還有許多被稱為實用工具的程序,輔助用戶完成一些特定的任務.
4 Linux實用工具
實用工具是能夠完成特定功能的專門程序.標準的Linux都配備或多或少的實用工具.用戶也可以開發自己的實用工具.
實用工具主要有三類:
過濾器:用于接收數據并過濾數據.
交互程序:允許用戶發送信息或接收來自其他用戶的信息.
四、關于Linux操作系統安全性的思考
1 從操作、使用、管理方面提高Linux的安全性問題
作為多用戶的操作系統,Linux允許多個用戶同時訪問系統的資源,同一個用戶也可以同時執行多個任務.同時,現在的計算機大都在網絡環境下運行.多用戶和網絡環境必然存在安全問題.不僅要在理論上重視安全問題,實踐上更不能忽視,在實際使用Linux時要加強安全管理.這個問題如果不重視,解決不好,則容易為系統留下安全隱患,輕則導致系統無法正常使用,影響工作,重則導致重大損失,這種損失程度視Linux的應用環境而異.在操作系統的實際使用、操作、管理中,主要存在如下安全隱患:
1)思想上不重視,認識不到操作系統安全的重要性及安全問題可能帶來的風險;存在麻痹和僥幸心理,認為安全問題不會或不可能發生在自己身上.
2)有關計算機安全的規章制度不健全,甚至根本就無章可循:不認真貫徹和嚴格執行規章制度,甚至就根本不貫徹和執行,使制度形同虛設.
3)有意犧牲安全性來換取工作上的便利.
4)系統管理員和操作員技術水平差,不知怎樣提高系統的安全性.
以上所說,也是造成計算機安全問題的主要原因.因此,必須重視Linux的安全使用與管理問題.
Linux的使用者,稱為用戶,按照權限分為兩種:超級用戶和普通用戶.超級用戶(root)是系統的管理者,具有任意權限,普通用戶具有有限的權限.兩種用戶都是系統資源的使用者,此外超級用戶還承擔包括用戶管理在內的整個系統的管理任務.兩種用戶均對安全使用操作系統負有責任,同時超級用戶還應做好系統的安全管理工作,對整個系統的安全管理負有責任.為了保證系統的安全使用與管理,兩種用戶要密切合作,以提高系統的安全性,為系統的正常運行創造條件.
2關于對Linux的內核進行升級改造以提高其安全性問題
關于增加系統資源自我保護機制的思考
訪問控制是操作系統安全的重要方面.訪問控制是實現既定安全策略的系統安全技術,它對所有資源訪問請求進行仲裁,即根據安全策略的要求,對每個資源訪問請求作出是否許可的判斷,能有效地阻止非法用戶訪問系統資源和合法用戶非法使用資源.TCSEC(可信計算機系統評估準則)把訪問控制作為評價系統安全的主要指標之一,具有不可替代的作用.
在Linux系統中增加或修改安全功能,有多種方案.一是在應用層實現,安全性差、效率低;二是在內核級對系統進行修改或增強,即在現有Linux基礎上,對內核進行面向安全策略的分析,然后加入安全機制,經修改后的系統基本上與原有系統保持用戶接口上的一致,且具有較高的系統效率.這種方法是在現有系統上進行開發,具有安全、高效和接口一致等優點,大多數基于Linux的開發都采用這種方法.在系統層進行安全增強和修改,有兩種方式:一是直接修改內核,安全性控制較好,但內核版本升級后維護工作量大;二是采用軟連接方式,用可加載的Linux內核模塊實現安全功能的增強與擴充,然后將其插入Linux內核,實現與系統的平滑連接,同時保證原有系統的體系結構和源碼不被永久性地改變.
五、提高Linux系統的安全性改進方法
本文將從增強操作系統訪問控制功能的角度,提高Linux系統的安全性.在訪問控制方面,將對Linux作如下改進:
在現有的安全策略基礎之上,增加系統資源的自我保護機制:口令保護.這也就是本文研究的核心內容:基于系統資源自我保護口令的密碼訪問控制機制.文件或目錄的口令保護,相當對文件或目錄加上了一把鎖,要想打開該鎖來訪問文件或目錄,需要一把開鎖的鑰匙,這把鑰匙就是知道該文件或目錄的訪問口令.每個文件或目錄如果設置了訪問保護口令,訪問該文件或目錄時,用戶除了要有相應的權限外,還需知道該文件或目錄的保護口令.
在內核級實現訪問控制,系統調用是實施點,因為它是用戶進程進入核心態的唯一入口,也是發出資源訪問請求的地方.在系統調用中,截獲用戶對系統資源的訪問請求后,根據訪問控制策略,除了實施原有的權限檢查外,還要實施新增的系統資源自我保護口令核對檢查,判斷操作是否可以繼續進行,從而對文件、目錄等資源進行保護.
改進后的系統,將在安全功能方面滿足以下目標:
系統設計應該滿足下面的特性:
(1)安全性:本系統的主要任務是設計安全模塊,將其嵌入Linux系統,根據系統調用截獲的訪問請求,實施增強的訪問控制。
(2)可靠性:可靠性是系統得以正常運行的基本前提.由于安全增強功能將在內核級實現,將作為內核的一部分運行,若出現問題,直接影響系統的可靠性,甚至導致系統崩潰.
(3)實用性:新增安全模塊的設計要充分考慮應用需求,并提供方便的操作界面,進行相關設置.另外系統應在用戶可接受的響應時間內,盡量具有較高的執行效率,在提高系統功能的同時,保證性能不明顯下降.
(4)兼容性;新增的安全模塊不影響原有系統的正常運行,在原系統上開發的軟件能在新系統上正確運行.另外應使安全模塊對系統的依賴性盡可能地小,使之能運行在不同的Linux版本上.
(5)靈活性:允許根據應用需求靈活地允許或禁止某種訪問控制策略的實施,及采用哪種保護級別以限制不同的訪問操作類型.新增的安全功能對用戶來說應該是可選的,以適應對系統的安全性具有不同要求的場合.
參考文獻:
[1]黑客分析與防范技術,張小斌、嚴望佳著,1999. 5,清華大學出版社
linux系統范文4
關鍵詞:EXT4;日志;句柄;i節點
中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2011)14-3443-04
The Analysis of Linux EXT4 File System
LU Ya-wen
(Hangzhou Vocational College of Science and Technology, Hangzhou 310016, China)
Abstract: Compared with EXT3 file system, the theory and data structure of EXT4 file system was introduced.By analyzing the WRITE operation,the procedcure of EXT4 file system was explained,and the study will supply some references for users who choosing core of Linux.
Key words: EXT4; daily record; handle; inode
EXT4文件系統是日志文件系統,100%兼容EXT3文件系統,與EXT3文件系統相比的主要區別是它能快速更新文件存儲。計算機開始從磁盤上讀取或寫入數據都必須保證文件系統中文件與目錄的一致性,所有日志文件中的數據均以數據塊的形式存放在存儲設備中,當磁盤分區時文件系統即被創建,按照文件形式、目錄形式支持存儲數據,組織數據的使用。EXT4提供并使用了一個通用日志層 (jbd) [1],該層既可在文件系統中使用,還能夠應用到其它設備中,對NVRAM設備,EXT4就能支持。當由于軟件或硬件錯誤導致文件系統崩潰時, EXT4使用與e2fsck同樣代碼來修復崩潰的文件系統,因此在出現數據崩潰時,EXT4具有和EXT3同樣的防止數據丟失的優點[2]。但是,上述這些優點不是EXT4獨有的,但只有EXT4才盡數具備,這正是EXT4的優勢。
1 EXT4文件系統的重要數據結構
以下的數據結構都來自2.6.28內核。
1.1 超級塊super_block
/include/linux/EXT4_fs.h
struct EXT4_super_block {
/*00*/ __le32 s_inodes_count; /* 節點數目 */
__le32 s_blocks_count; /* 文件塊數 */
__le32 s_r_blocks_count; /* 保留未用的文件塊數 */
__le32 s_free_blocks_count; /* 可用的文件塊數 */
/*10*/ __le32 s_free_inodes_count; /* 可用的節點數 */
__le32 s_first_data_block; /* 第一個數據塊的索引 */
__le32 s_log_block_size; /* 數據塊大小 */
__le32 s_log_frag_size; /* 文件碎片大小 */
/*20*/ __le32 s_blocks_per_group; /* 每一組文件塊的數目 */
__le32 s_frags_per_group; /* 每一組碎片數目 */
__le32 s_inodes_per_group; /* # 每一組節點數目 */
__le32 s_mtime; /* 最近被安裝到內存的時間 */
…………
/*150*/ __le32s_blocks_count_hi;/* 文件塊數的高32位 */
__le32s_r_blocks_count_hi;/*保留未用的文件塊數高32位*/
__le32s_free_blocks_count_hi;} /* 可用文件塊數高32位 */
合適的特定設備和不適合的特定設備的不同是在,如果在不合適的特定設備中有一位設備是內核無法識別的,內核將會拒絕啟動文件系統。在EXT4中,e2fsck的要求更加嚴格,如果他既不能在合適的特定設備中,也不能在不合適的特定設備中識別出一個設備 ,他一定會終止程序并且不會將它所不能識別的設備模塊化。
與日志相關的數據結構,只有在EXT4文件系統中才會起作用,同樣在EXT3文件系統中也有定義,但是在EXT4文件系統中配合日志文件數據結構才能起到日志文件的功能。
1.2 組描述符 Group Descriptor
組描述符合超級塊一樣,記錄的信息與整個文件系統相關。當某一個組的超級塊或inode受損時,這些信息可以用于恢復文件系統。因此,為了更好的維護文件系統,每個塊組中都保存關于文件系統的備份信息。
struct EXT4_group_desc
{__le32 bg_block_bitmap; /* 文件塊位圖所在的塊的索引*/
__le32 bg_inode_bitmap; /* 存放文件節點位圖的塊的索引*/
__le32 bg_inode_table; /* 文件節點表在外存中的第一個塊的索引*/
__le16 bg_free_blocks_count; /* 可用的文件塊數 */
__le16 bg_free_inodes_count; /* 可用的節點數 */
__le16 bg_used_dirs_count; /* 使用中的目錄數 */
__u16 bg_flag;/*用于32位地址對齊*/
__u32 bg_reserved[3];
__le32bg_block_bitmap_hi; /*文件塊位圖所在的塊的索引的高32位*/
__le32bg_inode_bitmap_hi; /*存放文件節點位圖的塊的索引高32位*/
__le32bg_inode_table_hi;};/*文件節點表在外存中的第一個塊的索引高32位*/
1.3i節點數據結構
struct EXT4_inode {
__le16 i_mode; /* 文件模式,表示文件類型以及存取權限 */
__le16 i_uid; /* 所屬用戶的id的低16位 */
__le32 i_size; /* 節點字節大小 */
__le32 i_atime; /* 節點存取時間 */
__le32 i_ctime; /* 節點創建時間 */
__le32 i_mtime; /* 節點修改時間 */
__le32 i_dtime; /* 節點時間 */
__le16 i_gid; /* 組標志的低16位 */
__le16 i_links_count; /* 連接數目 */
__le32 i_blocks; /* I節點文件塊數 */
__le32 i_flags; /* 文件標志 */
union {
struct {
__le32l_i_reserved1;
} linux1;
struct {
__le32h_i_translator;
} hurd1;
struct {
__le32m_i_reserved1;
} masix1;
} osd1; /* OS dependent 1 */
__le32 i_block[EXT4_N_BLOCKS];/* 文件塊索引數組,數組大小15*/
__le32 i_generation; /* 文件修改 (for NFS) */
__le32 i_file_acl; /* 文件 ACL */
__le32 i_dir_acl; /* 目錄 ACL */
__le32 i_faddr; /* 碎片地址 */
union {
struct {
__le8 l_i_frag; /* 碎片號 */
__le8 l_i_fsize; /* 碎片大小 */
__le16 i_pad1;
__le16 l_i_uid_high; /* I節點用戶id高位 */
__le16 l_i_gid_high; /* I節點組號高位 */
__le32 l_i_reserved2;
} linux2;//1級間接指針數據結構
struct {
__le8 h_i_frag; /* 碎片號 */
__le8 h_i_fsize; /* 碎片大小 */
__le16 h_i_mode_high;
__le16 h_i_uid_high;
__le16 h_i_gid_high;
__le32 h_i_author;
} hurd2; //直接指向物理塊的節點的數據結構的補充
struct {
__le8 m_i_frag; /* 碎片號 */
__le8 m_i_fsize; /* 碎片大小 */
__le16 m_pad1;
__le32 m_i_reserved2[2];
} masix2;//2級間接指針數據結構
} osd2; /* OS dependent 2 */
__le16i_EXTra_isize;
__le16i_pad1;
__le32i_ctime_EXTra;/* 節點擴展的創建時間(nsec
__le32i_mtime_EXTra;/* 擴展的修改時間(nsec
__le32i_atime_EXTra;/* 擴展的存儲時間(nsec
__le32i_crtime; /* 文件創建時間*/
__le32i_crtime_EXTra;};/* 擴展文件創建時間 (nsec
上述結構體中有兩個聯合體,是為了節省空間考慮,因為i節點的索引有三種情況前12個直接指向物理塊,第13個是一級間接指針,第14個是二級間接指針,第15個是三級間接指針,將這三種情況都寫在一個聯合體中,根據實際的情況選擇節點號,根據節點的類型來選擇用聯合體中的那個數據結構。與EXT3不同的是,在 EXT4 文件系統中,增加了5個項,用于擴充索引節點,通過這個結構解決了這對于對精度要求很高的程序的要求。
1.4 i節點的擴展信息的數據結構
這個結構體是日志式文件系統所特有的,用來支持完成日志文件的各種操作[3]。也是2.6內核與2.4內核的不同之處。i節點文件塊組是包含一系列文件節點的塊組。包含了節點的生命期,它通常用于為分配文件塊的決定。我們將文件的數據塊放到他的i節點塊的附近,新的節點放到它的父目錄節點的附近。存放i節點大小的棧不在內存中而在外存上。在縮減的過程中,節點的大小被虛擬文件系統調用EXT4_truncate函數而設置成新的大小,但是文件系統不會將節點的磁盤大小設為0,除非這樣的縮減真的執行了。目的在于節點的大小總是表示正在使用的文件的塊數。當節點數據寫入的時候我們要重新改寫節點磁盤的大小來代替節點的大小[4]。只有在縮減的進行時節程執點的大小和節點所在的磁盤空間的大小才會不一樣,其他情況都應該是一致的。只有在執行文件塊增長或縮減的時候存放節點大小的棧才會被改動。
struct EXT4_inode_info {
__le32 i_data[15];
__le32 i_flags; //i節點標志
#ifdef EXT4_FRAGMENTS
__le32 i_faddr; //第一個碎片的索引
__le8 i_frag_no;//碎片數目
__le8 i_frag_size;//碎片大小
#endif
__le32 i_file_acl;
__le32 i_dir_acl;
__le32 i_dtime;
__le32 i_block_group;//i節點文件塊組
__le32 i_state; /* EXT3的動態的狀態標志 */
__le32 i_nEXT_alloc_block;
/* i_nEXT_alloc_block 是在該文件中最近分配的塊的邏輯號。當然,他沒
有命名,我們用這個來決定相關的分配請求所分配的文件塊的邏輯號。
/*
__le32 i_nEXT_alloc_goal;
/* i_nEXT_alloc_goal是下一個分配塊號的物理標志。他是與此文件分配的文件塊號最相近的物理塊號。當用戶請求分配一個新的物理塊的時候將這個物理塊分配給用戶*/
struct semaphore truncate_sem;//元數據塊,數據的修改信息等
struct inode vfs_inode;
/*虛擬文件系統的節點,通過這個數據可以將日志文件系統EXT4和linux文件系統的頂層虛擬文件系統連接起來*/
};
1.5 句柄handle_t數據結構
此結構是EXT4文件系統用來實現日志式文件操作的有利的數據結構。
struct handle_s
{ transaction_t *h_transaction;//文件操作過程
int h_buffer_credits;//要被弄臟的緩沖區的數目
int h_ref;//句柄中的參照數
int h_err;//出錯數
struct list_head h_jcb;// 磁盤操作的頭節點
unsigned int h_sync: 1; /* sync-on-close */
unsigned int h_jdata: 1; /* 日志數據 */
unsigned int h_aborted: 1; /* 句柄中致命的錯誤 */
};
transaction_t 類型是日志系統的一個內容。它記錄下了數據在各種狀態下的改變情況。
各種狀態為:
* RUNNING: 正在進行新的修改
* LOCKED: 修改在進行但是句柄不接受這樣的改變
* RUNDOWN: 修改在整理中但是還沒有完成對緩沖區的修改。
* FLUSH: 所有的修改完成了但是我們還沒有寫到磁盤上。
* COMMIT: 所有的數據都在磁盤上,寫操作執行
* FINISHED: 完成保持準備接受下一次修改
2 EXT4的文件操作
2.1 EXT的文件操作的數據結構
struct file_operations EXT3_file_operations = {
.llseek = generic_file_llseek,
.read = do_sync_read,
.write = do_sync_write,
.aio_read = generic_file_aio_read,
.aio_write = EXT3_file_write,
.readv = generic_file_readv,
.writev = generic_file_writev,
.ioctl = EXT3_ioctl,
.mmap = generic_file_mmap,
.open = EXT3_open_file,
.release = EXT3_release_file,
.fsync = EXT3_sync_file,
.sendfile = generic_file_sendfile,
};
這個結構體說明了EXT4文件系統的read操作是由do_sync_read函數來實現的,write操作是由do_sync_write函數來實現的,以此類推。只要我們找到相關的函數就能分析EXT4文件系統是怎么實現讀寫操作的。
2.2 EXT4的寫操作
以下分析寫操作的過程,因為日志式的文件的寫操作和其他的文件系統有很大的不同所以以寫操作為例:
圖1是寫操作執行時各個函數嵌套的順序圖。
① file->f_op->write即調用EXT4文件系統中的write操作,在operation結構的解釋中指出write操作用do_sync_write操作完成。
② filp->f_op->aio_write即調用EXT4文件系統中的aio_write操作,在operation結構的解釋中指出aio_write操作用EXT4_file_write操作完成。
LINUX中寫操作是通過sys_write系統調用來實現的,在sys_write函數中完成對文件file 的讀入,判斷正確后調用了vfs_write函數進一步判斷文件的模式是否為寫是否與其他寫操作沖突,如果判斷正確后調用file->f_op->write,這個調用其實是去調用EXT3文件系統中的write操作(即do_sync_write)再調用aio_write(即EXT4_file_write)來完成讀寫制定大小的文件內容到緩沖區中包括對日志的寫。
EXT4_file_write函數的分析如圖2。
3 結束語
本文討論的對象是Linux操作系統中EXT4內核程序,介紹了EXT4的主要數據結構,并通過分析寫操作來解釋日志的工作方式。日志文件系統提高了文件系統的效率,但是也增加了系統的開銷。2.6.28內核中的EXT4文件系統比2.4內核做了較多的改動,如前面介紹的節點的擴展信息,和Htree結構的修正(文中沒有介紹),NTFS文件系統的修正等。總體來說EXT4文件系統是比較完善的日志文件系統。
參考文獻:
[1] 李善平,陳文智.邊學邊干LINUX內核指導[M].浙江:浙江大學出版社,2002.
[2] 涂健,孫輝.Linux2.6(內核下)EXT3文件系統的數據結構及性能分析[J].南昌水專學報,2004(6):8-10.
[3] 李巍.Ext―擴展文件系統的研究[J].信息系統工程,2010(8):133-136.
linux系統范文5
關鍵詞: Linux操作系統;安全策略
一、引言
1.安全目的:要目的包括機密性、完整性、和可用性,機密性是保障用戶的數據不被別人所知道,完整性為了讓數據具有它本身所具有的健壯性,可用性是指數據不能被破壞,應該具有它本身所具有的作用,即可執行性。
2.安全策略:關注信息系統中的信息控制、管理和分發,規定信息系統或產品對敏感信息的處理和使用方式的法律,存在兩種最重要的安全策略模型BLP模型和Biba模型,此處不做詳細介紹。
二 、Linux操作系統安全機制分析
1.身份標識和鑒別,在Linux系統中身份標識與鑒別機制是基于用戶名和口令來實現的,允許系統管理員通過useradd命令為用戶指定唯一用戶名和初始口令,將這個信息放在/etc/passwd文件里面,其實密碼信息文件是在/etc/shadows文件中存儲的。
2.文件訪問控制,Linux對文件包括設備都是通過訪問控制機制來實現的,這種簡單自主訪問控制機制的基本思想,系統每一個用戶擁有自己唯一的UID,并且屬于某一用戶組,而且用戶組都有一個唯一的組號,這些信息存放在/etc/group文件里面,系統中的文件權限主題分為所屬用戶、所屬組、其他用戶,并且在這個基礎之上,每一個文件權限都對應有三個系統權限,分別為r、w、x,稱作讀權限、寫權限、執行權限,可以通過命令進行修改文件或者目錄的權限,所以在這里需要對個文件權限進行妥善管理
3.特權管理,因為Linux操作系統是類Unix系統,所以普通用戶沒有任何特權,而超級用戶擁有系統內的所有特權,所以,在很多現有的基于Linux操作系統內核的操作系統都沒有開放root用戶,這樣很大一部分的原因就是root用戶具有至高無上的權利,它要是被黑客攻擊,那么后果不堪設想,所以建議對root用戶使用的時候,要多加防范。
4.安全審計,它的基本思想就是將審計事件分為系統事件和內核事件兩部分M行維護與管理,系統事件有審計進程syslogd來維護和管理,而內核事件由審計線程klogd來維護和管理。
三、從安全的角度管理和使用Linux系統
1.口令管理,頂起更換口令,而且使用口令的標準是大小寫字母加數字和標點符號混用,提高用戶本身的安全性,這是用戶做的最基本的安全性防護措施。
2.不要將口令輕易告訴別人,而且不建議在很多地方使用同一個口令。可以使用口令管理軟件,將自己的用戶密碼進行管理。
3.用戶權限管理,通過正確限制所有用戶對文件的區別訪問來控制用戶權限安全性。
4.定期升級系統補丁和應用程序補丁。
5.對系統用戶文件進行備份,普通用戶對自己的數據,超級用戶需要備份系統重要配置文件的數據主要配置文件數據在/etc文件夾下面。
6.定期查看日志文件,日志文件是記錄整個操作系統的使用狀況,可以幫助我們安全使用以及排除錯誤的信息支持,例如以下文件:
7.關閉不必要的系統服務,Linux操作系統在安裝的時候包括了較多的網絡服務,如果作為服務器來講的話,這樣使用起來會很方便,但作為用戶的工作站就不太好,會出現安全問題。用戶應該關閉不需要的服務。/etc/ined服務器程序承擔網絡服務的任務,它同時監聽多個網絡端口,一旦收到外界網絡傳來的連接信息,就執行響應的TCP或者UDP網絡連接任務。
8.要確保操作系統端口安全,TCP或者UDP網絡數據通過使用端口號才能夠被正確的指向相應的應用程序,這樣才能正確的訪問該應用程序,而其中的每個程序也被賦予了特別的TCP或者UDP端口號,網絡數據進入計算機后,操作系統會根據它包含的端口號,將其發送到相對應的應用程序中,攻擊者會利用各種手段對目標主機的端口進行掃描和探測,這樣就能確定一些信息,這樣給攻擊者增加了攻擊的可能性,建議使用網絡工具,定期檢測網絡端口的異常,如果發現有可疑端動,立即做出安全性防護措施。
9.用戶在管理自己的目錄的時候,不會讓自己私有的目錄給予別的用戶訪問的權限,除非特定需求的用戶,而且原則是,只能讓其他用戶具有讀取的權限,一般不會賦予寫和執行的權限。在管理目錄的時候,應該遵循各個用戶數據建立自己的用戶目錄,這樣系統便于管理。
10.設置用戶密碼之外,還需要給Linux上每個賬戶可以被賦予不同的權限,因此在建立一個新用戶賬戶時候,系統管理員應該根據需要賦予該賬戶不同的權限,并且管理到不同的用戶組。
linux系統范文6
2、為了解決官方版釘釘不被開源版覆蓋,實現與開源版共存,并且保證圖標放大后不失真,對deb包進行了重新打包:
3、釘釘主程序文件沒有任何變動,保證使用的原汁原味(也沒有能力改動)。
4、添加了一個高清的圖標文件,為了區分開源版的釘釘,修改圖標為“初音綠”。
5、實現與開源版共存,仿造安卓版釘釘的包名稱,定義官方的Linux釘釘打包的名稱為com.alibaba.linux.rimet。