對于Linux系統來說,無論是中央處理器、記憶體、磁盤驅動器、鍵盤、滑鼠,還是使用者等都是檔案,Linux系統管理的指令是它正常運作的核心。熟悉了Linux常用的檔案處理指令以後,這一講介紹對系統和使用者進行管理的指令。
一、系統管理指令
<b>df</b>
1.作用
df指令用來檢查檔案系統的磁盤空間占用情況,使用權限是所有使用者。
2.格式
df [options]
3.主要參數
-s:對每個Names參數隻給出占用的資料塊總數。
-a:遞歸地顯示指定目錄中各檔案及子目錄中各檔案占用的資料塊數。若既不指定-s,也不指定-a,則隻顯示Names中的每一個目錄及其中的各子目錄所占的磁盤塊數。
-k:以1024位元組為機關列出磁盤空間使用情況。
-x:跳過在不同檔案系統上的目錄不予統計。
-l:計算所有的檔案大小,對硬連結檔案則計算多次。
-i:顯示inode資訊而非塊使用量。
-h:以容易了解的格式印出檔案系統大小,例如136KB、254MB、21GB。
-P:使用POSIX輸出格式。
-T:顯示檔案系統類型。
4.說明
df指令被廣泛地用來生成檔案系統的使用統計資料,它能顯示系統中所有的檔案系統的資訊,包括總容量、可用的空閑空間、目前的安裝點等。
超級權限使用者使用df指令時會發現這樣的情況:某個分區的容量超過了100%。這是因為Linux系統為超級使用者保留了10%的空間,由其單獨支配。也就是說,對于超級使用者而言,他所見到的硬碟容量将是110%。這樣的安排對于系統管理而言是有好處的,當硬碟被使用的容量接近100%時系統管理者還可以正常工作。
5.應用執行個體
Linux支援的檔案系統非常多,包括JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、vfat、MSDOS等。使用df -T指令檢視磁盤空間時還可以得到檔案系統的資訊:
從上面除了可以看到磁盤空間的容量、使用情況外,分區的檔案系統類型、挂載點等資訊也一覽無遺。
<b>top</b>
top指令用來顯示執行中的程式程序,使用權限是所有使用者。
top [-] [d delay] [q] [c] [S] [s] [i] [n]
d:指定更新的間隔,以秒計算。
q:沒有任何延遲的更新。如果使用者有超級使用者,則top指令将會以最高的優先序執行。
c:顯示程序完整的路徑與名稱。
S:累積模式,會将己完成或消失的子行程的CPU時間累積起來。
s:安全模式。
i:不顯示任何閑置(Idle)或無用(Zombie)的行程。
n:顯示更新的次數,完成後将會退出top。
top指令是Linux系統管理的一個主要指令,通過它可以獲得許多資訊。這裡我們結合圖1來說明它給出的資訊。
圖1 top指令的顯示
在圖1中,第一行表示的項目依次為目前時間、系統啟動時間、目前系統登入使用者數目、平均負載。第二行顯示的是所有啟動的程序、目前運作的、挂起(Sleeping)的和無用(Zombie)的程序。第三行顯示的是目前CPU的使用情況,包括系統占用的比例、使用者使用比例、閑置(Idle)比例。第四行顯示實體記憶體的使用情況,包括總的可以使用的記憶體、已用記憶體、空閑記憶體、緩沖區占用的記憶體。第五行顯示交換分區使用情況,包括總的交換分區、使用的、空閑的和用于高速緩存的大小。第六行顯示的項目最多,下面列出了詳細解釋。
PID(Process ID):程序标示号。
USER:程序所有者的使用者名。
PR:程序的優先級别。
NI:程序的優先級别數值。
VIRT:程序占用的虛拟記憶體值。
RES:程序占用的實體記憶體值。
SHR:程序使用的共享記憶體值。
S:程序的狀态,其中S表示休眠,R表示正在運作,Z表示僵死狀态,N表示該程序優先值是負數。
%CPU:該程序占用的CPU使用率。
%MEM:該程序占用的實體記憶體和總記憶體的百分比。
TIME+:該程序啟動後占用的總的CPU時間。
Command:程序啟動的啟動指令名稱,如果這一行顯示不下,程序會有一個完整的指令行。
top指令使用過程中,還可以使用一些互動的指令來完成其它參數的功能。這些指令是通過快捷鍵啟動的。
<空格>:立刻重新整理。
P:根據CPU使用大小進行排序。
T:根據時間、累計時間排序。
q:退出top指令。
m:切換顯示記憶體資訊。
t:切換顯示程序和CPU狀态資訊。
c:切換顯示指令名稱和完整指令行。
M:根據使用記憶體大小進行排序。
W:将目前設定寫入~/.toprc檔案中。這是寫top配置檔案的推薦方法。
可以看到,top指令是一個功能十分強大的監控系統的工具,對于系統管理者而言尤其重要。但是,它的缺點是會消耗很多系統資源。
使用top指令可以監視指定使用者,預設情況是監視所有使用者的程序。如果想檢視指定使用者的情況,在終端中按“U”鍵,然後輸入使用者名,系統就會切換為指定使用者的程序運作界面,見圖2所示。
圖2 使用top指令監視指定使用者
<b>free</b>
free指令用來顯示記憶體的使用情況,使用權限是所有使用者。
free [-b|-k|-m] [-o] [-s delay] [-t] [-V]
-b -k -m:分别以位元組(KB、MB)為機關顯示記憶體使用情況。
-s delay:顯示每隔多少秒數來顯示一次記憶體使用情況。
-t:顯示記憶體總和列。
-o:不顯示緩沖區調節列。
4.應用執行個體
free指令是用來檢視記憶體使用情況的主要指令。和top指令相比,它的優點是使用簡單,并且隻占用很少的系統資源。通過-S參數可以使用free指令不間斷地監視有多少記憶體在使用,這樣可以把它當作一個友善實時監控器。
#free -b -s5
使用這個指令後終端會連續不斷地報告記憶體使用情況(以位元組為機關),每5秒更新一次。
<b>quota</b>
quota指令用來顯示磁盤使用情況和限制情況,使用權限超級使用者。
quota [-g][-u][-v][-p] 使用者名 組名
3.參數
-g:顯示使用者所在組的磁盤使用限制。
-u:顯示使用者的磁盤使用限制。
-v:顯示沒有配置設定空間的檔案系統的配置設定情況。
-p:顯示簡化資訊。
在企業應用中磁盤配額非常重要,普通使用者要學會看懂自己的磁盤使用情況。要查詢自己的磁盤配額可以使用下面指令(下例中使用者賬号是caojh):
以上顯示ID号為502的caojh賬号,檔案個數設定為500~1000個,硬碟空間限制設定為200MB~400MB。一旦磁盤配額要用完時,就需要删除一些垃圾檔案或向系統管理者請求追加配額。
<b>at</b>
at指令用來在指定時刻執行指定的指令序列。
at [-V] [-q x] [-f file] [-m] time
-V:顯示标準錯誤輸出。
-q:許多隊列輸出。
-f:從檔案中讀取作業。
-m:執行完作業後發送電子郵件到使用者。
time:設定作業執行的時間。time格式有嚴格的要求,由小時、分鐘、日期和時間的偏移量組成,其中日期的格式為MM.DD.YY,MM是分鐘,DD是日期,YY是指年份。偏移量的格式為時間+偏移量,機關是minutes、hours和days。
#at -f data 15:30 +2 days
上面指令表示讓系統在兩天後的17:30執行檔案data中指明的作業。
<b>lp</b>
lp是列印檔案的指令,使用權限是所有使用者。
lp [-c][-d][-m][-number][-title][-p]
-c:先拷貝檔案再列印。
-d:列印隊列檔案。
-m:列印結束後發送電子郵件到使用者。
-number:列印份數。
-title:列印标題。
-p:設定列印的優先級别,最高為100。
(1)使用lp指令列印多個檔案
#lp 2 3 4
request id is 11 (3 file(s))
其中2、3、4分别是檔案名;“request id is 11 (3 file(s)) ”表示這是第11個列印指令,依次列印這三個檔案。
(2)設定列印優先級别
#lp lp -d LaserJet -p 90 /etc/aliases
通過添加“-p 90”,規定了列印作業的優先級為90。它将在優先級低于90的列印作業之前列印,包括沒有設定優先級的作業,預設優先級是50。
<b>useradd</b>
useradd指令用來建立使用者帳号和建立使用者的起始目錄,使用權限是超級使用者。
useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
-c:加上備注文字,備注文字儲存在passwd的備注欄中。
-d:指定使用者登入時的啟始目錄。
-D:變更預設值。
-e:指定賬号的有效期限,預設表示永久有效。
-f:指定在密碼過期後多少天即關閉該賬号。
-g:指定使用者所屬的群組。
-G:指定使用者所屬的附加群組。
-m:自動建立使用者的登入目錄。
-M:不要自動建立使用者的登入目錄。
-n:取消建立以使用者名稱為名的群組。
-r:建立系統賬号。
-s:指定使用者登入後所使用的shell。
-u:指定使用者ID号。
useradd可用來建立使用者賬号,它和adduser指令是相同的。賬号建好之後,再用passwd設定賬号的密碼。使用useradd指令所建立的賬号,實際上是儲存在/etc/passwd文本檔案中。
建立一個新使用者賬戶,并設定ID:
#useradd caojh -u 544
需要說明的是,設定ID值時盡量要大于500,以免沖突。因為Linux安裝後會建立一些特殊使用者,一般0到499之間的值留給bin、mail這樣的系統賬号。
<b>groupadd</b>
groupadd指令用于将新組加入系統。
groupadd [-g gid] [-o]] [-r] [-f] groupname
-g gid:指定組ID号。
-o:允許組ID号,不必惟一。
-r:加入組ID号,低于499系統賬号。
-f:加入已經有的組時,發展程式退出。
建立一個新組,并設定組ID加入系統:
#groupadd -g 344 cjh
此時在/etc/passwd檔案中産生一個組ID(GID)是344的項目。
<b>kill</b>
kill指令用來中止一個程序。
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]
-s:指定發送的信号。
-p:模拟發送信号。
-l:指定信号的名稱清單。
pid:要中止程序的ID号。
Signal:表示信号。
程序是Linux系統中一個非常重要的概念。Linux是一個多任務的作業系統,系統上經常同時運作着多個程序。我們不關心這些程序究竟是如何配置設定的,或者是核心如何管理配置設定時間片的,所關心的是如何去控制這些程序,讓它們能夠很好地為使用者服務。
Linux作業系統包括三種不同類型的程序,每種程序都有自己的特點和屬性。互動程序是由一個Shell啟動的程序。互動程序既可以在前台運作,也可以在背景運作。批處理程序和終端沒有聯系,是一個程序式列。監控程序(也稱系統守護程序)時Linux系統啟動時啟動的程序,并在背景運作。例如,httpd是著名的Apache伺服器的監控程序。
kill指令的工作原理是,向Linux系統的核心發送一個系統操作信号和某個程式的程序辨別号,然後系統核心就可以對程序辨別号指定的程序進行操作。比如在top指令中,我們看到系統運作許多程序,有時就需要使用kill中止某些程序來提高系統資源。在講解安裝和登陸指令時,曾提到系統多個虛拟控制台的作用是當一個程式出錯造成系統死鎖時,可以切換到其它虛拟控制台工作關閉這個程式。此時使用的指令就是kill,因為kill是大多數Shell内部指令可以直接調用的。
(1)強行中止(經常使用殺掉)一個程序辨別号為324的程序:
#kill -9 324
(2)解除Linux系統的死鎖
在Linux中有時會發生這樣一種情況:一個程式崩潰,并且處于死鎖的狀态。此時一般不用重新啟動計算機,隻需要中止(或者說是關閉)這個有問題的程式即可。當kill處于X-Window界面時,主要的程式(除了崩潰的程式之外)一般都已經正常啟動了。此時打開一個終端,在那裡中止有問題的程式。比如,如果Mozilla浏覽器程式出現了鎖死的情況,可以使用kill指令來中止所有包含有Mozolla浏覽器的程式。首先用top指令查處該程式的PID,然後使用kill指令停止這個程式:
#kill -SIGKILL XXX
其中,XXX是包含有Mozolla浏覽器的程式的程序辨別号。
(3)使用指令回收記憶體
我們知道記憶體對于系統是非常重要的,回收記憶體可以提高系統資源。kill指令可以及時地中止一些“越軌”的程式或很長時間沒有相應的程式。例如,使用top指令發現一個無用 (Zombie) 的程序,此時可以使用下面指令:
#kill -9 XXX
其中,XXX是無用的程序辨別号。
然後使用下面指令:
#free
此時會發現可用記憶體容量增加了。
(4)killall指令
Linux下還提供了一個killall指令,可以直接使用程序的名字而不是程序辨別号,例如:
# killall -HUP inetd
<b>crontab</b>
使用crontab指令可以修改crontab配置檔案,然後該配置由cron公用程式在适當的時間執行,該指令使用權限是所有使用者。
crontab [ -u user ] 檔案
crontab [ -u user ] { -l | -r | -e }
-e:執行文字編輯器來設定時程表,内定的文字編輯器是vi。
-r:删除目前的時程表。
-l:列出目前的時程表。
crontab檔案的格式為“M H D m d cmd”。其中,M代表分鐘(0~59),H代表小時(0~23),D代表天(1~31),m代表月(1~12),d代表一星期内的天(0~6,0為星期天)。cmd表示要運作的程式,它被送入sh執行,這個Shell隻有USER、HOME、SHELL三個環境變量。
和at指令相比,crontab指令适合完成固定周期的任務。
設定一個定時、定期的系統提示:
[cao @www cao]#crontab -e
此時系統會打開一個vi編輯器。
如果輸入以下内容:35 17 * * 5 wall "Tomorrow is Saturday I will go CS",然後存盤退出。這時在/var/spool/cron/目錄下會生産一個cao的檔案,内容如下:
這樣每個星期五17:35系統就會彈出一個終端,提醒星期六可以打打CS了!顯示結果見圖3所示。
圖3 一個定時、定期的系統提示
<b>動手練習</b>
1.聯合使用kill和top指令觀察系統性能的變化
首先啟動一個終端運作top指令,然後再啟動一個終端使用kill指令,見圖4所示。
圖4 觀察kill指令對top終端的影響
這時利用上面介紹的kill指令來中止一些程式:
#kill SIGKILL XXX
然後再看top指令終端的變化,包括記憶體容量、CPU使用率、系統負載等。注意,有些程序是不能中止的,不過學習Linux指令時可以試試,看看系統有什麼反應。
2.使用at和halt指令定時關機
首先設定關機時間是17:35,輸入下面代碼:
此時實際上就已經進入Linux系統的Shell,并且編寫一個最簡單程式:halt -i -p。上面Shell中的文本結束符号表示按“Ctrl+D”組合鍵關閉指令,送出任務退出Shell。“Job 6 at 2004-01-01 17:35”表示系統接受第6個at指令,在“2004-01-01 17:35”時執行指令:先把所有網絡相關的裝置停止,關閉系統後關閉電源。
3.用crontab指令實作每天定時的病毒掃描
前面已經介紹了一個簡單的crontab指令操作,這裡看一些更重要的操作。
(1)建立一個檔案,檔案名稱自己設定,假設為caoproject:
#crontab -e
(2)檔案内容如下:
05 09 * * * antivir
用vi編輯後存盤退出。antivir是一個清除Linux病毒的軟體,當然需要時先安裝在系統中。
(3)使用crontab指令添加到任務清單中:
#crontab caoproject
這樣系統内所有使用者在每天的9點05分會自動進行病毒掃描。
4.用kill使修改的配置檔案馬上生效
Windows使用者一般都知道,重要配置檔案修改後往往都要重新啟動計算機才能使修改生效。而Linux由于采用了子產品化設計,可以自己根據需要實時設定服務。這裡以網絡服務inetd為例介紹一些操作技巧。
inetd是一個監聽守護程序,監聽與提供網際網路服務程序(如rlogin、 telnet、ftp、rsh) 進行連接配接的要求,并擴充所需的服務程序。預設情況下,inetd監聽的這些daemon均列于/etc /inetd.conf檔案中。編輯/etc/inetd.conf檔案,可以改變inetd啟動伺服器守護程序的選項,然後驅使inetd以 SIGHUP(signal 1)向目前的inetd程序發送信号,使inetd重讀該檔案。這一過程由kill指令來實作。
用vi或其它編輯器修改inetd.conf後,首先使用下面指令:
#ps -ef |grep inetd
上面代碼表明查詢inetd.conf的程序号(PID),這裡假設是1426,然後使用下面指令:
# kill -1426 inetd
這樣配置檔案就生效了。
這一講介紹的系統管理指令都是比較重要的,特别是crontab指令和quota指令使用起來會有一定難度,需要多做一些練習。另外,使用kill指令要注意“-9“這個參數,練習時最好不要運作一些重要的程式。
二、系統安全指令
雖然Linux和Windows NT/2000系統一樣是一個多使用者的系統,但是它們之間有不少重要的差别。對于很多習慣了Windows系統的管理者來講,如何保證Linux作業系統安全、可靠将會面臨許多新的挑戰。本文将重點介紹Linux系統安全的指令。
<b>passwd</b>
1.作用
passwd指令原來修改賬戶的登陸密碼,使用權限是所有使用者。
2.格式
passwd [選項] 賬戶名稱
3.主要參數
-l:鎖定已經命名的賬戶名稱,隻有具備超級使用者權限的使用者方可使用。
-u:解開賬戶鎖定狀态,隻有具備超級使用者權限的使用者方可使用。
-x, --maximum=DAYS:最大密碼使用時間(天),隻有具備超級使用者權限的使用者方可使用。
-n, --minimum=DAYS:最小密碼使用時間(天),隻有具備超級使用者權限的使用者方可使用。
-d:删除使用者的密碼, 隻有具備超級使用者權限的使用者方可使用。
-S:檢查指定使用者的密碼認證種類, 隻有具備超級使用者權限的使用者方可使用。
4.應用執行個體
從上面可以看到,使用passwd指令需要輸入舊的密碼,然後再輸入兩次新密碼。
<b>su</b>
su的作用是變更為其它使用者的身份,超級使用者除外,需要鍵入該使用者的密碼。
su [選項]... [-] [USER [ARG]...]
-f , --fast:不必讀啟動檔案(如 csh.cshrc 等),僅用于csh或tcsh兩種Shell。
-l , --login:加了這個參數之後,就好像是重新登陸為該使用者一樣,大部分環境變量(例如HOME、SHELL和USER等)都是以該使用者(USER)為主,并且工作目錄也會改變。如果沒有指定USER,預設情況是root。
-m, -p ,--preserve-environment:執行su時不改變環境變數。
-c command:變更賬号為USER的使用者,并執行指令(command)後再變回原來使用者。
USER:欲變更的使用者賬号,ARG傳入新的Shell參數。
變更賬号為超級使用者,并在執行df指令後還原使用者。 su -c df root
<b>umask</b>
umask設定使用者檔案和目錄的檔案建立預設屏蔽值,若将此指令放入profile檔案,就可控制該使用者後續所建檔案的存取許可。它告訴系統在建立檔案時不給誰存取許可。使用權限是所有使用者。
umask [-p] [-S] [mode]
3.參數
-S:确定目前的umask設定。
-p:修改umask 設定。
[mode]:修改數值。
4.說明
傳統Unix的umask值是022,這樣就可以防止同屬于該組的其它使用者及别的組的使用者修改該使用者的檔案。既然每個使用者都擁有并屬于一個自己的私有組,那麼這種“組保護模式”就不在需要了。嚴密的權限設定構成了Linux安全的基礎,在權限上犯錯誤是緻命的。需要注意的是,umask指令用來設定程序所建立的檔案的讀寫權限,最保險的值是0077,即關閉建立檔案的程序以外的所有程序的讀寫權限,表示為-rw-------。在~/.bash_profile中,加上一行指令umask 0077可以保證每次啟動Shell後, 程序的umask權限都可以被正确設定。
5.應用執行個體
上述5行指令,首先顯示目前狀态,然後把umask值改為177,結果隻有檔案所有者具有讀寫檔案的權限,其它使用者不能通路該檔案。這顯然是一種非常安全的設定。
<b>chgrp</b>
chgrp表示修改一個或多個檔案或目錄所屬的組。使用權限是超級使用者。
chgrp [選項]... 組 檔案...
或
chgrp [選項]... --reference=參考檔案 檔案...
将每個<檔案>的所屬組設定為<組>。
-c, --changes :像 --verbose,但隻在有更改時才顯示結果。
--dereference:會影響符号連結所訓示的對象,而非符号連結本身。
-h, --no-dereference:會影響符号連結本身,而非符号連結所訓示的目的地(當系統支援更改符号連結的所有者,此選項才有效)。
-f, --silent, --quiet:去除大部分的錯誤資訊。
--reference=參考檔案:使用<參考檔案>的所屬組,而非指定的<組>。
-R, --recursive:遞歸處理所有的檔案及子目錄。
-v, --verbose:處理任何檔案都會顯示資訊。
4.應用說明
該指令改變指定指定檔案所屬的使用者組。其中group可以是使用者組ID,也可以是/etc/group檔案中使用者組的組名。檔案名是以空格分開的要改變屬組的檔案清單,支援通配符。如果使用者不是該檔案的屬主或超級使用者,則不能改變該檔案的組。
改變/opt/local /book/及其子目錄下的所有檔案的屬組為book,指令如下:
$ chgrp - R book /opt/local /book
<b>chmod</b>
chmod指令是非常重要的,用于改變檔案或目錄的通路權限,使用者可以用它控制檔案或目錄的通路權限,使用權限是超級使用者。
chmod指令有兩種用法。一種是包含字母和操作符表達式的字元設定法(相對權限設定);另一種是包含數字的數字設定法(絕對權限設定)。
(1)字元設定法
chmod [who] [+ | - | =] [mode] 檔案名
◆操作對象who可以是下述字母中的任一個或它們的組合
u:表示使用者,即檔案或目錄的所有者。
g:表示同組使用者,即與檔案屬主有相同組ID的所有使用者。
o:表示其它使用者。
a:表示所有使用者,它是系統預設值。
◆操作符号
+:添加某個權限。
-:取消某個權限。
=:賦予給定權限,并取消其它所有權限(如果有的話)。
◆設定mode的權限可用下述字母的任意組合
r:可讀。
w:可寫。
x:可執行。
X:隻有目标檔案對某些使用者是可執行的或該目标檔案是目錄時才追加x屬性。
s:檔案執行時把程序的屬主或組ID置為該檔案的檔案屬主。方式“u+s”設定檔案的使用者ID位,“g+s”設定組ID位。
t:儲存程式的文本到交換裝置上。
u:與檔案屬主擁有一樣的權限。
g:與和檔案屬主同組的使用者擁有一樣的權限。
o:與其它使用者擁有一樣的權限。
檔案名:以空格分開的要改變權限的檔案清單,支援通配符。
一個指令行中可以給出多個權限方式,其間用逗号隔開。
(2) 數字設定法
數字設定法的一般形式為: chmod [mode] 檔案名
數字屬性的格式應為3個0到7的八進制數,其順序是(u)(g)(o)檔案名,以空格分開的要改變權限的檔案清單,支援通配符。
數字表示的權限的含義如下:0001為所有者的執行權限;0002為所有者的寫權限;0004為所有者的讀權限;0010為組的執行權限;0020為組的寫權限;0040為組的讀權限;0100為其他人的執行權限;0200為其他人的寫權限;0400為其他人的讀權限;1000為粘貼位置位;2000表示假如這個檔案是可執行檔案,則為組ID為位置位,否則其中檔案鎖定位置位; 4000表示假如這個檔案是可執行檔案,則為使用者ID為位置位。
3.執行個體
如果一個系統管理者寫了一個表格(tem)讓所有使用者填寫,那麼必須授權使用者對這個檔案有讀寫權限,可以使用指令:#chmod 666 tem
上面代碼中,這個666數字是如何計算出來的呢?0002為所有者的寫權限,0004為所有者的讀權限,0020為組的寫權限,0040為組的讀權限,0200為其他人的寫權限,0400為其他人的讀權限,這6個數字相加就是 666(注以上數字都是八進制數),結果見圖1所示。
圖1 用chmod數字方法設定檔案權限
從圖1可以看出,tem檔案的權限是-rw-rw-rw-,即使用者對這個檔案有讀寫權限。
如果用字元權限設定使用下面指令:
#chmod a =wx tem
<b>chown</b>
更改一個或多個檔案或目錄的屬主和屬組。使用權限是超級使用者。
chown [選項] 使用者或組 檔案
--dereference:受影響的是符号連結所訓示的對象,而非符号連結本身。
--from=目前所有者:目前組隻當每個檔案的所有者群組符合選項所指定的,才會更改所有者群組。其中一個可以省略,這已省略的屬性就不需要符合原有的屬性。
chown将指定檔案的擁有者改為指定的使用者或組,使用者可以是使用者名或使用者ID;組可以是組名或組ID;檔案是以空格分開的要改變權限的檔案清單,支援通配符。系統管理者經常使用chown指令,在将檔案拷貝到另一個使用者的目錄下以後,讓使用者擁有使用該檔案的權限。
1.把檔案shiyan.c的所有者改為wan
$ chown wan shiyan.c
2.把目錄/hi及其下的所有檔案和子目錄的屬主改成wan,屬組改成users。
$ chown - R wan.users /hi
<b>chattr</b>
修改ext2和ext3檔案系統屬性(attribute),使用權限超級使用者。
chattr [-RV] [-+=AacDdijsSu] [-v version] 檔案或目錄
-R:遞歸處理所有的檔案及子目錄。
-V:詳細顯示修改内容,并列印輸出。
-:失效屬性。
+:激活屬性。
= :指定屬性。
A:Atime,告訴系統不要修改對這個檔案的最後通路時間。
S:Sync,一旦應用程式對這個檔案執行了寫操作,使系統立刻把修改的結果寫到磁盤。
a:Append Only,系統隻允許在這個檔案之後追加資料,不允許任何程序覆寫或截斷這個檔案。如果目錄具有這個屬性,系統将隻允許在這個目錄下建立和修改檔案,而不允許删除任何檔案。
i:Immutable,系統不允許對這個檔案進行任何的修改。如果目錄具有這個屬性,那麼任何的程序隻能修改目錄之下的檔案,不允許建立和删除檔案。
D:檢查壓縮檔案中的錯誤。
d:No dump,在進行檔案系統備份時,dump程式将忽略這個檔案。
C:Compress,系統以透明的方式壓縮這個檔案。從這個檔案讀取時,傳回的是解壓之後的資料;而向這個檔案中寫入資料時,資料首先被壓縮之後才寫入磁盤。
s:Secure Delete,讓系統在删除這個檔案時,使用0填充檔案所在的區域。
u:Undelete,當一個應用程式請求删除這個檔案,系統會保留其資料塊以便以後能夠恢複删除這個檔案。
chattr指令的作用很大,其中一些功能是由 Linux核心版本來支援的,如果Linux核心版本低于2.2,那麼許多功能不能實作。同樣-D檢查壓縮檔案中的錯誤的功能,需要2.5.19以上核心才能支援。另外,通過chattr指令修改屬性能夠提高系統的安全性,但是它并不适合所有的目錄。chattr指令不能保護/、/dev、/tmp、 /var目錄。
1.恢複/root目錄,即子目錄的所有檔案
# chattr -R +u/root
2.用chattr指令防止系統中某個關鍵檔案被修改
在Linux下,有些配置檔案(passwd ,fatab)是不允許任何人修改的,為了防止被誤删除或修改,可以設定該檔案的“不可修改位(immutable)”,指令如下:
# chattr +i /etc/fstab
<b>sudo</b>
sudo是一種以限制配置檔案中的指令為基礎,在有限時間内給使用者使用,并且記錄到日志中的指令,權限是所有使用者。
sudo指令的配置在/etc/sudoers檔案中。當使用者使用sudo時,需要輸入密碼以驗證使用者身份。随後的一段時間内可以使用定義好的指令,當使用配置檔案中沒有的指令時,将會有報警的記錄。 sudo是系統管理者用來允許某些使用者以root身份運作部分/全部系統指令的程式。一個明顯的用途是增強了站點的安全性,如果需要每天以超級使用者的身份做一些日常工作,經常執行一些固定的幾個隻有超級使用者身份才能執行的指令,那麼用sudo是非常适合的。
<b>ps</b>
ps顯示瞬間程序 (process) 的動态,使用權限是所有使用者。
ps [options] [--help]
ps的參數非常多, 此出僅列出幾個常用的參數。
要對程序進行監測和控制,首先要了解目前程序的情況,也就是需要檢視目前程序。ps指令就是最基本、也是非常強大的程序檢視指令。使用該指令可以确定有哪些程序正在運作、運作的狀态、程序是否結束、程序有沒有僵屍、哪些程序占用了過多的資源等。圖2給出了ps-aux指令詳解。大部分資訊都可以通過執行該指令得到。最常用的三個參數是u、a、x。下面就結合這三個參數詳細說明ps指令的作用:ps aux
圖2 ps-aux指令詳解
圖2第2行代碼中,USER表示程序擁有者;PID表示程序标示符;%CPU表示占用的CPU使用率;%MEM占用的實體記憶體使用率;VSZ表示占用的虛拟記憶體大小;RSS為程序占用的實體記憶體值;TTY為終端的次要裝置号碼。
STAT表示程序的狀态,其中D為不可中斷的靜止(I/O動作);R正在執行中;S靜止狀态;T暫停執行;Z不存在,但暫時無法消除;W沒有足夠的記憶體分頁可配置設定;高優先序的程序;N低優先序的程序;L有記憶體分頁配置設定并鎖在記憶體體内 (實時系統或 I/O)。START為程序開始時間。TIME為執行的時間。COMMAND是所執行的指令。
在進行系統維護時,經常會出現記憶體使用量驚人,而又不知道是哪一個程序占用了大量程序的情況。除了可以使用top指令檢視記憶體使用情況之外,還可以使用下面的指令:
ps aux | sort +5n
<b>who </b>
who顯示系統中有哪些使用者登陸系統,顯示的資料包含了使用者ID、使用的登陸終端、上線時間、呆滞時間、CPU占用,以及做了些什麼。 使用權限為所有使用者。
who - [husfV] [user]
該指令主要用于檢視目前線上上的使用者情況。如果使用者想和其它使用者建立即時通信,比如使用talk指令,那麼首先要确定的就是該使用者确實線上上,不然talk程序就無法建立起來。又如,系統管理者希望監視每個登入的使用者此時此刻的所作所為,也要使用who指令。who指令應用起來非常簡單,可以比較準确地掌握使用者的情況,是以使用非常廣泛。
<b>動手練習</b>
1.使用Linux指令檢測系統入侵者
安裝過 Mandrake Linux和Red Hat Linux的使用者都會知道,Linux系統會内置三種不同級别(标準、高、更高)的防火牆,當進行了Linux伺服器的安裝和一些基本的設定後,伺服器應該說是比較安全的,但是也會有黑客通過各種方法利用系統管理者的疏忽侵入系統。如何快速查找黑客非常重要。一般來說,可以使用指令查詢黑客是否入侵,見表 1。
表1 查詢黑客入侵現象的指令對應表
舉例說明,如果黑客嗅探網絡,那麼它必須使網卡接口處于混雜模式,使用下面指令進行查詢:
從這個指令的輸出中,可以看到上面講到的這些概念。第一行的00:00: E8:A0:25:86是mac位址,第二行的192.168.1.7是IP位址,第四行講的是接收資料狀态,這時正在被黑客嗅探。一般而言,網卡有幾種接收資料幀的狀态,如Broadcast、Multicast、Promiscuous等。Broadcast是指接收所有類型為廣播封包的資料幀; Multicast是指接收特定的多點傳播封包;Promiscuous則是通常說的混雜模式,是指對封包中的目的硬體位址不加任何檢查、全部接收的工作模式。
2.限制su指令的濫用
我們知道,超級使用者在Linux 中有最大的權利,幾乎所有黑客都想得到這個目标。Linux可以增加對切換到超級使用者的限制。使用PAM(Pluggable Authentication Modules)可以禁止除在wheel組以外的任何人su成root,修改/etc/pam.d/su檔案,除去屏蔽辨別#。使用 /usr/sbin/usermod G10 bjecadm将bjecadm這個賬号加入gid為10的組,就是wheel組。指令如下:
另外,每當使用者試圖使用su指令進入系統使用者時,指令将在/usr/adm/sulog檔案中寫一條資訊,若該檔案記錄了大量試圖用su進入root的無效操作資訊,則表明了可能有人企圖破譯root密碼。
Linux指令有着強大的功能。對于Linux系統管理者來說,往往隻需要通過各種安全指令技巧,組合構成安全防線。從計算機安全的角度看,世界上沒有絕對安全的計算機系統,Linux系統也不例外。
三、檢視磁盤分區等指令
一、df 指令;
df 是來自于coreutils 軟體包,系統安裝時,就自帶的;我們通過這個指令可以檢視磁盤的使用情況以及檔案系統被挂載的位置;
舉例:
[root@localhost beinan]# df -lh
Filesystem 容量 已用 可用 已用% 挂載點
/dev/hda8 11G 6.0G 4.4G 58% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/sda1 56G 22G 35G 39% /mnt/sda1
我們從中可以看到,系統安裝在/dev/hda8 ;還有一個56G的磁盤分區/dev/sda1挂載在 /mnt/sda1中;
其它的參數請參考 man df
二、fdisk
fdisk 是一款強大的磁盤操作工具,來自util-linux軟體包,我們在這裡隻說他如何檢視磁盤分區表及分區結構;參數 -l ,通過-l 參數,能獲得機器中所有的硬碟的分區情況;
[root@localhost beinan]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
在上面Blocks中,表示的是分區的大小,Blocks的機關是byte ,我們可以換算成M,比如第一個分區/dev/hda1的大小如果換算成M,應該是6144831/1024=6000M,也就是6G左右,其實沒有這麼麻煩,粗略的看一下把小數點向前移動三位,就知道大約的體積有多大了;
System 表示的檔案系統,比如/dev/hda1 是NTFS格式的;/dev/hda2 表示是fat32格式的檔案系統;.
在此例中,我們要特别注意的是/dev/hda3分區,這是擴充分區;他下面包含着邏輯分區,其實這個分區相當于一個容器;從屬于她的有 hda5,hda6,hda7,hda8,hda9 ;
我們還注意到一點,怎麼沒有hda4呢?為什麼hda4沒有包含在擴充分區?一個磁盤最多有四個主分區; hda1-4算都是主分區;hda4不可能包含在擴充分區裡,另外擴充分區也算主分區;在本例中,沒有hda4這個分區,當然我們可以把其中的一個分區設定為主分區,隻是我當時分區的時候沒有這麼做而已;
再仔細統計一下,我們看一看這個磁盤是不是還有空間?hda1+hda2+hda3=實際已經分區的體積,是以我們可以這樣算 hda1+hda2+hda3=6144831+16386300+39728745 = 62259876 (b),換算成M機關,小數點向前移三位,是以目前已經劃分好的分區大約占用體積是62259.876(M),其實最精确的計算 62259876/1024=60800.67(M);而這個磁盤大小是80.0 GB (80026361856byte),其實實際大小也就是78150.744(M);通過我們一系列的計算,我們可以得出這個硬碟目前還有使用的空間;大約還有18G未分區的空間;
fdisk -l 能列出機器中所有磁盤的個數,也能列出所有磁盤分區情況;比如:
Disk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
/dev/sda1 1 57231 58604528 83 Linux
通過上面我們可以知道此機器有兩塊硬碟,我們也可以指定fdisk -l 來檢視其中一個硬碟的分區情況;
[root@localhost beinan]# fdisk -l /dev/sda
通過上面情況可以知道,在/dev/sda 這個磁盤中,隻有一個分區;使用量差不多是百分百了;
我們還可以來檢視 /dev/hda的
[root@localhost beinan]# fdisk -l /dev/hda
自己試試看?
三、cfdisk 來自于util-linux的軟體包;
cfdisk 也是一款不錯的分區工具;在有些發行版中,此工具已經從util-linux包中剔除;cfdisk 簡單易用是他的特點;和DOS中的fdisk 相似;在本标題中,我們隻來解說如何檢視機器的中的磁盤分區狀況及所用的檔案系統等;
檢視磁盤分區的用法 cfdisk -Ps 磁盤裝置名;
比如
[root@localhost beinan]cfdisk -Ps
[root@localhost beinan]cfdisk -Ps /dev/hda
Partition Table for /dev/hda
First Last
# Type Sector Sector Offset Length Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
1 Primary 0 23438834 63 23438835 Linux (83) Boot
2 Primary 23438835 156296384 0 132857550 Extended (05) None
5 Logical 23438835 155268224 63 131829390 Linux (83) None
6 Logical 155268225 156296384 63 1028160 Linux swap (82) None
我們隻用的參數 -Ps,就列出了磁盤的分區情況;目前在Slackware Debian Mandrake 等主流發行版中存在cfdisk ,而fedora 4.0把這個小工具剔除了;有點可惜;這是我在Slackware中操作的;
如果您這樣操作,就更直覺了;
[root@localhost beinan]cfdisk 磁盤裝置名
[root@localhost beinan]cfdisk /dev/hda
您所看到的是如下的模式:
cfdisk 2.12a
Disk Drive: /dev/hda
Size: 80026361856 bytes, 80.0 GB
Heads: 255 Sectors per Track: 63 Cylinders: 9729
Name Flags Part Type FS Type [Label] Size (MB)
-------------------------------------------------------------------------------------------
hda1 Boot Primary Linux ReiserFS 12000.69
hda5 Logical Linux ReiserFS 67496.65
hda6 Logical Linux swap 526.42
[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ] [ Quit ]
[ Type ] [ Units ] [ Write ]
Toggle bootable flag of the current partition
您進入了cfdisk 的操作界面;用鍵盤移動指針到[Quit]就可以退出;
四、parted 功能不錯的分區工具;在Fedora 4.0中有帶,可以自己安裝上;在此主題中,我們隻說如何檢視磁盤的分區情況;
調用方法簡單,parted 預設是打開的裝置是/dev/hda ,也可以自己指定;比如 parted /dev/hda 或/dev/sda 等;退出的方法是 quit
[root@localhost beinan]# parted
使用 /dev/hda
(parted) p
/dev/hda 的磁盤幾何結構:0.000-76319.085 兆位元組
磁盤标簽類型:msdos
Minor 起始點 終止點 類型 檔案系統 标志
1 0.031 6000.842 主分區 ntfs 啟動
2 6000.842 22003.088 主分區 fat32 lba
3 22003.088 60800.690 擴充分區
5 22003.119 30004.211 邏輯分區 reiserfs
6 30004.242 40005.615 邏輯分區 reiserfs
7 40005.646 40774.350 邏輯分區 linux-swap
8 40774.381 52219.094 邏輯分區 ext3
9 52219.125 60800.690 邏輯分區 reiserfs
我們在partd 的操作面上,用p就可以列出目前磁盤的分區情況,如果想要檢視其它磁盤,可以用 select 功能,比如 select /dev/sda ;
五、qtparted ,與parted 相關的軟體還有qtparted ,也能檢視到磁盤的結構和所用的檔案系統,是圖形化的;
[beinan@localhost ~]# qtparted
圖形化的檢視,一目了然;
點選小圖看大圖
六、sfdisk 也是一個分區工具,功能也多多;我們在這裡隻說他的列磁盤分區情況的功能;
[root@localhost beinan]# sfdisk -l
自己看看吧;
sfdisk 有幾個很有用的功能;有興趣的弟兄不妨看看;
七、partx 也簡要的說一說,有些系統自帶了這個工具,功能也簡單,和fdisk 、parted、cfdisk 來說不值一提;不用也罷;
用法: partx 裝置名
[root@localhost beinan]# partx /dev/hda
# 1: 63- 12289724 ( 12289662 sectors, 6292 MB)
# 2: 12289725- 45062324 ( 32772600 sectors, 16779 MB)
# 3: 45062325-124519814 ( 79457490 sectors, 40682 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)
# 5: 45062388- 61448624 ( 16386237 sectors, 8389 MB)
# 6: 61448688- 81931499 ( 20482812 sectors, 10487 MB)
# 7: 81931563- 83505869 ( 1574307 sectors, 806 MB)
# 8: 83505933-106944704 ( 23438772 sectors, 12000 MB)
# 9: 106944768-124519814 ( 17575047 sectors, 8998 MB)
八、檢視目前機器中的所有磁盤及分區情況:
[beinan@localhost ~]$ cat /proc/partitions
major minor #blocks name
3 0 78150744 hda
3 1 6144831 hda1
3 2 16386300 hda2
3 5 8193118 hda5
3 6 10241406 hda6
3 7 787153 hda7
3 8 11719386 hda8
3 9 8787523 hda9
8 0 58605120 sda
8 1 58604528 sda1
九、mac-fdisk 這個工具主要是用在Powerpc版本的Linux中,咱們常用X86版本中沒有這個工具;這個隻是介紹一下;
四、檢視使用者指令
Xwindows界面的就不說了.
1、Linux裡檢視所有使用者
linux裡,并沒有像windows的net user,net localgroup這些友善的指令來管理使用者.
(1)在終端裡.其實隻需要檢視 /etc/passwd檔案就行了.
(2)看第三個參數:500以上的,就是後面建的使用者了.其它則為系統的使用者.
或者用cat /etc/passwd |cut -f 1 -d :
2、使用者管理指令
useradd 注:添加使用者
adduser 注:添加使用者
passwd 注:為使用者設定密碼
usermod 注:修改使用者指令,可以通過usermod 來修改登入名、使用者的家目錄等等;
pwcov 注:同步使用者從/etc/passwd 到/etc/shadow
pwck 注:pwck是校驗使用者配置檔案/etc/passwd 和/etc/shadow 檔案内容是否合法或完整;
pwunconv 注:是pwcov 的立逆向操作,是從/etc/shadow和 /etc/passwd 建立/etc/passwd ,然後會删除 /etc/shadow 檔案;
finger 注:檢視使用者資訊工具
id 注:檢視使用者的UID、GID及所歸屬的使用者組
chfn 注:更改使用者資訊工具
su 注:使用者切換工具
sudo 注:sudo 是通過另一個使用者來執行指令(execute a
command as another user),su 是用來切換使用者,然後通過切換到的使用者來完成相應的任務,但sudo
能後面直接執行指令,比如sudo 不需要root 密碼就可以執行root 賦與的執行隻有root才能執行相應的指令;但得通過visudo
來編輯/etc/sudoers來實作;
visudo 注:visodo 是編輯 /etc/sudoers 的指令;也可以不用這個指令,直接用vi 來編輯 /etc/sudoers 的效果是一樣的;
sudoedit 注:和sudo 功能差不多;
3、管理使用者組(group)的工具或指令;
groupadd 注:添加使用者組;
groupdel 注:删除使用者組;
groupmod 注:修改使用者組資訊
groups 注:顯示使用者所屬的使用者組
grpck
grpconv 注:通過/etc/group和/etc/gshadow 的檔案内容來同步或建立/etc/gshadow ,如果/etc/gshadow 不存在則建立;
grpunconv 注:通過/etc/group 和/etc/gshadow 檔案内容來同步或建立/etc/group ,然後删除gshadow檔案。