天天看點

Ubuntu系統微調

本章講述了基本的基于指令行界面的系統配置方法。在學習本章前,你需要先閱讀 Ubuntu 系統安裝提示, 第 3 章.

<a></a>

Ubuntu 使用 System V 的 init 腳本系統。參閱 init程式, 第 2.4.1 節的介紹。

最簡單的控制 init 腳本的方法是改變 /etc/default 目錄下,與 init 腳本同名的檔案裡的環境變量設定。 例如,/etc/default/hotplug 可以控制 /etc/init.d/hotplug 的行為。檔案 /etc/default/rcS 可以用來定制 motd、sulogin 等為預設啟動。

如果你不能通過設定這些變量來得到你所需要的行為,你可以去修改 init 腳本:它們都是配置檔案。

可通過 /etc/syslog.conf 配置系統日志記錄方式。如果想為日志檔案上色可安裝 colorize 軟體包。參閱 syslogd(8) 和 syslog.conf(5)。

有一部分硬體優化的配置工作 Ubuntu 留給了系統管理者。

hdparm

硬碟存取優化。效果顯著。

危險。務必先閱讀 hdparm(8)。

hdparm -tT /dev/hda 測試硬碟存取速度。

hdparm -q -c3 -d1 -u1 -m16 /dev/hda 加速新型 IDE 系統。(有一定風險。)

setcd

壓縮磁盤存取優化。

setcd -x 2 減速至 2x speed。

參閱 setcd(1)。

setserial串行接口管理工具集。

scsitoolsSCSI 硬體管理工具集。

memtest86記憶體硬體管理工具集。

hwtools低級硬體管理工具集。

irqtune:修改裝置的 IRQ 優先級,使那些需要高優先級和快速服務的硬體(例如,串行接口、數據機)獲得它所要的資源。對序列槽/數據機加速後獲得原來 3 倍的吞吐量。

scanport:掃描 I/O 空間的 0x100 至 0x3ff 位址段,查找已安裝的 ISA 裝置。

inb:一個小巧的黑客工具,用來閱讀 I/O 端口資訊并将其值轉換成十六進制和二進制。

schedutils

Linux 日程安排工具包。

包括 taskset、irqset、lsrt 和 rt。

再加上 nice 和 renice(不包括在工具包内),就可對程序的日程安排進行全面的管理。

使用 noatime 選項挂載檔案系統可有效提高檔案的讀取速度。參閱 fstab(5) 和 mount(8)。

通過 proc 檔案系統,Linux 核心可直接調節某些硬體參數。參閱 通過 proc 檔案系統調整核心, 第 7.3 節。

Ubuntu 中有許多專門的硬體配置工具包。其中有不少是針對筆記本電腦的。這兒有一些有趣的軟體包:

tpconfig - 一個配置觸摸屏裝置的程式

apmd - 進階電源管理(APM)工具

acpi - 顯示 ACPI 裝置資訊

acpid - ACPI 使用工具

lphdisk - 識别 Phoenix NoteBIOS 下的隐藏分區。

sleepd - 筆記本電腦處于非工作狀态時進入休眠

noflushd - 讓空閑硬碟進入減速狀态

big-cursor - X 下的巨型滑鼠指針

acme - 激活筆記本電腦上的“多媒體按鈕”

tpctl - IBM ThinkPad 硬體配置工具

mwavem - Mwave/ACP modem 支援

toshset - 通路大部分 Toshiba筆記本電腦的硬體接口

toshutils - Toshiba 筆記本電腦工具集

sjog - 激活 Sony Vaio 筆記本電腦上“Jog Dial”功能的程式

spicctrl - Sony Vaio 控制器程式可增亮 LCD 背光

ACPI 是一種比 APM 更新的電源管理系統。

某些軟體包需要專門的核心子產品。它們已經包含在許多最新的核心源碼中。如果遇此問題,則需要手動打上最新的核心更新檔。

PAM(Pluggable Authentication Modules 可嵌入認證子產品)允許你控制使用者是如何登入的。

如果想在控制台終端不用密碼直接登入系統,可按下面的方法修改 /etc/pam.d/login 檔案的内容,風險自負。

該方法亦可用于 xdm、gdm,實作無密碼 X 控制台。

相反,如果你希望強化密碼政策,可安裝 cracklib2 并按下面的方法修改/etc/pam.d/passwd:

使用一次性登入密碼激活帳戶也很有用。要實作該功能,在 passwd 指令後加上 -e 參數,參閱 passwd(1)。

要設定系統最大程序數,可在 Bash shell 中設定 ulimit -u 1000 或設定 PAM 的 /etc/security/limits.conf 檔案。其它參數如 core 等的設定方法與之類似。PATH 的初始值可在 /etc/login.defs 中先于 shell 啟動腳本設定。

PAM 的文檔位于 libpam-doc 軟體包内。其中 The Linux-PAM System Administrator's Guide 一文涵蓋了 PAM 配置、可用子產品等内容,文檔中還包括了The Linux-PAM Application Developers' Guide 和 The Linux-PAM Module Writers' Guide。

這是 Richard M. Stallman 的一句名言,位于舊版 info su 頁面末尾。别擔心:在 Ubuntu 中,目前版本的 su 使用 PAM,是以你可以用 /etc/pam.d/su 下的 pam_wheel.so 來限制任何使用者組使用 su 的能力。下面的操作将在 Ubuntu 系統中賦予 adm 使用者等同于 BSD wheel 使用者組的權限,而且該組成員不需要密碼就能使用 su 指令。

一些有趣的使用者組:

如果 pam_wheel.so 不帶任何 group== 參數,root group 就是 su預設的 wheel group。

adm group 可以閱讀日志檔案。

cdrom group 可在本地賦予一組使用者通路 CD-ROM 驅動器的權限。

floppy group 可在本地賦予一組使用者通路軟碟驅動器的權限。

audio group 可在本地賦予一組使用者通路聲音裝置的權限。

src group 擁有源代碼以及 /usr/src 目錄下的檔案。它可以在本地賦予某個使用者管理系統源代碼的權限。

對于管理桌面或低級别的系統管理者,可設定他們為 staff 成員,該類成員可以在 /usr/local 下工作并且可以在 /home 下建立目錄。

使用 sudo 最主要的目的是保護自己少做蠢事,我認為使用系統時使用 sudo 比總是使用 root 帳号更好。

Ubuntu 系統預設使用 sudo,來工作,你建立的第一個帳戶将自動加入到 admin 組, admin 組的成員擁有 sudo 的權限。

樣例中的配置,設定“staff”使用者組成員可通過 sudo 執行任何 root 權限的指令而“src”使用者組成員隻可執行規定的一部分 root 權限的指令。

使用 sudo 的好處在于隻需一個普通使用者密碼登入,并且所有的活動都受到監控。用它為低級别的系統管理者賦權是個好主意。例如:

當然,如果你知道 root 密碼(絕大部分在家安裝系統的使用者都會知道),就可以在普通使用者下執行任何 root 指令:

(我想我該嚴格限制 admin 帳号的 sudo 特權,但對于家中的伺服器,就不用考慮那麼多了。)

想了解其它允許普通使用者執行 root 權限指令的程式,可以看看 super 軟體包。

對于 Internet 超級伺服器,inetd 會在系統啟動時通過 /etc/rc2.d/S20inetd(for RUNLEVEL=2)加載,S20inetd 是一個指向 /etc/init.d/inetd 的符号連結。本質上,inetd 允許一個運作中的守護程序(daemon)調用其它多個守護程序,以減輕系統的負載。

當某個服務請求到達,系統會查詢 /etc/protocols 和 /etc/services 中的資料庫,确定該請求所指定的相關協定和服務,接着 inetd 會在 /etc/inetd.conf 資料庫中查找普通 Internet 服務或 /etc/rpc.conf 中查找基于 Sun-RPC 的服務。

為了系統安全,請在 /etc/inetd.conf 中關閉所有不用的服務。涉及到 NFS 和其它基于 RPC 的程式時需要激活 Sun-RPC 服務。

有時,inetd 并不直接打開請求的服務,而是在 /etc/inetd.conf 中将該服務名作為的參數,打開 tcpd TCP/IP 守護程序包裝程式。這時,tcpd 首先登記請求并使用 /etc/hosts.deny 和 /etc/hosts.allow 進行附加的檢查,然後再運作相應的服務程式。

如果新版的 Ubuntu 系統進行遠端通路時出現問題,可以在 /etc/hosts.deny 中注釋掉“ALL: PARANOID”,如果有該行的話。

更多資訊參閱 inetd(8)、inetd.conf(5)、protocols(5)、services(5)、tcpd(8)、hosts_access(5) 和 hosts_options(5)。

有關 Sun-RPC 的更多資訊參閱 rpcinfo(8)、portmap(8) 和 /usr/share/doc/portmap/portmapper.txt.gz。