Linux中國

戴文的Linux內核專題:26 配置內核 (22)

你好!本篇我們將繼續配置"kernel hacks",接著我們會配置整個安全系統。

Alpha和s390處理器需要配置下一個特性(Force weak per-cpu definitions)。這個特性修復了一個在這類處理器中普遍存在的定址問題。其他的處理器無需啟用這個特性。

內核轉儲可以用這個特殊的調試工具測試(Linux Kernel Dump Test Tool Module)。這個軟體會允許內核開發者觸發一個假錯誤來導致內核轉儲。內核開發者可以保證轉儲成功執行。

內核提供了不同的錯誤注射模塊來允許內核開發者測試通知(CPU notifier error injection module)、 (PM notifier error injection module) 和 (Memory hotplug notifier error injection module)。通知器提醒系統硬體還在,這對熱插拔很重要。這些錯誤注射模塊在這些通知系統中觸發一個錯誤,那麼開發者就可以測試通知系統的錯誤處理能力了。

"Fault-injection framework"驅動提供了不同的用於測試錯誤處理的工具。

"Latency measuring infrastructure"驅動提供了延遲檢測工具LatencyTop,以找出用戶空間中由於內核執行/任務而被阻礙/干擾的對象。

下面,我們有一個子菜單名為"Tracers",它包含了不同追蹤器的列表。追蹤器是一段監視不同內核函數的代碼。每次某個特定的函數啟動,追蹤器將被調用來檢測函數。

下面的模塊用來測試紅黑樹庫的性能(Red-Black tree test)。紅黑樹是一個排序和搜索演算法。

下面的特性是相同的除了用來測試區間樹庫(Interval tree test)。

在啟動遠程特定系統時,內核同樣可以在其他系統上調試FireWire (Remote debugging over FireWire early on boot) 和 (Remote debugging over FireWire with firewire-ohci)。

printk()函數可以用來列印不同的調試信息,如果這個特性啟用的話(Enable dynamic printk() support)。"printk()"是一個常被討論的系統調用,所以記住這個列印內核相關消息。

這是一個直接內存訪問(DMA)調試驅動(Enable debugging of DMA-API usage)。

Atomic64自我測試檢查系統是否支持原子操作(Perform an atomic64_t self-test at boot)。這是一個32位系統執行64位操作。

這個驅動提供了對於所有可能的RAID6恢復系統的自檢(Self test for hardware accelerated raid6 recovery)。

注意:自檢是底層測試並且在絕大多數系統硬體和軟體開啟和執行前偵查軟體。自檢搜索硬體,失敗的設備等等。自檢也可能被編成應用以測試它本身。

在"Kernel Hacking"菜單中(如果你是用的是像ncurses那樣的菜單介面),有一個名為"Sample kernel code"的子菜單。在以後的文章中,我們會討論如何實現自定義/自製內核模塊。只要記住這裡是啟用你自己的模塊。

Kernel GNU DeBugger (KGDB)(內核調試器)有許多特性可以啟用或者禁用(KGDB: kernel debugger)。這個調試器只工作在通過串列連接的兩個Linux系統之間。

這個特性提供在啟動時顯示額外bzimage解壓消息(Enable verbose x86 bootup info messages)。在內核配置的開始部分你設置了內核加密。

printk()列印不同的消息到dmsg的啟動界面,但是在串列和控制台驅動載入後。啟用這個驅動會使printk()更早列印信息(Early printk)。

下一個驅動和上面的一樣,但是使用EHCI埠(Early printk via EHCI debug port)。

內核可以被設置來觀察堆棧溢出,這樣內核可以更好地管理錯誤(Check for stack overflows)。內核會執行的更慢,但是溢出不會造成如此大的損害。

通過啟用這個,內核頁面可用debugfs見到(Export kernel pagetable layout to userspace via debugfs)。然而,這個會使內核變慢。這個用於調試目的。

內核的寫入錯誤可以被這個特性捕捉到(Write protect kernel read-only data structures)。這個選項會使內核的只讀數據編程進入防寫模式。此調試工具會損害內核的速度。該調試工具還有一個用來調試其自身的工具(Testcase for the DEBUG_RODATA feature)。

為了防止被修改過代碼的模塊執行(由於一個錯誤),接著啟用這個保護性特性 (Set loadable kernel module data as NX and text as RO)。這個調試工具由這個驅動提供(Testcase for the NX non-executable stack feature)。

使用這個選項,內核可以一次刷新一個TLB條目或者整張表 (Set upper limit of TLB entries to flush one-by-one)。

下一個特性是IOMMU調試特性(Enable IOMMU debugging)。這是另外一個調試測試,禁用一些IOMMU特性來用於測試穩定性(Enable IOMMU stress-test mode)。IOMMU代表"input/output memory management unit"(輸入/輸出內存管理單元)。

啟用這個選項回事內核以30s的間隔在changepageattr()系統調用上執行單端測試。這個系統調用會改變頁的屬性。

任何被標以"inline"的內核代碼,如果沒有被表明的也同樣會被GCC操作(Allow gcc to uninline functions marked)。GCC編譯器會增加使得代碼更好的代碼(GCC擅長這麼做)。然而,一些代碼不想被GCC操作。

下面的驅動提供了對"copyfromuser()"系統調用的基本測試(Strict copy size checks)。copyfcromuser()從用戶空間拷貝數據塊到內核空間中。

這裡還有一個自檢;它用於NMI(NMI Selftest)。

現在,我們會進入"Security Options",如果你使用像ncurses的基於菜單的介面時。第一個選項允許訪問內核中存儲的鍵和驗證令牌(Enable access key retention support)。這有很多原因用到,像訪問加密文件系統。

下面的選項用於創建並密封/開啟鍵((TRUSTED KEYS))。加密的鍵使用這個驅動加密/解密(ENCRYPTED KEYS)。

啟用這個特性鍵可以在/proc中看到(Enable the /proc/keys file by which keys may be viewed)。

使用這個安全特性,額外的限制可以應用到syslog中(Restrict unprivileged access to the kernel syslog)。

如果啟用這個選項,那麼用戶可以選擇不同的安全模塊(Enable different security models)。不然,將會使用默認。如果你不完全理解安全或者如果你對使用默認感到沒問題,那麼就禁用它。

這個驅動提供了securityfs文件系統(Enable the securityfs filesystem)。

當啟用這個特性後,鉤子將會被增加到網路和套接字安全中(Socket and Networking Security Hooks)。這些鉤子是訪問控制。

IPSec網路鉤子(also called XFRM networking hooks)在這個選項啟用後實現(XFRM (IPSec) Networking Security Hooks)。安全鉤子同樣可被文件使用(Security hooks for pathname based access control)。

下一個驅動提供了對Intel可信賴執行技術的支持(Enable Intel(R) Trusted Execution Technology (Intel(R) TXT))。

用戶可以設置無法為用戶空間保留的內存定址範圍(Low address space for LSM to protect from user allocation)。開始點是0。用戶在此選項中輸入結束點。對於大多數平台而言,65536是一個建議值。

SELinux(在內核安全的文章中提到)是一種流行的Linux安全模塊(NSA SELinux Support)。SELinux存在很多選項和特性。啟動參數決定了當內核執行(NSA SELinux boot parameter)時SELinux是否啟動{1}或者不啟動{0}。SELinux可以被配置成在root用戶需要時臨時禁止(NSA SELinux runtime disable)。用戶可以啟用這個特性開發並測試新的策略(NSA SELinux Development Support)。AVC統計被這個特性收集並被存儲 (NSA SELinux AVC Statistics)。對於checkreqprot標誌有一個默認設置;"1"意味著SElinux會檢查應用請求的保護,"0"會默認使用內核對mmap和mprotect系統調用的保護(NSA SELinux checkreqprot default value)。存在很多的SElinux策略;用戶可以設置他們不希望SELinux excede的最新版本(NSA SELinux maximum supported policy format version)。

另外一個Linux安全模塊(LSM),SMACK,也被內核支持(Simplified Mandatory Access Control Kernel Support)。

TOMOYO是另外一個被支持的LSM(TOMOYO Linux Support)。在學習模式中允許被添加的最大條目數目在下面的特性中設置(Default maximal count for audit log)。接下來,這個選項允許/禁用TOMOYO在沒有策略載入器下被激活(Activate without calling userspace policy loader)。策略載入器的位置在這裡被配置((/sbin/tomoyo-init) Location of userspace policy loader),觸發執行的可執行文件在這裡設置((/sbin/init) Trigger for calling userspace policy loader)。

再說一次,內核支持另外一個LSM - APPArmor(AppArmor support)。像SELinux一樣,可以為AppArmor設置默認的啟動參數(AppArmor boot parameter default value)。

Yama是另外一個LSM(Yama support)。如果啟用這個特性Yama可以與另外一個LSM一起使用(Yama stacked with other LSMs)。

這個驅動讓內核可以使用多個密鑰鏈來驗證進程(Digital signature verification using multiple keyrings)。

非對稱鍵在這個特性中支持(Enable asymmetric keys support)。

內核可以保存並維護一個哈希和重要系統文件的列表(Integrity Measurement Architecture(IMA))。那麼,如果惡意軟體改變了一個重要的文件,內核會知道因為文件或者可執行文件被使用時內核會檢測哈希值。強烈建議啟用這個特性。

如果啟用這個特性會加入額外的安全屬性(EVM support)。可以用下面的選項設置版本(EVM HMAC version)。有兩個選項分別是version 1和2。

記住所有的Linux安全模塊的不同了么(LSMs)?好的,下面可以設置默認模塊(Default security module (AppArmor))。

下一篇中,我們會配置"Cryptographic API"。我估計還會剩下兩篇文章。在這之後,我們會討論其他的內核主題。

先睹為快:本篇之後,關於配置還有一篇。接著,我們會完成編譯並安裝內核。

致我的粉絲:你隨意給我致信或者給我電子郵件來建議你希望在以後的內核文章中想要看到的主題。我已經收到了一些來自這個系列讀者的一些建議。請隨意給我更多建議。

via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-22.5017/

譯者:geekpi 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國