Linux 系管師初階班講義

来源:百度文库 编辑:神马文学网 时间:2024/04/27 12:30:51
Linux 系管師基礎班講義
作者:李忠憲shane@mail.spps.tp.edu.tw
黃自強dd@webmai.spps.tp.edu.tw
2003/09/30 修訂
Linux 概念:
由於 Free 一詞容易造成誤解,目前談論 Linux 概念是使用「open source」這個字眼,其實 Linux 會成為 Open Source 理念的代名詞是一種集體創作的結果,由於眾多電腦高手(俗稱駭客 Hacker)對這個小玩具的關愛,撰寫並提供許多免費工具(身為駭客,這樣做是含有濃厚炫技的意味在裡面),使得 Linux 慢慢成長茁壯,成為一套穩定犀利的作業系統,真要歸屬起著作權來還真的是非常困難,因此 Linux 也就變成全民共同擁有的財產,許多腦筋動得快的商人將 Linux 包裝起來販賣,還取了好聽的名字叫做 Red Hat 、Mandrake......什麼的,Linux 就有了各種不同發行版本,Linux 採用的 GPL 授權條款並不禁止將 Linux 拿來販賣,因為商業推廣有助於系統的持續發展,但無論你如何透過 Linux 來發財,最重要的是必須將原始碼公開,否則將違反 Linux 的版權合約。
由於所有 Linux 的開發商都必須將原始程式碼公開,別人拿去參考或修改出更好用的程式,一樣可以拿來賣錢和發行,這就會形成一種良性競爭(就像駭客之間互比高低一樣,不會為了幾個臭錢把獨門技術隱藏在法律後面),因此我們可以預期 Linux 的永續發展不是沒有道理的。
早期的 Linux 由於缺乏金援,通常是由個人依自己專長興趣來參與開發工作,現在系管師中還有不少是為了要寫一個好玩的電動而開始寫程式的,一定能明白手工打造的樂趣和痛苦,所以早期的 Linux 發展相當遲緩,也由於個人經濟能力有限,買不起眾多周邊設備,所以早期 Linux 能支援的硬體實在不多,而且經常支援一些罕見的設備(當然與提供該驅動程式的作者的工作環境有關),後來有些志同道合的作者開始組織團體,向有錢的企業募款來支援系統程式的開發,例如:Apache、X window(注意:沒有 s)......就是屬於這一類的產品,也由於這些慈善團體的犧牲奉獻,Linux 才能發展出今天的規模。
系統特色:
一般學術界討論 Linux 的特色,總是喜歡與微軟的 Windows 來做比較,實際上這就像拿橘子比蘋果一樣。Linux 作為一套仿自 Unix 的作業系統,當然我們要與 Unix 比比看,為何它能夠成為未來作業系統的主流,主要原因只有兩個:
將一切視為檔案(store all data in file),換句話說, 無論是硬體裝置或是核心軟體功能,通通以檔案方式存在,這樣就把一切系統資源(無論硬體或軟體)的作業模式統一了,因此作業系統核心就具有獨立完整性,能夠跟硬體周邊或應用程式分離開發,同時作業系統核心程式也較為精簡,甚至可以將系統精簡到只要一片磁片就可以裝得下的地步。
開發模式不同,這個特色是由於第一項特色而得以實現,實際上 除了核心程式以外,其它的一切工具程式、驅動程式或應用系統都可以由不同作者分別開發,每個人獨立開發一部分,組合起來就能運作,大部分時候系統程式完全不須修改,偶爾需要小幅修改以促進相容。 這種開發模式,就稱為網路開發。Linux的作者 Linus 說:Linux 是一套真正的網路作業系統,因為它自己本身就是網路的產物。
磁碟命名法與磁區分割:
Linux 檔案系統需要運用兩種不同磁區型態,那就是 ext3 和 swap。swap 用來作為虛擬記憶體使用,在多工環境作本文切換(content switch)而 RAM 不夠使用時,會將 RAM 的資料轉換到磁碟上,以避免記憶體不足的問題發生,由於這個原因因此 swap 總空間大小必須是主記憶體的兩倍(最低,至少需要 32 MB,目前最高上限為 2GB)。
新版本的 Linux 是使用 ext3 (type 83)作為檔案系統,比起舊的 ext2 格式速度更快、修復省時、更可靠安全,因此建議一律使用 ext3 不要再用 ext2。
Linux 將一切裝置視同為檔案,當然磁碟機也不例外,所以 DOS 時代常用的磁碟代號,在 Linux 上不能使用,取而代之的是檔案命名法, Linux 將一切裝置定義在 /dev 這個資料夾內,軟碟機稱為 fd,軟碟機編號為 0~7,第一台軟碟機就稱為 /dev/fd0;硬碟稱為 hd,硬碟編號是根據排線的位置來計算,第一條排線第一顆硬碟稱為 hda,依此類推,最多到 hdt。光碟機由於接在硬碟排線上,也被視為硬碟,為了使用上的方便,通常會替光碟機取別名為 /dev/cdrom,至於 SCSI 硬碟比較特殊,是使用 sd 來命名,編號方式與一般硬碟相同。
由於大容量硬碟通常因應使用上的需求都會加以分割,因此我們也必須熟悉磁區命名的方法,磁區分為兩種:主要磁區(primary)與延伸磁區(extension),延伸磁區可以繼續進行複數分割,稱為邏輯磁區(logical)。由於延伸磁區是為了作虛擬分割而存在的,因此一顆硬碟上最多只能有一個延伸磁區,並且因為磁區分割表容量的限制,在一顆硬碟上主要磁區加上延伸磁區不得超過 4個,其編號為 1~4,而邏輯磁區則沒有數量限制,使用號碼 5~32。假設在一顆硬碟有 hda1、hda2、hda3、hda5、hda6,沒有 hda4 這並非錯誤,這是因為這顆硬碟有兩個主要磁區(1和 2)、一個延伸磁區(3),延伸磁區並分割為兩個邏輯磁區(5和 6)的緣故。
特別要注意的是這些裝置畢竟不同於一般檔案,所以大部分檔案操作指令都不支援,舉例來說,您要切換到第二顆磁碟機不能使用下面的指令:
cd  /dev/hdb1
正確的方法是先將該磁碟機掛載到檔案系統上,然後再使用它,例如:
mount  /dev/hdb1  /home
cd  /home
磁區的分割,對安裝 Linux 來說非常重要,主要是因為:
分割開的磁區比較安全,萬一其中一個磁區壞了,不會影響到其它磁區
分割開的磁區可以分別設定不同的磁碟配額,這對磁碟空間的管理非常有幫助
為了系統的最佳化,我們會根據不同需求來劃分磁區,分別敘述如下:
作為學校官方網站用途:由於不提供給使用者使用,通常只需將 /var 單獨分割,以便為網站內容和存取紀錄作資料保全。
作為師生個人網站用途:需將 /home 單獨分割,以便為每個使用者作資料保全,以及分配磁碟配額。
作為郵件伺服器用途:需將 /home 及 /var 單獨分割,以便開立大量帳號,並分配磁碟配額給郵件信箱。
作為 X window 軟體平台(工作站):需將 /usr 單獨分割,以便為各種辦公軟體預留安裝空間。
作為資料庫伺服器:需將 /usr 和 /var 單獨分割,以便為資料庫系統預留安裝空間。
多重開機系統:需將 /boot 單獨分割,以便保護多重開機系統不受硬碟損壞影響。
檔案伺服器:請先自行分割大容量磁區(為與中文相容,建議割成 FAT32),再將該磁區掛載成 /share。
安裝 Linux:
使用圖形介面安裝 Linux 8.0 非常的容易,跳過歡迎畫面,進入設定步驟,首先是選擇語系,在這裡只能讓安裝畫面變成中文,與將來系統使用哪種語系無關。

選擇鍵盤,由於系統有自動偵測功能,通常使用預設值即可。

選擇滑鼠,由於系統有自動偵測功能,通常使用預設值即可。

選擇要升級還是安裝。

選擇安裝類型,個人桌面平台,將會安裝圖形介面及應用程式,約需1.7GB;工作站等級,則多安裝程式開發套件,約需2.1GB;伺服器等級,不安裝圖形介面,約需 900MB,如果安裝所有伺服器程式,則約需1.5GB。如果選擇安裝 everything,則約需 5GB。

接下來是安裝過程中最困難的部分:分割磁區,如果您的硬碟容量小於 5 GB,建議使用自動分割功能,以避免發生遺憾。大容量硬碟請根據用途來劃分磁區,請參考前一小節的說明。

使用 Disk Druid 分割磁區,其實沒那麼難,分割新磁區時有三個磁區是必要的:/、/boot 和 swap,如下圖。若要作為師生網頁主機,請務必依照磁碟配額來計算 /home 所需要的空間大小。

新增 /home 磁區時,直接輸入所需空間大小,並請選擇 fixed size。

多重開機系統請依預設值,選用 GRUB,在這裡可以設定 GRUB 密碼,如果稍候要以手動方式設定,請參考最後一章的說明。

多重開機系統請安裝於 MBR,建議不要使用其他多重開機系統,例如:magic boot。因為這些軟體安全性欠佳。

設定網卡,請直接按 edit 編輯網卡設定值,如果稍後要修改設定,請參考【系統組態檔】/etc/sysconfig 小節的說明。

在底下畫面輸入網路基本組態。

ipchains 安全設定,由於校園內已建置防火牆,建議可以不要啟用 ipchains。

定義系統語系,這裡定義的語系才會真正影響到系統的開機設定。一般說來當伺服器使用,都會選擇 english,當工作站用時才會考慮使用繁體中文。

選擇時區,請從世界地圖選擇台灣。

設定管理員密碼,並為自己新增一個使用者帳號(9.0 版改在第一次安裝完畢時設定)。

新增帳號時,密碼的選用非常重要,請不要使用純數字或英文字母,請參雜大小寫或特殊符號,以免密碼被猜到。(9.0 版改在第一次安裝完畢時設定)

密碼使用 MD5 及 shadow 套件,使用預設值即可。

選擇安裝套件,如下圖之 X window 和 Desktop Environment 由於很耗用系統資源,建議不要裝。

將要安裝的類別打勾後,可以按 Detail 連結,進一步來挑選要安裝的細項。

使用樹狀模式展開所有項目,可以逐一挑選想安裝的程式,這種安裝方式比較困難,並不適合初學者。

挑好要安裝的套件後,系統會檢查是否有相依性套件需要一併安裝,通常會讓系統自動將這些套件裝上。

安裝進度

製作開機片,建議要製作,已備不時之需。

安裝顯示卡,如果您要使用 X window,這裡務必要設定正確,否則事後很難補救。

安裝螢幕類型,通常使用預設值即可。

設定好顯示卡和螢幕後,請測試看看能否進入圖形環境。

設定完 X window 就算是完成了第一階段的安裝,重開機後系統會自動執行設定精靈(setup-agent),首先是設定日期時間(9.0 版改成先設定使用者帳號)。

線上升級,以學術網路如此壅塞的環境,建議跳過這個步驟。

安裝額外套件,如果您有第四片和第五片光碟片,這個時候可以拿出來安裝。

檔案結構:
Linux 檔案結構是遵循 FHS 標準,該項標準可以在http://www.pathname.com/fhs 找到,底下介紹常見的幾個資料夾及其用途:
目錄名稱 用    途    說    明
/home 用來建立使用者的家目錄,由於使用者必須將其個人資料儲存於家目錄裡,包含:個人郵件、設定檔、個人網站......等,因此如果使用者眾多,需要相當大的硬碟容量才夠用。為了資料的安全起見,通常會將此資料夾放在獨立的磁區上,以免因系統當機而導致資料流失。
/dev 是用來擺放各種周邊硬體裝置的地方,除了前面介紹的磁碟機外,其他像 CPU、主機板、音效卡、網路卡、數據機、數值運算器......等等,也都是以檔案形式存在。比較特別的是由於 Linux 是網路作業系統,因此遠端連線也被視為是一個裝置(終端機),命名為 tty。
/etc 是用來擺放各種系統設定檔,這些檔案都是文字檔格式, /etc 下面有兩個子資料夾: X11 和 skel,/etc/X11是用來擺放 X window 相關設定檔,而 /etc/skel 則用來擺放使用者預設組態,該組態會在建立使用者帳號時,自動複製到使用者家目錄。
/sbin 用來擺放開機程序會使用到的相關執行檔,需要有 root 身分才能執行。其他非開機使用的工具程式,若為一般使用者有權限使用的,則擺放於 /bin 資料夾中。如果是使用者自行安裝或開發的工具,則擺放在 /usr/bin 或 /usr/sbin 當中(端看是否與開機程序相關)。
/lib 顧名思義是系統的函式庫,用來擺放 /bin 和 /sbin 中之執行檔執行時所需要的函式模組。
/mnt 用來掛載可卸除的儲存裝置,例如:軟碟機、光碟機......等等。
/usr 這個資料夾擺放可以分享給遠端使用者的檔案,包含可執行檔在內。通常會擺放套裝軟體,例如:各種伺服器、字典、統計軟體、資料庫系統、辦公軟體......等等。如果您的伺服器是要提供應用程式服務,這個資料夾最好放在獨立的磁區,容量不能太小。
/usr/local 則是擺放使用於系統管理的套裝工具,必須是與系統核心無關的獨立套件,不會因為系統升級或該工具本身需升級而影響系統運作,通常這些套裝工具需分享給其他使用者或遠端使用者,例如:apache......等。
/var 擺放各種程式的 log 檔、lock 檔以及程式運作所需要的 spool 或暫存空間。
/proc 這是一個虛擬的檔案系統,用來建立與系統核心運作的溝通管道,可以用來讀取監測核心運作的資訊,或送出資訊給核心處理。舉例來說,想查看 CPU 的使用狀態,使用下面的指令即可:
cat  /proc/cpuinfo
請自行列出 /proc 目錄內容,看看除了 CPU 外,還能查看哪些資訊。
透過 proc 虛擬檔案系統來設定 kernel 並不常用,但由於這些核心功能也被視同為檔案,因此我們可以簡單的使用導向符號 > 來設定它們(不建議這樣做),例如要設定 hostname,可以用底下的指令:
echo  redhat.spps.tp.edu.tw  >  /proc/sys/kernal/hostname
基本指令:
由於 Linux 是一套網路作業系統,因此可以允許同時多人上線操作,事實上每個人還可以同時處理許多不同的工作,這種作業模式就稱為多人多工模式。當我們從主控台登入時,可以使用 Ctrl+Alt+F1~F6 來切換不同文字模式終端機,另外 Ctrl+Alt+F7 保留給圖形模式(X window)使用,每個虛擬終端機實際上是各自獨立的,可以用不同身分登入進行不同工作。
如果我們不在機器旁邊,但是卻有管理該機器的需要時,我們可以使用 telnet 軟體從遠端登入系統,telnet 雖然是最常用的方法,但並不是最好的方法,為了系統安全我們建議使用 ssh 來進行遠端登入。在後面的章節將會仔細討論 ssh。
底下就來介紹純文字模式下的常用指令,在介紹指令之前,首先有些規矩必須先說明:
Linux 系統會區分大小寫,因此 abc.txt 和 abc.Txt 會被視為不同檔案。
指令與參數之間必須有空格,不可以連著打,例如: cd/ 這道指令在 Linux 上就無法執行。
執行目前目錄下的程式時,前面仍然必須加上路徑,不可直接寫檔名,例如: ./install。(如果想要跟 DOS 一樣忽略路徑名稱,必須預先在環境變數 PATH 中加入 . 這個搜尋路徑)。
指令如果同時用到多個選項,可以寫在一起,例如:ls  -a  -l 和 ls  -al 是一樣的,選項沒有順序關係,因此剛才的指令也可以寫成 ls  -la。
通配字元用法與 DOS 不太一樣,【?】可以代替任意一個字元,【*】則是代表不定個數的任意字元,除此之外,還可以使用列舉式,例如:a0[1-3].txt 代表 a01.txt  a02.txt  a03.txt,如果號碼不連續則使用逗號分隔,例如:a0[a-b,C,1].txt。
可以使用重導向符號 >  <  >> 來變更輸出入的目標裝置,例如:ls *.jpg > a.txt 是將 ls 的結果輸出到 a.txt 檔案內(原本會輸出在螢幕上),pwdck > /dev/null 則是不顯示執行結果(/dev/null 是黑洞,/dev/zero 是白洞), mail < myletter 是將 myletter 的檔案內容輸入給 mail 指令(原本會從鍵盤讀取),ls *.gif >> a.txt 是將 ls 的結果添加到 a.txt 檔案內。
當從鍵盤輸入多行文字時,可以使用 Here Document 功能,例如: cat << 123 > a.txt
可以使用管道符號,將某程式的輸出導向成某程式的輸入,用法與 > 很像,但目的地不一樣 (前者是另一支程式,後者是一個檔案)。
一次可以執行多道命令,中間以 ; 區隔,例如: cd / ; ls -al
自動補字功能,當檔案名稱或目錄名稱太長時,只要打出前面幾個字再按 TAB 自動將檔名補齊
執行命令時如果在指令後方加上 &,命令就會在背景執行,用這個方式同時可以執行多個程式(這就是所謂多工)
常用指令介紹:
線上求助:
man info
系統管理:
login,logout(exit) shutdown,halt reboot date hostname
domainname ps kill top free
ntsysv chkconfig service dmesg env
drakconf[linuxconf] qe rpm ntsysv chconfig
watch
帳號管理:
passwd,gpasswd useradd,groupadd
chsh,usermod su whoami
w (who) pwck,grpck setquota
檔案管理:
cd,pwd ls
more,less grep cp
mv rm mkdir rmdir cat
head,tail df,du tar zip,unzip gzip,ungzip
whereis locate,slocate find mount,umount parted(Partition Editor)
chmod chgrp chown mount -o loop
應用程式:
wget up2date
Mandrake VS. RedHat 管理介面比一比
Mandrake RedHat 說明
drakxconf linuxconf 綜合管理工具
XFdrake --- X Window 設定工具
drakfloppy gfloopy 建立開機片
draknet internet-druid 網路設定工具
drakservices redhat-config-service 服務設定工具
userdrake redhat-config-users 使用者管理員
drakboot grub 多重開機
drakautoinst kickstart 自動安裝
draksec redhat-config-securitylevel 系統安全設定
drakgw --- 自動設定DHCP連線分享
drakxtv --- 電視功能設定
drakbackup --- 備份設定工具
--- procman 系統監測工具
--- ethereal 封包監測工具
--- redhat-config-http HTTP伺服器設定
--- redhat-config-nfs NFS伺服器設定
logdrake redhat-logviewer 日誌瀏覽器
diskdrake disk-druid 磁碟分割工具
harddrake hwbrowser 硬體設備資訊
localedrake redhat-config-language 修改語系
livedrake up2date 套件升級
rpmdrake redhat-config-packages rpm套件管理
MC檔案總管:
MC 的全名是 Midnight Commander,是 Unix Like 系統上功能非常強大的檔案管理程式,在 DOS 的年代有一套Cview 跟 MC 很像,用過的人應該對 MC 不陌生,MC 除了進行一般性的檔案操作例如:新建目錄(F7)、刪除(F8)、拷貝(F5)、移動(F6)、搜尋、修改權限(Ctrl+x  c)、修改擁有者(Ctrl+x  o)......之外,還能進行遠端傳輸、瀏覽打包檔(.tar)(Enter)、執行程式(Enter)、救回刪除檔案、目錄比對、檔案打包壓縮(F2)、文書處理(F4)....等工作,因此是系管師不得不用的工具。
MC 內附完整線上說明,直接按 F1 即可翻閱,按 F10 離開。多數功能都有快速鍵的設計,如果記不住快速鍵,也可以從選單選取,請按 F9 開啟選單,延伸選單上還有一些專門提供給進階使用者的額外功能,可以使用 F2 來開啟,其它功能鍵用法都寫在 MC 畫面的正下方,如果忘記了很容易查閱。
MC 的外觀分隔成左右兩個面板,是為了讓使用者能在兩個不同目錄間進行快速拷貝、移動而設計,我們可以按 TAB 鍵在兩個面板上切換游標。這兩個面板可以分別設定檢視模式,包括:詳細檔案資訊(Ctrl+x  i)、檔案內容摘要(Ctrl+x  q)、樹狀結構、自訂顯示欄位、排序方式、或改為只顯示一個大面板,修改這些設定請按 F9,然後從上方選單選擇要修改的面板(Left或Right),直接點選選項即可。
如果想要一次處理多個檔案,請在檔案上按 Ctrl+t 來選取檔案,再按一次則會取消選取,這個功能特別是在進行多檔拷貝的時候特別有用。
想要將整個資料夾打包壓縮成一個檔案嗎?透過 MC 要做這件事真的非常簡單,請進入要壓縮的資料夾,先確認有哪些檔案要打包壓縮,接著按 F2 選打包為 tar.gz,按 Enter 即可,打包好的檔案將會放在上一層目錄裡,請確認您對上層目錄有寫入的權限,否則打包壓縮的動作會失敗。
透過 MC 可以在本地端與遠端進行雙向檔案傳輸,MC 除了自己有專用通訊協定外,也可以使用 FTP 來連結遠端主機,使 MC 搖身一變成了 FTP 工具,以 MC 專屬通訊協定進行連結,請先以 TAB 決定要使用的面板,然後輸入 cd   /#mc:username@ip ,想要使用 FTP 連結遠端主機,請輸入 cd  /#ftp:username@ip ,你也可以透過面板選單來操作,請參考前一小節之說明。
想要救回刪除檔案,做法與上述步驟類似,但請輸入 cd  /#undel:hda2 (磁區名稱),救回檔案時會先讀取該磁區內的所有 inode ,以便計算出可以完整救回的檔案有哪些,這會耗掉半天以上的時間,所以除非萬不得已不要使用這個功能。
MC 的檔案搜尋功能很強,尤其是內文搜尋功能,我們可以按 F9,從命令(Command)選單選取搜尋檔案(Find File)功能,設定搜尋條件可以使用正規表達式(regular expression),選擇區分或不區分大小寫,搜尋結束後可以進行編輯或其它檔案操作,建議先選擇面板化(panelize),這樣會把搜尋到的檔案一一列在面板上,就像是開啟一個資料夾一樣,然後就可以進行任何檔案操作,這樣做可以獲得比較多的功能。
關於系管師某些日行安全檢查工作,MC 已經內建在延伸選單(Ctrl+x  !)裡,例如想要知道目前系統上被植入哪些特洛伊木馬,我們可以檢查具有 Suid 權限的檔案,如果列出來的檔案中,有沒看過的或非系統安裝的檔案,請儘速查明後刪除。
使用 MC 提供的文書編輯器功能強大, 後面章節介紹的各種組態檔編輯,也請使用 MC 來進行。MC 相較於其它文書編輯器比較不同的地方是它有提供剪貼簿,因此可以進行跨檔案拷貝,請開啟來源檔案,用 F3 功能鍵標示出要拷貝的段落,按 Ctrl+f 或者是按 F9 從檔案(File)選單選擇 Copy to file,接著離開編輯模式開啟目的地檔案,將游標移到要複製的位置,按 F9 從檔案(File)選單選擇 Insert file,這樣就可以跨檔編輯了。
權限管理:
由於 Linux 將所有軟硬體裝置通通視為檔案,因此對於 Linux 來說權限管理只要在意檔案權限的設定即可,這一點與 windows 作業系統將權限細分為管理權、操作權、擁有權、遠端登入權、虛擬連線權、檔案操作權、服務操作權......等等複雜化的做法有非常大的不同,雖然 Linux 的做法比較單純,但是並不表示 Linux 比較不安全,相反的 Linux 的安全等級比 windows 更早獲得美國國家安全局的認證。
Linux 對檔案的權限管理分別透過檔案擁有者與存取權限來管理。每個檔案都必須設定擁有人和擁有群組,有時候某使用者帳號被移除,但檔案忘記移除,這些檔案就會變成無人擁有,這種檔案視同 root 所擁有。
Linux 將存取權限區分為四個部分,分別是:setuid(設定身分權限)、owner(使用者權限)、group(群組權限)、other(其它使用者權限,相當於 windows 下的 everyone),每個部分都由三個位元構成,除了 setuid 以外,其餘三種權限的三個位元分別代表讀取、寫入和執行,當我們用 ls 指令去觀察時,程式會使用文字來表示存取權限,例如:
rwxr-xr-x
其中 r 代表讀取,w 代表寫入,x 代表執行,- 代表沒有權限,我們將上述權限三個一組分解開來,分別是擁有者:可讀寫執行,群組成員:可讀及執行,其它使用者:可讀及執行。上述權限也可以用八進位數字 755 來表示。
setuid(設定身分權限)是一種比較特殊的權限,三個位元的意義與前面所說的不相同,分別代表以擁有者身分執行(setuid)、以群組成員身分執行(setgid)、以及刪除時額外檢查使用者身份(sticky bit,當以 Samba 來共享資料夾,但又開放寫入權限時特別有用,可讓使用者僅對自己建立的檔案有完整權限,而無法刪除或修改別人的檔案),例如:sendmail 程式擁有者為 root,擁有群組為 mail,而存取權限為 755,當該程式被設定以群組成員身分執行時,使用者 shane 去執行程式(寄信),在程式執行期間可以暫時成為 mail 群組的成員,因此能讀寫 mail 群組才能讀寫的檔案(例如:/var/spool/mail/maggy,也就是說 shane 把信寄給 maggy),從這個例子可以了解 setXid 對於伺服器功能非常的重要。我們如果用八進位數字來表示 sendmail 的完整存取權限,應該寫成 2755 而不是 755,用 ls 指令來觀察,則以底下的文字來表示:
rwxr-sr-x
注意到群組權限中的執行權限從 x 變成了 s ,表示該程式執行時會暫時獲得擁有群組的身分。
多重開機設定:
舊版Linux 使用 LILO 作為多重開機系統,而新版本改採 GRUB,GRUB 是使用圖形介面感覺跟純文字介面的 LILO 差蠻多的,當然它能支援較大硬碟以及更多作業系統類型。除此之外,兩者間還有其他明顯差異:
編修方式:開機選單出現後,可以線上編修組態
命令模式:提供 grub shell ,可透過主控台進行偵錯與系統設定,並支援 RS232 連線
組態生效時機:GRUB 修改組態後立即生效,不需要重開機
無硬碟環境:支援從網路載入系統(系統載入前可以先啟動網卡,支援 dhcp),因此可以被應用於無硬碟環境
安全性:GRUB 可以設定密碼,並能將密碼以 MD5 編密
GRUB 設定檔位於 /boot/grub/grub.conf ,也可以從 /etc/grub.conf 修改,組態檔設定範本如下:
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title  Red Hat Linux (2.4.18-14)
root (hd0,1)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /initrd-2.4.18-14.img
title  single mode
root (hd0,1)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/ single
initrd /initrd-2.4.18-14.img
title  FreeBSD
root (hd0,2,a)
kernel /boot/loader
title  DOS or Windows NT / Windows 9x
root (hd0,0)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
系統組態檔:
/etc/fstab
這個檔案是用來定義系統可用的儲存裝置,通常在增加硬碟或增刪磁區之後(進階班課程),需要由系管師手動修改設定,另外掛載遠端目錄時也需要修改它,例如:NFS、windows共享資料夾.......等等。
各欄位說明如下:
裝置名稱(fs spec): 要掛載的裝置名稱,如果該磁區有定義磁區標籤也可以直接指定 LABEL(想定義磁區標籤請使用 e2label 指令),如果要掛載 NFS 或者是 windows 網芳共享目錄,請輸入 :,例如:file.spps.tp.edu.tw:/share。如果是虛擬裝置則將裝置名稱指定為 none。
掛載名稱(fs file):要掛載到哪個目錄下,如果要掛載的目錄不存在請自行用 mkdir 建立一個空目錄,然後才能掛載成功,由於 swap 磁區沒有掛載點,請直接輸入 swap。
磁區類型(fs vfstype):指定要掛載的磁區是哪一種檔案系統,Linux 支援的檔案系統非常多,比較常用的除了 ext2、ext3、swap 外,還有 windows 系統使用的 vfat ,光碟片用的 iso9660,或是使用 auto 讓系統自動偵測(通常用於可抽換式磁碟機)。
功能選項(fs mntops):指定掛載方式,常用選項包括:rw(可讀寫),suid(讓設定身分權限有效),dev(是字元或區塊寫入裝置),exec(可執行程式),auto(自動掛載),nouser(使用者不能自由掛載或卸載),async(非同步讀寫)(以上七個選項合稱 defaults),其它還有 ro(唯讀),noauto(手動掛載),owner(擁有者才能掛載),kudzu(開機自動偵測),usrquota(開啟使用者磁碟配額功能,僅適用於 Linux 磁區),grpquota(開啟群組磁碟配額功能,僅適用於 Linux 磁區),iocharset(指定雙位元檔名解譯方式,此選項僅適用於 windows 磁區)。
備份(fs freq):當進行備份時(使用 dump 指令),是否需要處理,0 代表不要備份。
檢查順序(fs passno):開機時檢查磁區是否損壞(使用 fsck 指令)的順序,0 代表開機時不檢查。
/etc/fstab 內容範例
裝置名稱 掛載名稱 磁區類型 功能選項 備份 檢查順序
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
LABEL=/home /home ext3 defaults 1 2
/dev/hda5 swap swap defaults 0 0
none /proc proc defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 iocharset=cp950,noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto iocharset=cp950,noauto,owner,kudzu 0 0
/etc/inittab
該檔案控制六種不同啟動模式的運作程序,六種不同啟動模式分別是:
0.關機
1.單人修復模式(single mode)
2.多人無網路文字環境
3.多人文字環境
4.未使用
5.多人圖形環境
6.重新開機
初學者最常用的是修改 initdefault ,如果該行是
id:5:initdefault:
則表示開機後會使用圖形介面進行登入,登入後自動開啟 X window,若將 5 改成 3,那麼開機後會使用文字模式登入,必須要下 startx 指令才會開啟 X window。
這個組態檔還可以控制 Ctrl+Alt+Del 的行為,通常按下這三個按鍵,將導致系統 shutdown,如果要關閉這個功能,請將下面這一行 remark 起來:
ca::ctrlaltdel:/sbin/shutdown  -t3  -r  -now
/etc/hosts
這個檔案用來定義主機名稱,其作用相當於 windows 下的 LMHOSTS,當該單機需要解析主機名稱時,會先查詢此檔案,由於校園網路內普遍已建置 DNS 伺服器,因此不設定也無所謂。
底下幾種理由我們會設定這個檔案:一、為了改進區域網路的性能,二、確保重要服務不會因為 DNS 故障受到影響,三、某些主機因安全考量並未定義在 DNS 內,那就必須自行將名稱加到 hosts,以確保名稱能正確解析。如果在安裝 Linux 時,未設定網路組態,預設值是:
網路位址 DNS 領域名稱 主機名稱
127.0.0.1 localhost.localdomain localhost
為了增進系統效能,我們會將自己這台主機的正式網域名稱加入到該檔案,請不要把上面那一行移除,因為這樣會造成名稱解析函式無法解析 localhost。
/etc/resolv.conf
這個檔案用來定義本地端進行名稱解析時的預設伺服器,通常我們必須將它設定在校內專用的 DNS 上面,設定方式如下,同時可以設定多台 DNS(一般會設定三台,最多可以設到八台):
search spps.tp.edu.tw
nameserver  192.57.1.23
nameserver  163.21.249.166
nameserver  163.21.249.167
/etc/rc.d/rc.local
這個檔案用來自行加入開機指令稿,當我們希望某些程式在開機完成後就自動啟動執行,我們只要將指令加入到這個檔案內就可以了,舉例來說:希望開機後能自動將 WAM 伺服器執行起來,請在最後一行加入:
/usr/libexec/apache_wam/bin/apachectl start
/etc/sysconfig
各位系管師在修改某些系統設定後,是否發現在重新開機後,設定值又被改了回來,造成有些系管師只好把修改的指令寫到前面所介紹的 /etc/rc.d/rc.local 檔案內,要求系統開機時一再重改設定,這樣做當然也行得通,但並不是最好的方法。
事實上開機時會使用到的設定值都保存在 /etc/sysconfig 這個資料夾裡,我們只需要去修改相關的設定檔,就可以要求系統在下次開機時,使用新的設定值,而不需要事後改來改去,這個資料夾內由於設定檔眾多,詳細設定資訊可以參考 /usr/share/doc/initscripts-x.xx/sysconfig.txt ,現在只介紹幾個常用的設定檔:
/etc/sysconfig/clock
這個檔案是用來指定時區,範例如下:
ZONE="Asia/Taipei"
UTC=false
ARC=false
/etc/sysconfig/desktop
這個檔案是用來指定 X window 的預設桌面系統,範例如下:
DESKTOP="GNOME"
/etc/sysconfig/network
這個檔案用來控制網路設定,用途蠻多的,我們比較關心的是其中的 hostname 設定,和 /etc/hosts 不同的是,這個檔案是要讓系統在開機後決定自己的主機名稱用的,設定範例如下:
NETWORKING=yes
HOSTNAME=wam.spps.tp.edu.tw
/etc/sysconfig/static-routes
這個檔案用來定義開機後要啟動的靜態路由,假使學校內使用兩個 /24 的網路,而主機是擺放在其中一組 C 級網段中,那麼定義靜態路由是最簡便能讓網路連通的方法,定義方法如下:
eth0 net 192.57.2.0 netmask 255.255.255.0 gw 192.57.1.10
/etc/sysconfig/i18n
這個檔案是用來定義語系以及字型,中文語系設定方法如下:
LANG="zh_TW.Big5"
SUPPORTED="zh_TW.Big5:zh_TW:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
SYSFONTACM="iso15"
若在文字模式想要暫時改回英文語系,以避免螢幕輸出變成亂碼,可以直接在 shell 鍵入
LANG=en
/etc/sysconfig/networking/devices/ifcfg-eth0
這個檔案是用來定義網路卡的起始設定值,以避免使用 ifconfig 指令改完 IP後,重開機設定又消失了。隨著我們要修改的網卡不同,設定檔的檔名也不同,這裡所寫的 eth0 是指第一片網卡,如果要修改第二片網卡,請修改 ifcfg-eth1。
設定範例如下:
GATEWAY=192.57.1.253
TYPE=Ethernet
DEVICE=eth0
HWADDR=00:40:95:30:3f:a3
BOOTPROTO=none
NETMASK=255.255.255.0
ONBOOT=yes
IPADDR=192.57.1.251
USERCTL=no
PEERDNS=no
NETWORK=192.57.1.0
BROADCAST=192.57.1.255
/etc/chinese/xcin/xcinrc
這個檔案是用來定義中文輸入法,有許多系管師跟筆者一樣慣用倚天鍵盤排列方式,因此使用預設的輸入法非常痛苦,這個時候就必須修改這個檔案,要修改的是底下這一行(分號後面是註解,不會設定的話可以參考):
(KEYMAP 0)     ; 0:zozy, 1:et, 2:et26, 3:hsu
改成:
(KEYMAP 1)     ; 0:zozy, 1:et, 2:et26, 3:hsu
Xinetd 網路服務:
xinetd 服務俗稱叫 super server,原因是它管制著非常多的被動式服務,所謂被動式服務是指平時該伺服器不會常駐執行,只有當用戶端連上來時,伺服器才啟動執行,這類的服務包括:telnet、ftp、imap、pop3......等等。xinetd 在這類服務中扮演分配封包、啟動伺服器的白手套工作,當用戶端的要求封包送來時,xinetd 會讀取 /etc/service 以便從封包埠號查出服務名稱,接下來 xinetd 會讀取 /etc/xinetd.d 資料夾中與服務名稱同名的設定檔,舉 telnet 為例,該檔案(/etc/xinetd.d/telnet)內容為:
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
這個檔案告訴 xinetd 要如何啟動對應的伺服器程式,以上面的設定為例,將會以 root 身分啟動 /usr/sbin/in.telnetd 程式來執行,執行時 xinetd 會將原始封包擺放在主控台的輸入佇列中,以方便讓 telnet 主程式讀取。
使用被動式服務除了比較省系統資源外,另一個好處是在服務被啟動前,能夠先進行存取控制,對於那些簡單而無法自行實作安全機制的服務來說,多了一層保障(雖然安全性還是不夠),過去舊版 inetd 必須依靠 Tcp Wrapper 來進行網址過濾,新版的 xinetd 則可以自己進行這個工作,在上面設定檔中加入:
no_access = IP 或網域名稱,IP 或網域名稱
就可以禁止表列中的機器存取該服務,要使用正面表列定義可以存取的機器,請使用以下設定:
only_from = IP 或網域名稱,IP 或網域名稱
由於 telnet 已經是一個不安全的服務,我們想要直接將它關閉不提供服務,只要修改上面檔案中的 disable = no 改成 disable = yes,然後將 xinetd 重新啟動就可以了,啟動方法很多,例如:您可以使用底下的指令
/sbin/service xinetd restart
需要系管師自行修改的服務設定檔,除了 telnet 以外,還有 imap 和 pop3,設定範例如下:
/etc/xinetd.d/imap
# default: off
# description: The IMAP service allows remote users to access their mail using \
# an IMAP client such as Mutt, Pine, fetchmail, or Netscape \
# Communicator.
service imap
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
log_on_success += HOST DURATION
log_on_failure += HOST
}
/etc/xinetd.d/ipop3
# default: off
# description: The POP3 service allows remote users to access their mail \
# using an POP3 client such as Netscape Communicator, mutt, \
# or fetchmail.
service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/ipop3d
log_on_success += HOST DURATION
log_on_failure += HOST
}
由於 xinetd 可以用 root 身分存取 shell 指令,因此有被駭客入侵之虞,有些系統對安全要求比較高,不喜歡用 xinetd,這時候就會另行安裝提供主動式服務的套件,例如:gnu-pop3d ......等等。
Windows 檔案系統(SAMBA):
Linux 在校園網路的角色,仍然是當成伺服器使用居多,由於校園內是 Linux 和 windows 的混合網域,因此使用網芳來分享檔案才是最可行的解決方案,也比較能讓師生接受,其他像使用 ftp、web 的方式恐怕還是屬於系管師的最愛。
Samba 是使用 smb 通訊協定來與 windows 作業系統溝通,smb 其實就是 windows 網芳所用的 nbt 通訊協定,有關它的運作原理已經在「網路名稱系統」課程裡有詳盡的介紹,在此不再贅述。隨著 Samba 與 Linux 系統的整合,目前已經可以將 Samba 運用在許多不同解決方案裡,包含底下幾種應用:
以 Samba 取代 windows NT或2000 當成網域主控站使用,並可使 Linux 帳號與 windows 帳號同步更新。 將 Samba 加入成為 windows 網域成員,這時將允許使用 windows 網域密碼而非 Linux 密碼來登入系統。 將 Samba 作為 WINS 伺服器或 WINS 代理器,以便管理電腦清單(適用於網域內沒有 windows Server 時,常與第一類應用一起使用)。 將 Samba 作為 WINS 客戶端,此時 Linux 僅能瀏覽並連線到網域內,如同一台 win98 一樣。
在實際應用之前,我們必須先介紹幾個 windows 網域的概念,透過下表的比較,應該可以對 Samba 有較透徹的理解,請務必將它們分辨清楚:
分類 Samba參數 Windows概念 說明
基本設定 workgroup 工作群組或網域名稱 為與 Lan manager 名稱相容必須使用大寫英文字母(包含底線和連字號),後面可接數字,最多八個字
netbios name 主機名稱 雖然可以接受空格和中文名稱,但開啟網芳時,有時候會發生清單遺失的錯誤(此現象在 windows 平台上也會發生)
security 安全認證 Samba 將 windows 網路安全認證區分為四種,分別說明如下: user:以網域使用者身份來驗證權限,相當於把 Samba 當成獨立伺服器或網域主控站(使用 windows 挑戰與回應認證方式,密碼採用明碼或使用 DES 編密)。 share:資源共享,相當於把 Samba 當成 win98,僅檢查密碼而不需要使用者名稱,或者是連密碼也不檢查,僅檢查資料夾是否為唯讀。 server:透過另一台主機來驗證使用者,相當於把 Samba 當成備份主控站的運作模式(當認證失敗時,會自動變成 security=user)。 domain:當 Samba 加入到 windows 網域成為成員伺服器時,必須透過網域內的主控站(一定是 winNT或2000 )來提供使用者驗證服務,這個模式是否能成功運作,端賴於有否在 windows server 上進行將 Samba 加入為網域成員的動作。
encrypt passwords DES編密 定義密碼傳輸時要使用明碼還是使用 DES 來編密,早期 win98 工作群組是使用明碼,後來為了安全改用 DES 編密,建議用 DES 編密。
client code page 語系 用來設定 Samba 如何處理要傳送出去的共享名稱,例如:client code page = 950,就是告訴 Samba 把檔名編成繁體中文(big5碼)再送到 client 端。由於我們的 win98 本來就是中文系統,所以可以不用設定此選項。
encoding system 中文檔名相容選項 預設值為 cap,使用 quoted printable 的編碼方式來表示中文檔名,以解決中文在 Linux 上不相容的問題,如果您使用網芳上傳網頁,這個選項將會造成超連結錯誤。
網芳電腦清單相關設定 os level 作業系統等級 這是當 windows 網域選舉主電腦瀏覽器時必備的資訊,預設值是 20 僅能贏過所有工作站成為候選主電腦瀏覽器,如果您要拿 Samba 當 WINS,請將它設定為 65。
local master 本地端主瀏覽器 這是定義要不要讓 Samba 參加主瀏覽器選舉,在 windows 上如果要修改此項設定需透過修改系統登錄的方式,但在 Samba 上只要直接指定參數即可。
domain master 網域主瀏覽器 同上,但能依不同網域同時維護多個電腦清單,主要用於將 Samba 作為信任網域 PDC 或 WINS 時。
dns proxy 轉送查詢給 DNS 當電腦名稱查不到時,要不要問 DNS,這個功能只有把 Samba 當 WINS 時才用得到。
wins suport WINS伺服器 定義要不要把 Samba 當成 WINS 伺服器。
wins proxy WINS代理器 定義要不要把 Samba 當成 WINS 代理器(注意: WINS 代理器並非 WINS 伺服器,是用來幫未設定 WINS 組態的 win98 連上 WINS 伺服器的代理者)。
wins server 指定 WINS 伺服器 告訴 Samba 要去向哪一台 WINS 伺服器註冊名稱。
name resolve order 節點類型 可以設定四種名稱解析方式的先後順序,相較於 windows 將節點類型區分為四種,Samba 顯得自由度更高,分別比較如下: h 節點:最常用的節點,其順序為:wins bcast lmhosts hosts p 節點:其順序為:bcast wins lmhosts hosts b 節點:其順序為:bcast lmhosts hosts w 節點:其順序為:wins lmhosts hosts
Samba 預設值為 lmhosts hosts wins bcast
帳號管理驗證相關設定 os level 作業系統等級 這是 windows 網域用來決定網域主控站(AD 操作主機)時必備的資訊,預設值是 20 僅能 加入網域或群組成為工作站,如果您要拿 Samba 當主控站,請將它設定為 65。
domain logons 網域主控站 定義要不要把 Samba 當成 windows 網域主控站。
password server 密碼驗證主機 指定由哪一台電腦負責管理帳號。這個選項與上個選項互斥。
logon drive netlogon 所在磁碟代號 當 win98 登入到主控站時,會將 netlogon 先行掛載在某個磁碟機代號,以方便後續作業,例如:執行登入指令稿......等。預設值是 z: ,這個功能只有將 Samba 當成網域主控站時才有用。
logon home 指定使用者家目錄 用來指定使用者家目錄的所在位置,例如:\\%N\%U。這個功能只有將 Samba 當成網域主控站時才有用。
logon path 指定使用者巡視設定檔 用來指定使用者巡視設定檔的所在位置,例如:\\%N\%U\profiles。這個功能只有將 Samba 當成網域主控站時才有用。
logon script 登入指令稿 指定使用者登入指令稿,當指定同一個檔案時,就是 windows 所謂的系統登入指令稿,當使用 %U 為每個使用者指定不同檔案時,也就是 windows 所謂的使用者登入指令稿,這個功能只有將 Samba 當成網域主控站時才有用。
共享資源相關設定 path 實體目錄 要共享的資料夾放在哪個實體目錄。
public world shareable 是否公開讓所有人都可看到,如果設定這個選項,那麼不管有沒有登入系統都將可以看到此共享資源。 預設值為 yes。
guest ok 免登入存取 允許使用者在未登入系統的情形下,存取共享資源。預設值為 no。
browseable 列在分享清單上 是否將共享名稱列在分享清單上,windows 上如果要將某共享資料夾隱藏,是在分享名稱後面加上 $ ,而在 Samba 上請將此選項設為 no,這個功能在 public=yes 的情況下無效。預設值為 yes。
read only 唯讀分享 定義該共享資料夾是唯讀分享。預設值為 yes。
writeable 完整分享 定義該共享資料夾是完整分享。 這個選項與上個選項互斥,你只能設定其中一個。預設值為 no。
valid users 授權使用者 定義哪些使用者可以連線到這個資料夾,未被定義的其他使用者則不允許連線。每個使用者以空格隔開,也可以使用群組成員,例如:@teacher 代表 teacher 群組內的所有使用者。這個選項如果省略,代表所有使用者都被允許連線。
invalid users 未授權使用者 定義哪些使用者不可以連線到這個資料夾,未被定義的其他使用者則允許連線。定義方式同上。這個選項與上個選項互斥。
write list 完整分享清單 定義 valid users 裡面有哪些使用者可以讀寫刪除此共享資料夾中的檔案,其它未定義的使用者將只擁有讀取權限,定義方式同上。省略時,代表所有的 valid users 都擁有完整權限。
read list 唯讀分享清單 定義 valid users 裡面要限制哪些使用者只能唯讀,其它的使用者則擁有完整權限,定義方式同上。這個選項與上個選項互斥,你只能定義其中一項。
Samba 組態檔範例
#======================= Global Settings=========================
# 總體設定
[global]
# 群組名稱
workgroup = cc
# 相當於 win98 上的電腦說明,當未設定 netbios name 時,也會拿來當成電腦名稱,
server string = Samba Server %v
# 准許讓那些 ip 來存取。
hosts  allow= 192.xxx.0.0/255.255.0.0
# 預設是 yes ,但沒使用印表機的話可設為no或者乾脆 # 起來。
#load printers = no
# 訪客帳號
;guest account = nobody
# Samba紀錄檔位置
log file = /var/log/samba.%m
#安全認證等級(詳見說明)
security = user
#如果您想要繼續用NT主機帳號來做密碼認證的話(不建議,因為這樣就不能用 Linux 來管理使用者了)
; password server = xxps1
#把純文字密碼,用 DES(MD4) 編密認證
encrypt passwords = yes
#網卡(通常不需要設定)
interfaces = 192.xx.1.6/24
# 讓 Sabma當作本地端主瀏覽器,來蒐集網路上的芳鄰中的電腦資訊。
local master = yes
# 讓 Sabma當作網域主瀏覽器,來蒐集網路上的芳鄰中的電腦資訊。(把 Samba 當 PDC 或 WINS 時才能使用)
domain master = yes
#當網路上找不到主瀏覽器時,要不要把自己優先提升成為主瀏覽器
preferred master = yes
# OS Level 高於 64 的話就會在主瀏覽器的選舉中打敗 win2000 Server,也就是說這台 Linux Samba 將會取得網域主瀏覽器的地位。(把 Samba 當 PDC 或 WINS 時才能使用)
os level = 65
# 當Logon Server,可以用來控制Client 端的巡視設定檔,及登入批次檔。(把 Samba 當 PDC 時才能使用)
domain logons = yes
#以電腦〔機器〕為單位的登入指令稿
; logon script = %m.bat
# 以使用者〔人〕為單位的登入指令稿
; logon script = %U.bat
# 系統登入指令稿,配合下面的 netlogon 設定, 把 U.bat 放入Netlogon目錄中,學生登入時,windows98就會自動執行 U.bat。U.bat的內容請參考下一小節的介紹。
logon script = U.bat
# 以上三個選項請依需要擇一設定,原來的設定是 %U.bat(%U.bat=UserName.bat)也就是每個人都可以有自己的開機程序,1500個師生,會設死掉,因此建議使用系統登入指令稿,每個學生都一樣就好了。
# 要不要用Samba當 WINS,這個選項與下個選項是互斥的,請不要同時設定
; wins support = yes
# 把 Samba 當 WINS client,指定它向該伺服器註冊共享名稱
wins server = 192.xx.1.10
# 如果分享的資源有使用中文長檔名,則要設code page
client code page=950
# 定義檔名轉譯規則,當此選項設定時,使用者上傳的中文檔名會被轉譯成類似 quoted printable 的編碼方式,這將造成使用者的網頁無法正常瀏覽,建議不要使用此選項
; coding system=cap
#============================ Share Definitions ==============================
# 共享資源設定
# user 的家目錄設定,路徑用named pipe 方式寫成: \\stu\homes
[homes]
comment = Users‘ Home Directories
browseable = no
writable = yes
# 要做Domain Logon server 的話,當然您需要先把該目錄建好,並設為大家都可讀取
[netlogon]
comment = NetLogon Service
path = /home/netlogon
guest ok = yes
writable = no
share modes = yes
# 要不要使用巡視設定檔
[Profiles]
path = /home/profiles
browseable = no
guest ok = yes
;印表機設定[略]
# 每個人都能存取的暫存區,注意這樣做將會成為病毒的溫床
;[tmp]
; comment = Temporary file space
; path = /tmp
; read only = no
; public = yes
# 讓 @users 這個群組的人都可以寫入 /home/works 這個目錄【繳交作業】,但是在 server 上的 /home/works 這個實體目錄,也要設成 chmod g+w /home/works 才可真正寫入。只有當安全等級設為 user 或 share 時,才有意義。
[public]
comment = 繳交作業
path = /home/works
public = yes
writable = yes
printable = no
write list = @users
繳交作業專案研究
目標:使用 Samba 作為學生繳交作業的伺服器,達成底下的功能:
學生直接用拖曳方式從網芳繳交作業,已經繳交之作業只有繳交者可以讀取、編輯和刪除 老師可以讀取、移動、刪除、編輯任何一位學生的作業 可執行檔等類型的檔案無法上傳,以避免感染病毒 老師可以直接透過網頁觀看所有的學生作業
實作:
Samba 部分
[global]

[homework]
comment = 繳交作業
path = /home/teacher/shane/public_html/album
public = no
guest only = no
browseable = yes
writable = yes
valid users = shane,@s92
admin users = shane
veto files = /*.pif/*.lnk/*.exe/*.eml/*.bat/*.nws/*.vbs
delete veto files = yes
force create mode = 0600
force directory mode = 1777
說明:
admin users:這個選項用來宣告資料夾管理員,管理員可以使用 root 權限來管理該資料夾,這將使管理員可以對資料夾內的檔案做任何事情,而不必先取得所有權,請設定給負責管理作業的老師帳號 veto files:這個選項用來禁止所列舉的檔案進入共享資料夾內,設定匹配條件時可以使用 ? 和 * 兩種通配字元,並且以 / 分隔每一個條件,這裡禁止的檔案包括有:可執行檔、批次檔、捷徑、DOS 程式捷徑、電子郵件、VB 指令稿等 delete veto files:對於已經存在於共享資料夾內的非法檔案,是否要予以刪除,這裡設定為 yes force create mode:上傳的檔案將會被強制修改權限,這裡設定成 0600 ,因此不是上傳者將無法對該檔案進行任何操作 force directory mode:新建立的資料夾將會被強制修改權限,這裡設定成 1777 ,因此任何經過驗證的使用者都可以自由上傳檔案到資料夾內,但只有上傳者才能刪除自己的檔案
網頁部分:安裝 WAM 1.62 ,使用內建的 album.cgi 圖庫管理員程式來觀看所有的作業
http://student.server.tp.edu.tw:12000/album.cgi?user=shane
使用 Samba 當 PDC 的應用
把 Samba 當 PDC 使用時,透過登入指令稿可以將 Linux 所提供的其它服務整合在一起,例如:Apache,方法是透過 Samba 分享資料夾,會自動將使用者家目錄分享為 homes 這個名字,然後在登入指令稿裡幫使用者在桌面上建立捷徑,登入後直接可以在桌面上做網頁。
@rem 不在登入的dos視窗顯示回應
@echo off
@rem 先校正個人電腦的時間與Vod Server 一樣,以利撥放vod影片
@net time \\vod  /set  /yes
@rem 需要的話,也可以連線網路磁碟機,例子中的 \\webmail 就是 Linux samba 主機
@net  use  h:  \\webmail\homes
@net  use  s:  \\webmail\share
@net  use  w:  \\webmail\works
@if exist c:\jstemp\ok.txt goto end
............略................
:end
@rem 直接刪除桌面的內容
@deletree c:\windows\desktop\*.* /y
@rem 自動拷貝您想要放到使用者電腦桌面上的捷徑或檔案
@xcopy \\webmail\netlogon\desktop\*.*    c:\windows\desktop\*.*  /e  /y
@rem 設定每個人的家目錄,並且在桌面拷貝一個〔我的家目錄〕的捷徑icon,像這樣
@rem 然後按滑鼠右鍵,編輯它的內容指定路徑給這個捷徑,如: \\webmail\homes

@rem 自動設定瀏覽器的Proxy以及首頁設定,Samba 若用純文字密碼,也可以把該系統登錄加入。
@regedit  \\webmail\netlogon\ie5.reg
............略................
使用個人化設定
samba必須和windows 98的多使用者功能配合才可發揮完整的個人環境效果,這時資料會回存到Server 上的個人家目錄中。(超浪費網路頻寬和主機空間,學校電腦教室環境不建議使用)
在smb.conf中的[global]中,加入profile檔案要放的路徑。
在控制台→使用者,啟用多使用者設定→輸入使用者名稱→個人化項目設定值[用節省的方式]→完成 ,重新啟動電腦


登入後, 進入windows 98前,系統會問您是否保留個人設定值, 必須回答是, 才能保留每個人不同的環境參數。
使用outlook express 5.0後, 要先將資料存放的目錄變更到/windows/profiles/中您的帳號目錄底下的Application Data/Microsoft/Outlook Express底下。
設定完成後, 登出時就會將您在/windows/profiles/您帳號目錄中的各項目錄, copy 到您server上的私人目錄下。
每次登入便會將您的profiles目錄搬到windows/profiles/您帳號目錄中, 每個人便有自己的環境與outlook express了, 不會去影響到別人, 只不過您的server硬碟必須要大一點, 因為新設定完成的profiles檔(不含mail信件)就將近4MB。
讓 Samba 加入 windows 網域當 security=domain 時,Samba 被當成 windows 網域成員,這時必須進行加入 windows 網域的動作: 向 windows PDC 要求核發機器帳號,請輸入自己的電腦名稱(是 netbios 名稱而非 hostname)以及 PDC 的名稱
smbpasswd -j mysamba -r xxps1
到 windows 網域主控站上檢查是否已經加入成功
讓 win2000 perfessional 加入 Samba 網域 如果 samba 的 root 帳號沒設定過密碼先設好,使用下面指令:
smbpasswd root
在 samba server 上新增機器帳號,例如:win2000 機器名稱為 xxps16$(帳號後面要加 $),可以先用 adduser 或手動加入系統密碼檔中
新增該機器的 samba 帳號(注意:帳號後面不要加 $)
smbpasswd -a -m xxps16
設定 smb.conf,這樣就不用一台台去改系統登錄
encrypt passwords = yes
將 win2000 pro 加入 samba 網域,如同一般加入 win2000/NT 網域的程序,需要系統管理帳號時就輸入 root,密碼為 root 密碼
Samba 相關指令
/sbin/service  smb  start
/sbin/service  smb  stop
/sbin/service  smb  restart
用來啟動、停止及重新啟動 samba 服務。
smbpasswd -a user1
smbpasswd -e user1
Samba 的帳號密碼是與 NT 相容使用 DES 編密,因此獨立存放在 /etc/smbpasswd 而非系統的 /etc/passwd 裡面,要為 Samba 新增一個使用者,該使用者必須是 Linux 系統內的合法使用者才行。
smbclient -L xxps1 -U shane
用來做 Netbios 名稱解析偵錯,詳細用法請參考 man smbclient 說明文件。
smbmount "\\\\ccserver\share" /mnt
smbumount
用來掛載共享資料夾,作用相當於在 windows 平台上使用 net use 指令。
X window 裡的網路上的芳鄰
在安裝好 Samba 的 Linux 上也可以如同在 windows 平台上,直接瀏覽網路上的芳鄰,以拖曳方式存取共享資料夾內的檔案,用法與 windows 完全相同,請進入 X window 後點選桌面上的個人資料夾圖示,這樣將會啟動 X window 裡的檔案管理員,它叫做 Nautilus,接著在網址列輸入 smb:/ 即可。
如果您還遇到 Samba的其他問題﹐可以到大本營http://www.linpus.com.tw/nicedoc/samba/sambafaq.html 網頁參考看看。
安裝 WAM 帳號管理員
WAM 是筆者為了推廣 Linux 校園應用而開發的系統,目前 2.0 版尚未開發完成,因此本次研習仍使用舊版教學,請大家見諒!
WAM 安裝與應用方式,請閱讀WAM 使用手冊。
RPM 套件管理:
RPM 全名叫做 Red Hat Package Manager,是由 Red Hat 公司所開發,因應傳統程式套件安裝方式太複雜,需要先將程式套件解壓縮,然後編譯程式,接著在拷貝到規定的資料夾,然後要自行建立相關組態檔及連結檔,這些流程不是玩家恐怕難以順利達成,因此將安裝程序和壓縮檔打包在一起,並透過單一程式 rpm 來進行解壓與編譯安裝等所有工作,以減輕系管師的負擔。在爾後的版本裡,Red Hat 公司陸續加入來源碼版本控制的機制、遠端安裝功能,使得 RPM 成為一套 Linux 必備的系統,在其它的 Linux 發行版本,也都提供了 RPM。
套件安裝
能夠透過 RPM 安裝的程式套件,附加檔名一定是 .rpm ,同時為了方便後續的管理,檔名會依照 Red Hat 的統一命名法,舉例如下:
netscape-navigator-4.51-4CLE.i386.rpm
從左往右閱讀,分別是套件名稱(netscape-navigator)、版本序號(4.51-4)、特殊修正版本(CLE)、套件類別(i386),常見的套件類別說明如下:
i386:表示是專為 intel 386 CPU 以上的電腦發行的
alpha:表示是專為 alpha CPU 的電腦發行的
src:表示是程式原始碼及說明文件
使用 rpm 指令來安裝套件是非常容易的,例如要安裝 netscape-navigator-4.51-4CLE.i386.rpm,只要輸入
rpm -ivh netscape-navigator-4.51-4CLE.i386.rpm
套件升級
當程式套件釋出新版本時,我們可以使用底下指令來升級:
rpm -Uvh netscape-navigator-4.61-4CLE.i386.rpm
套件移除
移除套件更容易,只要輸入套件名稱就好了,不需要打完整檔名,這是因為 rpm 為了因應來源碼版本控制的需求,使用資料庫來管理套件,因此直接會使用名稱到資料庫尋找符合的資料,例如:
rpm -e netscape-navigator
套件查詢
由於 rpm 使用資料庫來進行套件管理,因此套件查詢對 rpm 來說是很簡單的任務,rpm 的查詢指令非常多,現在只介紹常用的指令:
rpm -q netscape-navigator(查詢目前所安裝的版本序號)
rpm -ql netscape-navigator-4.61-4CLE.i386.rpm(查詢此套件的詳細檔案列表)
rpm -qa(列出所有已安裝的套件)
其它特異功能
rpm 還有一些重要的功能,由於頗為複雜,所以不在這裡詳細說明,舉例如下:
rpm -V netscape-navigator-4.61-4CLE.i386.rpm(檢查檔案是否損壞)
rpm --recompile netscape-navigator-4.61-4CLE.src.rpm(重新編譯程式)
rpm -i ftp://ftp.spps.tp.edu.tw/linux/md5-1.7.i386.rpm(遠端安裝)
rpm -K netscape-navigator-4.61-4CLE.i386.rpm(檢查套件的數位簽章是否正確,可使用 MD5 sum 或是 GPG)
系統安全:
緊急救援模式
通常系統未正常關機時,在下一次啟動程序中,會自動以 fsck 加以修復,但有時候發生比較嚴重的問題時,必須以手動方式強迫修復硬碟,這時候就會進入 single mode(修復模式),手動進入 single mode 的方法,請參考前面 GRUB 章節。
如果有製作開機磁片,也可以使用磁片來進入修復模式,請在安裝或升級好系統後,依底下步驟建立開機片,等到系統當掉再做就來不及了:
dd if=boot.img of=/dev/fd0(如果找不到 boot.img 這個檔案,在光碟片上有)
當 / 所在的磁區損毀時,這時候由於無法掛載根目錄,連 single mode 都進不去,這時候就必須使用緊急救援模式,請放入 Linux 開機光碟,開機後輸入 linux rescue,以此模式開機會將系統所需檔案放在 RAM disk 中,接著會將原來硬碟上的 / 目錄掛載在 /mnt 目錄下,由於這時候系統所用的 / 是從 RAM disk 掛載進來的,與硬碟上的 / 無關,因此在進行強制修復時,可以很容易將該磁區取消掛載。
GRUB 的安全
由於 LILO 有安全上的漏洞,因此建議您使用 GRUB,GRUB 可以使用 MD5 密碼來保護選單編輯的功能 ,方法是先建立 MD5 雜湊:
/sbin/grub-md5-crypt
執行這個命令後,會得到一個雜湊字串,接著請編輯 grub.conf,在 time out 下面加入這一行:
password --md5 password-hash
其中 password-hash 的地方請輸入剛才得到的雜湊字串。
很不幸的是萬一攻擊者開機時,選擇沒有安全防護的系統來開機,例如:dos,然後使用一些特殊工具來讀取 Linux 磁區內的檔案,這也不是不可能,因此像 DOS 的開機也應該要加以保護,我們可以在定義 DOS 開機選單的部分,使用底下組態來加以保護:
title  DOS
lock
password --md5 password-hash
root (hd0,0)
makeactive
chainloader +1
SSH 的使用與安全
使用 openSSH 來取代 telnet 已經是系管師必備的能力了,在 win98 平台上習慣用 netterm 的老師,還是可以繼續使用新一代的 secureNetterm,這個版本已經加入所有 openSSH 會用到的功能。
openSSH 實際上是包含三個工具,即 SSH、SCP、SFTP,其中 SSH 用來取代 telnet,SFTP 用來取代 FTP,而 SCP 就比較少用,是用來取代 rsh,除了這三種通訊協定外,透過 port 轉送技術也能處理 X window 的加密,但前提條件是必須在 win98 上先安裝 local X 程式。
有鑒於傳統連線工具因為不具備編碼能力,所以直接在網路上傳輸明碼,這就容易遭到攔截而導致秘密外洩,為了解決這個問題,新一代的 SSH 通訊協定則是運用雙金鑰編密來進行安全連線,所謂雙金鑰,就是公鑰跟私鑰,SSH 套件內含產生金鑰的工具程式 ssh-keygen,透過這支程式可以產生兩把鑰匙,其中的私鑰是安置在本地端,為了系統安全應盡量提升私鑰的存取權限限制,一般會設定成 640。公鑰則必須上傳到被控端,當本地端連上被控端時,本地端會先核對通行密碼(passPhrase),接著送出連線要求(ssh 與 telnet 不同,是使用 TCP 22),被控端會根據來源主機及使用者名稱來判斷應讀取哪一個公鑰,接著會隨機產生一個亂數,我們稱它為一次性密碼,因為這個密碼只使用在本次的連線中,將要求登入的訊息以公鑰編密後連同一次性密碼送回給本地端,本地端則以私鑰解密,並將使用者名稱與密碼以私鑰編密連同一次性密碼送去給被控端,雙方便以此種方式溝通。為了確保安全,被控端不應該得知私鑰的內容,以避免萬一公鑰外洩,因缺乏私鑰而無法假冒本地端,來與被控端連線,這樣可以將被控端被駭客破解的可能性降到最低。有關於 ssh 詳細的連線過程,可自行參考底下流程:
Initiating SSH session at Tue Nov 26 12:08:21 2002
SSHClientInitialize,Protocol 2
Connected to canonical hostname: wam.spps.tp.edu.tw
Attempting login as user shane, protocol 2
identity file C:\Program Files\InterSoft International, Inc\SecureNetTerm\.ssh\id_dsa type 3
Remote protocol version 1.99,remote software version OpenSSH_3.4p1
match: OpenSSH_3.4p1 pat OpenSSH*
Enabling compatibility mode for protocol 2.0
Local version string SSH-2.0-SecureNetTerm-3.1
SSH2_MSG_KEXINIT sent
SSH2_MSG_KEXINIT received
kex: server->client cast128-cbc hmac-sha1 zlib
kex: client->server cast128-cbc hmac-sha1 zlib
dh_gen_key: priv key bits set: 166/320
bits set: 516/1024
sending SSH2_MSG_KEXDH_INIT
expecting SSH2_MSG_KEXDH_REPLY
Host ‘wam.spps.tp.edu.tw‘ is known and matches the DSA host key.
Found key in C:\Program Files\InterSoft International, Inc\SecureNetTerm\.ssh\known_hosts2:1
bits set: 520/1024
kex_derive_keys
newkeys: mode 1
Enabling compression at level 6.
SSH2_MSG_NEWKEYS sent
waiting for SSH2_MSG_NEWKEYS
newkeys: mode 0
SSH2_MSG_NEWKEYS received
done: ssh_kex2.
send SSH2_MSG_SERVICE_REQUEST
service_accept: ssh-userauth
got SSH2_MSG_SERVICE_ACCEPT
authentications that can continue: publickey,password,keyboard-interactive
next auth method to try is publickey
try privkey: C:\Program Files\InterSoft International, Inc\SecureNetTerm\.ssh\id_dsa
authentications that can continue: publickey,password,keyboard-interactive
next auth method to try is password
packet_send2: adding 24 (len 29 padlen 11 extra_pad 64)
ssh-userauth2 successful: method password
Authentication complete.
channel 0: rfd=-1, wfd=-1, new [client-session]
send channel open 0
client_set_session_ident: id 0
Entering interactive session.
NetWatchProc is running
Starting client_init_dispatch, compat20 = 1
client_init id 0 arg 0
client_set_session_ident: id 0
channel 0: open confirm rwindow 0 rmax 32768
底下以 secureNetterm 為例來說明製作金鑰,上傳安裝公鑰的方法,開啟 secureNetterm 之後,點選 Security Wizard:

在安全精靈視窗裡,請輸入使用者名稱,不要用 root 帳號作遠端登入,那樣比較不安全,SSH 第一版通訊協定已經被駭客找到弱點,因此我們使用第二版:

在這一頁畫面裡,主要是設定帳號認證的模式,請使用雙金鑰演算法,並要求編密:

這一頁是所有設定裡面最關鍵的,請務必做對,首先是金鑰檔案格式請選擇 SSH Key File,接著按瀏覽找一個安全的地方存放金鑰(建議擺放在 scureNetterm 的 .ssh 資料夾內),選好資料夾後,請輸入 id_dsa 當檔名,該檔案不須先建立,稍候程式會為我們把檔案新增進去,接著直接按產生金鑰按鈕,金鑰的類型請選擇 DSA(選擇 RSA 其實也可以,但 Linux 預設是使用 DSA),金鑰做好後,請按 Key Utilites 設定通行密碼(passPhrase),最後請將公鑰匯出到桌面上並命名為 authorized_keys。

金鑰產生好了後,在 port 轉送設定畫面,我們暫且不去理會它,直接按下一頁,進入本地端 Cipher 的設定,這個設定是用來微調編密用的雜湊演算法,Linux 的預設值是使用 tripleDES,我們在 secureNetterm 裡面也沿用同一設定,請點選 3des-cbc 並將它上移為最優先順序(如果不改變設定也可以連通,效能比較差一點)

最後,將匯出的 authorized_keys 檔案以 FTP 上傳到伺服器上,請在個人家目錄預先建好 .ssh 資料夾,將該檔案移到資料夾內,這樣就完成被控端的安裝作業了。
實際上應用時,我們可以為每個不同被控端產生新的金鑰,但也可以從頭到尾用同一份金鑰,只要在上圖的第二步驟去選擇已經存在的金鑰即可,這樣不管我要遠端登入到哪一台主機都是使用同一份金鑰,安全性當然比較差,因為公鑰被取得的機會多出好幾倍。使用 SSH 還有一個不方便的地方,順便在這裡討論,當我們想在另一台電腦上遠端登入到同一台主機時,為了方便,有人就想要使用原來電腦上作好的金鑰,這樣做是行不通的,因為這樣做私鑰就會散佈出去,導致 SSH 安全性比 telnet 還差的現象(當取得私鑰時,透過某種設定可以讓遠端電腦不再詢問帳號密碼,直接可以連線成功),所以正確的做法是在另一台 win98 上重新產生金鑰。如果我們真的照建議的做法來實施,還會碰到另一個問題,那就是必須在被控端安裝兩支公鑰,由於公鑰必須存放在 authorized_keys 檔案內,因此第二支公鑰必須使用 Append 的方式附加上去,如果對指令不熟,請使用文書編輯程式來手動編輯。
使用 secureNetterm 連上主機之前,不要忘記到地址簿裡將連接埠從 23 改成 22,否則會連線失敗,ssh 設定成功後請記得到伺服器上將 telnet 服務關閉。

SSH 的安全性是依靠正確的連線步驟來完成的,如果使用錯誤的方法來連線,安全性將會比使用 telnet 還糟糕,不論是使用 telnet 或 SSH,請記住絕對不可以用 root 身分來登入,請打開 /etc/ssh/sshd_config 組態檔,將 PermitRootLogin 這一個參數設為 no,以防止意外發生。
命令殼層的安全
學校內使用者多為老師或學生,他們並沒有遠端登入伺服器的需求,因此這項功能對他們來說是多餘的,如果保留遠端登入的功能又容易遭到駭客入侵,徒增管理上的負擔,為了安全考量,建議將此項功能關閉。
請編輯 /etc/passwd 檔案,將 /bin/bash 改為 /sbin/nologin,如果您使用巨集取代,不要忘記把自己及系統管理人員的命令殼層改回來,否則自己也登不上去了。
主控台的安全
如果您的伺服主機是擺放在公開場所,或是主機房管理鬆散,導致不相干的人也有機會使用主控台登入,請務必做好主控台保全。
建議的做法是,禁止以 root 身分登入主控台,必須使用一般帳號登入後,才能以 su 或 sudo 指令轉換身分為 root,這樣做就可以避免 root 密碼被反覆在主控台上測試。請將 /etc/securetty 檔案清除成空白就可以了。
服務的安全
由於 FTP 及 Mail 程式本身的漏洞,當 client 端連上來透過某複雜的特定程序造成緩衝區溢位,就可以取得 root 的身分來進行惡意的破壞,例如:讀取 /etc/shadow 檔,而這類動作通常與 FTP 或 Mail 系統的運作無關,也就是說正常運作下程式不會去進行這些動作。關於這個問題,一方面必須等待更新更安全的套件開發出來,一方面還是可以透過 PAM 的機制來進行保護。
由於 FTP 或 MAil 在進行身分驗證時是透過 PAM 模組,透過 PAM 模組的過濾,我們可以禁止這類程式去存取只有 root 身分才能讀取的重要檔案,這雖然無法防止駭客入侵,但至少能阻止駭客進行大規模的破壞。
請打開 /etc/pam.d 找到 system-auth 檔案,請在檔案開頭加入底下這一行:
auth required /lib/security/pam_listfile.so
from: http://www.spps.tp.edu.tw/documents/memo/linux/linux_step1.htm