Samba使用大全(絕對經(jīng)典)
Samba協(xié)議基礎
在NetBIOS出現(xiàn)之后,Microsoft就使用NetBIOS實現(xiàn)了一個網(wǎng)絡文件/打印服務系統(tǒng),這個系統(tǒng)基于NetBIOS設定了一套文件共享協(xié)議,Microsoft稱之為SMB(Server Message Block)協(xié)議。這個協(xié)議被Microsoft用于它們Lan Manager和Windows NT服務器系統(tǒng)中,實現(xiàn)不同計算機之間共享打印機、串行口和通訊抽象(如命名管道、郵件插槽等)。 隨著Internet的流行,Microsoft希望將這個協(xié)議擴展到Internet上去,成為Inter net上計算機之間相互共享數(shù)據(jù)的一種標準。因此它將原有的幾乎沒有多少技術文檔的SMB協(xié)議進行整理,重新命名為 CIFS(Common Internet File System),并打算將它與NetBIOS相脫離,試圖使它成為Internet上的一個標準協(xié)議。 因此,為了讓Windows和Unix計算機相集成,最好的辦法即是在Unix計算機中安裝支持SMB/CIFS協(xié)議的軟件,這樣Windows客戶就不需要更改設置,就能如同使用Windows NT服務器一樣,使用Unix計算機上的資源了。Samba是用來實現(xiàn)SMB的一種軟件,它的工作原理是,讓NETBIOS(Windows95網(wǎng)絡鄰居的通訊協(xié)議)和SMB(Server Message Block)這兩個協(xié)議運行于TCP/IP通信協(xié)議之上,并且使用Windows的NETBEUI協(xié)議讓Unix計算機可以在網(wǎng)絡鄰居上被Windows計算機看到。它的功能有: 1.共享Linux磁盤給Win95/NT 2.共享Win95/NT磁盤給Linux機器 3.共享Linux打印機給win95/NT 4.共享win95/NT打印機給Linux機器。 同時它的文件服務功能比NT系統(tǒng)還高,而且在Windows2000之前就提供了用戶磁盤空間限制的功能。 Samba的配置 在我寫這篇文章的時候,Samba的版本已經(jīng)到了2.2.2了,需要的可以通過ftp://samba.org/pub/samba/Binary_Pa...011013.i386.rpm得到最新的rpm安裝包。然后執(zhí)行rpm -Uvh samba-2.2.2-20011013.i386.rpm來安裝或者升級它。安裝完后,可以看見/etc/samba這么一個目錄,里面存放和Samba相關的一些文件,最主要的是smb.conf,現(xiàn)在根據(jù)配置文件講講它的配置選項: 全局設置: workgroup = MYGROUP 定義該Samba服務器所在的工作組或者域(如果下面的security=domain的話)。 server string = MY Samba Server 設定機器的描述,當我們通過網(wǎng)絡鄰居訪問的時候可以在備注里面看見這個內容,而且還可以使用samba設定的變量。這里說一下samba定義的變量: %S = 當前服務名(如果有的話) %P = 當前服務的根目錄(如果有的話) %u = 當前服務的用戶名(如果有的話) %g = 當前用戶說在的主工作組 %U = 當前對話的用戶名 %G = 當前對話的用戶的主工作組 %H = 當前服務的用戶的Home目錄 %v = Samba服務的版本號。 %h = 運行Samba服務機器的主機名 %m = 客戶機的NETBIOS名稱 %L = 服務器的NETBIOS名稱 %M = 客戶機的主機名 %N = NIS服務器名 %p = NIS服務的Home目錄 %R = 說采用的協(xié)議等級(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1) %d = 當前服務進程的ID %a = 客戶機的結構(只能識別幾項:Samba,WfWg,WinNT,Win95) %I = 客戶機的IP %T = 當前日期和時間 hosts allow = 網(wǎng)絡或者主機 這里可以設置允許訪問的網(wǎng)絡和主機IP,比如允許192.168.1.0/24和192.168.2.1/32訪問,就用host allow = 192.168.1. 192.168.2.1 127.0.0.1(網(wǎng)絡注意后面加”.”號,各個項目間用空格隔開,記得把本機也加進去) printcap name = printcapFile 到printcapFile(一般是/etc/printcap)這個文件中取得打印機的描述信息 load printers = yes|no 設定是否自動共享打印機而不用設置下面的[printer]一節(jié)的相關東西 printing = PrintSystemType 定義打印系統(tǒng)的類型,缺省是lprng,可選項有:bsd, sysv, plp, lprng, aix, hpux, qnx。 guest account = pcguest 定義游客賬號,而且需要把這個賬號加入/etc/passwd,不然它就用缺省的nobody log file = LogFileName 定義記錄文件的位置LogFileName(一般是用/var/log/samba/%m.log) max log size = size 定義記錄文件的大小size(單位是KB,如果是0的話就不限大?。? security = security_level 定義Samba的安全級別,按從低到高分為四級:share,user,server,domain。它們對應的驗證方式如下: share:沒有安全性的級別,任何用戶都可以不要用戶名和口令訪問服務器上的資源。 user:samba的默認配置,要求用戶在訪問共享資源之前資源必須先提供用戶名和密碼進行驗證。 server:和user安全級別類似,但用戶名和密碼是遞交到另外一個服務器去驗證,比如遞交給一臺NT服務器。如果遞交失敗,就退到user安全級。 domain:這個安全級別要求網(wǎng)絡上存在一臺Windows的主域控制器,samba把用戶名和密碼遞交給它去驗證。 后面三種安全級都要求用戶在本Linux機器上也要系統(tǒng)帳戶。否則是不能訪問的。 password server = <NT-Server-Name> 當前面的security設定為server或者domain的時候才有必要設定它。 password level = n 這是設定針對一些SMB客戶像OS/2之類而設的,這樣的系統(tǒng)在發(fā)送用戶密碼的時候,會把密碼轉換成大寫再發(fā)送,這樣就和samba的密碼不一致,這個參數(shù)可以設定密碼里允許的大寫字母個數(shù),這樣samba就根據(jù)這個數(shù)目對接收到的密碼進行大小寫重組,以重組過的密碼嘗試驗證密碼的正確性。n越大,組合的次數(shù)就越多,驗證時間就越長,安全性也會因此變得越低。例如n=2,用戶的密碼是abcd,但發(fā)送出去其實是ABCD,samba就會把這個ABCD進行大小寫重組,組合后的結果可以是: Abcd, aBcd, abCd, abcD, abcd, ABcd, AbCd, AbcD,aBCd,aBcD,abCD。 所以如果沒有必要,就把n定為是零。這樣的話samba只嘗試兩次,一個是接收到的密碼,另一個嘗試的是這個密碼都是小寫的情況。 username level = n 這個是對于用戶名的情況,說明和上面一項類似。 encrypt passwords = yes|no 設置是否對密碼進行加密,samba本身有一個密碼文件/etc/samba/smbpasswd,如果不對密碼進行加密則在驗證會話期間客戶機和服務器之間傳遞的是明文密碼,samba直接把這個密碼和Linux里的/etc/samba/smbpasswd密碼文件進行驗證。但是在Windows 95 OS/R2以后的版本和Windows NT SP3以后的版本缺省都不傳送明文密碼,要讓這些系統(tǒng)能傳送明文密碼必須在其注冊表里更改,比較麻煩,好的方法就是把這里的這個開關設置為yes。 smb passwd file = smbPasswordFile 設置存放samba用戶密碼的文件smbPasswordFile(一般是/etc/samba/smbpasswd)。 ssl CA certFile = sslFile 當samba編譯的時候支持SSL的時候,需要指定SSL的證書的位置(一般在/usr/share/ssl/certs/ca-bundle.crt)。 unix password sync = yes|no passwd program = /usr/bin/passwd %u passwd chat = *New*UNIX*password* %n *ReType*new*UNIX*password* %n *passwd:*all*authentication*tokens*updated*successfully* 這三項設置能否從windows的應用程序修改unix系統(tǒng)的用戶密碼 username map = UsermapFile 指定用戶映射文件(一般是/etc/samba/smbusers),當我們在這個文件里面指定一行root = administrator admin的時候,客戶機的用戶是admin或者administrator連接時會被當作用戶root看待。 include = MachineConfFile 指定對不同機器的連接采用不同的配置文件MachineConfFile(一般為了靈活管理使用/etc/samba/smb.conf.%m,由于采用了samba的變量,把配置文件和客戶機的NETBIOS名稱關聯(lián)起來,能很容易地控制這些客戶機的權限和設置)。 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 這個是網(wǎng)絡socket方面的一些參數(shù),能實現(xiàn)最好的文件傳輸性能。相關的選項還有SO_KEEPALIVE、 SO_REUSEADDR、SO_BROADCAST、IPTOS_LOWDELAY、IPTOS_THROUGHPUT、SO_SNDLOWAT(*)、SO_RCVLOWAT(*),帶*號的要指定數(shù)值。一般如果在本地網(wǎng)絡,就只用IPTOS_LOWDELAY,如果是有一個本地網(wǎng)絡的,就用IPTOS_LOWDELAY TCP_NODELAY,如果是廣域網(wǎng)絡,就試試IPTOS_THROUGHPUT。 interfaces = interface1 interface2 如果有多個網(wǎng)絡接口,就必須在這里指定。如interface = 192.168.12.2/24 192.168.13.2/24 remote browse sync = host(subnet) 這里指定瀏覽列表同步信息從哪里取得, 如果用host(比如192.168.3.25)或者整個子網(wǎng)(192.168.5.255)。 ★這里說明一下什么是瀏覽(Browse): 在SMB協(xié)議中,計算機為了訪問網(wǎng)絡資源,就需要了解網(wǎng)絡上存在的資源列表(例如在Windows下使用網(wǎng)絡鄰居查看可以訪問的計算機),這個機制就被稱為瀏覽(Browse)。雖然SMB協(xié)議中經(jīng)常使用廣播的方式,但如果每次都使用廣播的方式了解當前的網(wǎng)絡資源(包括提供服務的計算機和各個計算機上的服務資源),就需要消耗大量的網(wǎng)絡資源和浪費較長的查找時間,因此最好在網(wǎng)絡中維護一個網(wǎng)絡資源的列表,以方便查找網(wǎng)絡資源。只有必要的時候,才重新查找資源,例如使用Windows下的查找計算機功能。 但沒有必要每個計算機都維護整個資源列表,維護網(wǎng)絡中當前資源列表的任務由網(wǎng)絡上的幾個特殊計算機完成的,這些計算機被稱為Browser,這些Browser通過記錄廣播數(shù)據(jù)或查詢名字服務器來記錄網(wǎng)絡上的各種資源。 Browser并不是事先指定的計算機,而是在普通計算機之間通過自動進行的推舉產(chǎn)生的。不同的計算機可以按照其提供服務的能力,設置在推舉時具備的不同權重。為了保證一個Browser停機時網(wǎng)絡瀏覽仍然正常,網(wǎng)絡中常常存在多個Browser,一個為主Browser(Master Browser),其他的為備份Browser?!? remote announce = host(subnet) 指定這些機器向網(wǎng)絡宣告自己,而不是有Browser得到。 local master = yes|no 這個參數(shù)指定nmbd是否試圖成為本地主瀏覽器,默認值是yes,如果設為no則samba服務器就永遠都不會成為本地主瀏覽器。但即使設置了yes,也不等于samba服務器就會成為本地主瀏覽器。只是參與本地主瀏覽器選擇。 os level = n n的值是個整數(shù),決定了nmbd是否有機會成為本地廣播區(qū)域的工作組里的本地主瀏覽器,默認值是零,零則意味著nmbd失去瀏覽選擇。如果要nmbd更有機會成為本地主瀏覽器的話,可以設為65。 domain master = yes|no 這個參數(shù)讓nmbd成為一個域瀏覽器,取得各本地主瀏覽器的瀏覽列表,并將整個域的瀏覽列表遞交給各本地主瀏覽器。 preferred master = yes|no 這個參數(shù)指定nmbd是否是工作組里的首要的主瀏覽器,如果指定為yes,nmbd在啟動的時候就強制一個瀏覽選擇。 ★Domain master和local master 工作組和域這兩個概念在進行瀏覽時具備同樣的用處,都是用于區(qū)分并維護同一組瀏覽數(shù)據(jù)的多個計算機。事實上他們的不同在于認證方式上,工作組中每臺計算機都基本上是獨立的,獨立對客戶訪問進行認證,而域中將存在一個(或幾個)域控制器,保存對整個域中都有效的認證信息,包括用戶的認證信息以及域內成員計算機的認證信息。瀏覽數(shù)據(jù)的時候,并不需要認證信息,Microsoft將工作組擴展為域,只是為了形成一種分級的目錄結構,將原有的瀏覽和目錄服務相結合,以擴大Mircrosoft網(wǎng)絡服務范圍的一種策略。 工作組和域都可以跨越多個子網(wǎng),因此網(wǎng)絡中就存在兩種Browser,一種為Domain Master Browser ,用于維護整個工作組或域內的瀏覽數(shù)據(jù),另一種為Local Master Browser,用于維護本子網(wǎng)內的瀏覽數(shù)據(jù),它和Domain Master Browser通信以獲得所有的可瀏覽數(shù)據(jù)。劃分這兩種Browser 主要是由于瀏覽數(shù)據(jù)依賴于本地網(wǎng)廣播來獲得資源列表,不同子網(wǎng)之間只能通過瀏覽器之間的交流能力,才能互相交換資源列表。 但是,為了瀏覽多個子網(wǎng)的資源,必須使用NBNS名字服務器的解析方式,沒有NBNS的幫助,計算機將不能獲得子網(wǎng)外計算機的NetBIOS名字。Local Master Browser也需要查詢NetBIOS名字服務器以獲得Domain Master Browser的名字,以相互交換網(wǎng)絡資源信息。 由于域控制器在域內的特殊性,因此域控制器傾向于被用做Browser,主域控制器應該被用作Domain Master Browser,他們在推舉時設置的權重較大?!? preserve case = yes|no short preserve case = yes|no 指定拷貝DOS文件的時候保持大小寫,缺省是no default case = lower|upper 所有的DOS文件的缺省是大寫還是小寫 case sensitive = yes|no 大小寫敏感,一般是no,不然會出現(xiàn)一些問題。 共享設置: ★共享資源: 每個SMB服務器能對外提供文件或打印服務,每個共享資源需要被給予一個共享名,這個名字將顯示在這個服務器的資源列表中。如果一個資源的名字的最后一個字母為$,則這個共享名就為隱藏共享,不能直接表現(xiàn)在瀏覽列表中,而只能通過直接訪問這個名字來進行訪問。在SMB協(xié)議中,為了獲得服務器提供的資源列表,必須使用一個隱藏的資源名字IPC$來訪問服務器,否則客戶無法獲得系統(tǒng)資源的列表?!? 共享設置中有個比較奇怪的段: [homes],在smb.conf文件中一般沒有對這個目錄的設定特定內容比如路徑等。當客戶機發(fā)出服務請求時,就在smb.conf文件的其它部分查找友特定內容的服務。如果沒有發(fā)現(xiàn)這些服務,并且提供了homes段時,那么就搜索密碼文件得到用戶的Home目錄。通過Homes段,Samba可以得到用戶的Home目錄并使之共享。下面是這個段的最基本的幾個設置。 [homes] comment=Home Directory browseable=no writable=yes 比較正常的共享的配置如下例: [MyShare] comment = grind’s file path = /home/grind allow hosts = host(subnet) deny hosts = host(subnet) writable = yes|no user = user(@group) valid users = user(@group) invalid users = user(@group) read list = user(@group) write list = user(@group) admin list = user(@group) public = yes|no hide dot files = yes|no create mode = 0755 directory mode = 0755 sync always = yes|no short preserve case = yes|no preserve case = yes|no case sensitive = yes|no mangle case = yes|no default case = upper|lower force user = grind wide links = yes|no max connections = 100 delete readonly = yes|no 其中[]里面的MyShare指定共享名,一般就是網(wǎng)絡鄰居里面可以看見的文件夾的名字。 comment指的是對改共享的備注。 path指定共享的路徑,其中可以配合samba變量使用。比如你可以指定path=/data/%m,這樣如果一臺機器的NETBIOS名字是grind,它訪問MyShare這個共享的時候就是進入/data/grind目錄,而對于NETBIOS名是glass的機器,則進入/data/glass目錄。 allow hosts和deny hosts和前面的全局設置的方法一樣這里不再提及。 writeable指定了這個目錄缺省是否可寫,也可以用readonly = no來設置可寫。 user設置所有可能使用該共享資源的用戶,也可以用@group代表group這個組的所有成員,不同的項目之間用空格或者逗號隔開。 valid users指定能夠使用該共享資源的用戶和組。 invalid users指定不能夠使用該共享資源的用戶和組。 read list 指定只能讀取該共享資源的用戶和組。 write list指定能讀取和寫該共享資源的用戶和組。 admin list指定能管理該共享資源(包括讀寫和權限賦予等)的用戶和組。 public指明該共享資源是否能給游客賬號訪問,這個開關有時候也叫guest ok,所以有的配置文件中出現(xiàn)guest ok = yes其實和public = yes是一樣的。 hide dot files指明是不是像unix那樣隱藏以“.”號開頭的文件。 create mode指明新建立的文件的屬性,一般是0755。 directory mode指明新建立的目錄的屬性,一般是0755。 sync always指明對該共享資源進行寫操作后是否進行同步操作。 short preserve case指明不管文件名大小寫。 preserve case指明保持大小寫。 case sensitive指明是否對大小寫敏感,一般選no,不然可能引起錯誤。 mangle case指明混合大小寫。 default case指明缺省的文件名是全部大寫還是小寫。 force user強制把建立文件的屬主是誰。如果我有一個目錄,讓guest可以寫,那么guest就可以刪除,如果我用force user= grind強制建立文件的屬主是grind,同時限制create mask = 0755,這樣guest就不能刪除了。 wide links指明是否允許共享外符號連接,比如共享資源里面有個連接指向非共享資源里面的文件或者目錄,如果設置wide links = no將使該連接不可用。 max connections = n設定同時連接數(shù)是n。 delete readonly指明能否刪除共享資源里面已經(jīng)被定義為只讀的文件。 有兩類特殊的共享,分別是光驅和打印機 光驅的共享設置: [cdrom] comment = grind’s cdrom path = /mnt/cdrom public = yes browseable = yes root preexec = /bin/mount -t iso9660 /dev/cd0 /mnt/cdrom root postexec = /bin/umount /mnt/cdrom 這里root preexec指明了連接時用root的身份運行mount命令,而root postexec則指明了斷開時用root身份運行umount,有效實現(xiàn)了對光驅的共享。 打印機共享的設置: [printers] path = /var/spool/samba writeable = no guest ok = yes printable = yes printer driver = HP LaserJet 5L 這里printable指明該打印機可以打印, guest ok說明游客也能打印,path指明打印的文件隊列暫時放到/var/spool/samba目錄下。printer driver的作用是指明該打印機的類型,這樣我們在安裝網(wǎng)絡打印機的時候可以直接自動安裝驅動而不必選擇。 添加用戶: samba添加用戶比較方便,一般是用smbadduser,用法是smbadduser unixid:netid,舉個例子:如果你的本機有個叫grind的用戶,你用smbadduser grind:grind,這樣從網(wǎng)上鄰居訪問的時候用戶名就用grind,而如果你用了smbadduser grind:glass的話,網(wǎng)上鄰居訪問的時候提供的用戶名就是glass而不是grind了。 關于samba服務端的設置基本就是這些,我想一般應用中所要使用的上面幾乎都覆蓋到了,所以有些不重要的就省略了,如果要更加詳細的信息可以用man smb.conf參考。< Samba使用大全(二)-Samba客戶端 使用Samba網(wǎng)絡打印: 使用unix網(wǎng)絡打印以前的文章比較少涉及,最近試驗了一下,效果還是不錯的,現(xiàn)在講講基本的實現(xiàn)方法: 比如你要建立一臺網(wǎng)絡打印機grind,而打印機對應網(wǎng)絡上面的//glass/HPLaserj,所有需要配置的文件有下面幾個: 1./etc/printcap,內容一般為: grind: :sh: #禁止提示的header :ml=0: #打印的文件的長度下限, :mx=0: #最大的打印文件大小,0為不限制 :sd=/var/spool/lpd/grind: #打印機的spool目錄 :lp=|/usr/bin/smbprint: #打印輸出需要的設備名或者管道名 :lpd_bounce=true: #強制lpd守護進程過濾打印文件 :if=/usr/share/printconf/mf_wrapper: #過濾命令文件 2.smbprint這個一般在安裝完smb相關的rpm包以后就有了,主要內容是: eval acct_file=$$# spool_dir=`dirname $acct_file` config_file=$spool_dir/.config eval `cat $config_file` share=`echo $share | sed "s/[]///g"` if [ "$user" != "" ]; then usercmd="-U" else usercmd="" fi if [ "$workgroup" != "" ]; then workgroupcmd="-W" else workgroupcmd="" fi if [ "$translate" = "yes" ]; then command="translate ; print -" else command="print -" fi cat | /usr/bin/smbclient "$share" "$password" -E ${hostip:+-I} $hostip -N -P $usercmd "$user" $workgroupcmd "$workgroup" -c "$command" 2>/dev/null 3.mf_wrapper是一個magic filter文件,是相關的一些過濾規(guī)則。內容是: MF_RULE_DIR=‘/usr/share/printconf/mf_rules‘ MF_RULES=$MF_RULE_DIR/mf[[:digit:]][[:digit:]]-* TMP_FILE=`mktemp /tmp/printconf.XXXXXX`‘ ‘exit 1 cat ./mf.cfg $MF_RULES | m4 > $TMP_FILE if [ -n "$DEBUG" ]; then case "$DEBUG" in 2) DEBUGSTRING="--debug --debug" ;; 3) DEBUGSTRING="--debug --debug --debug" ;; 4) DEBUGSTRING="--debug --debug --debug --debug" ;; 5) DEBUGSTRING="--debug --debug --debug --debug --debug" ;; *) DEBUGSTRING="--debug" ;; esac else DEBUGSTRING="" fi # Run magic filter /usr/bin/magicfilter-t $TMP_FILE $DEBUGSTRING $* < /dev/stdin RETVAL=$? if [ -f $TMP_FILE ]; then rm -f $TMP_FILE; fi ;; esac else DEBUGSTRING="" fi # Run magic filter /usr/bin/magicfilter-t $TMP_FILE $DEBUGSTRING $* < /dev/stdin RETVAL=$? if [ -f $TMP_FILE ]; then rm -f $TMP_FILE; fi if [[ $RETVAL -eq 0 ]]; then TERMINATION=`grep ‘^[[:space:]]*#[[:space:]]*TERMINATION=‘ ./mf.cfg | se d ‘s/^[[:space:]]*#[[:space:]]*TERMINATION=//;‘` if [ -n $TERMINATION ]; then echo -n -e $TERMINATION; fi fi 同時需要在/var/spool/lpd/grind下面有這么兩個文件:mf.cfg和script.cfg。 mf.cfg的內容是: define(TEXTfilter, text "" 14 )dnl define(PSfilter, `filter /usr/share/printconf/util/mf_postscript_wrapper --mfomatic -d lj5gray-75168.foo‘)dnl script.cfg的內容是: share="http://glass/HPLaserj" #glass機器上面共享的打印機 hostip="192.168.1.123" #glass這臺機器的IP user="" password="" workgroup="" translate="no" 完成這個工作后,啟動lpd進程,然后就能用lpr等命令使用網(wǎng)絡打印機打印了。 使用網(wǎng)絡共享文件資源: 列出網(wǎng)絡資源: 一般可以用smbclient來列出某臺機器相關的資源,smbclient的用法參考http://www./training...owtod.jsp?i=241 。這里講比較有用的使用方法: smbclient -L IP或者NETBIOS名稱,作用是顯示某臺提供samba服務的服務器上的共享資源。命令執(zhí)行效果如下: smbclient -L glass Sharename Type Comment --------- ---- ------- IPC$ IPC 遠程 IPC HPLaserJ Printer HP LaserJet 6P ADMIN$ Disk 遠程管理 littlep Disk C$ Disk 默認共享 Server Comment --------- ------- GLASS GRIND Workgroup Master --------- ------- BLUESUN GLASS WORKGROUP HEIHEI 第一段列舉了該機器(glass)上面的共享資源,第二段列舉了glass所在的工作組里面所有提供samba服務的機器,第三列舉了其他工作組提供browse服務的Master機器(關于Master和Browse服務可以參考我的前面一篇samba使用大全-samba服務器)。 使用網(wǎng)絡資源: smbclient //IP或者NETBIOS名稱/共享資源名 [-U 用戶名] 命令執(zhí)行效果如下: smbclient //glass/littlep added interface ip=192.168.1.123 bcast=192.168.1.255 nmask=255.255.255.0 Got a positive name query response from 192.168.1.123 (192.168.1.123) Password: Domain=[BLUESUN] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager] smb: > 接下來的操作和ftp的時候命令一樣,用get下載文件而用put上傳文件,命令可以用help查看。 還有一種方法是用文件系統(tǒng)的方式(這種方式要確定你的內核支持smbfs,如果沒有支持的話,編譯內核的時候必須選中File systems--->Network File Systems---> SMB file system support (to mount Windows shares etc.) ): smbmount //IP或者NETBIOS名稱/共享資源名 /本地掛接點 [-o option] 常用的的option有username=<用戶名>,password=<密碼>,guest(指定為用guest訪問,不用提供密碼,前面的即使用username=guest參數(shù)的話也會要求輸入密碼),ro(有時候為了系統(tǒng)安全要指定為只讀模式),rw,同時多個option的話用逗號隔開。 或者可以用mount -t smbfs [-o option] //IP或者NETBIOS名稱/共享資源名 /本地掛接點來實現(xiàn)同樣的功能。 例子如下: smbmount //glass/littlep /test -o guest或者mount -t smbfs -o guest //glass/littlep /test,然后就能通過訪問/test來使用網(wǎng)絡上的資源了。 如果不需要使用的時候,可以簡單地使用smbumount /test或者umount /test來解除這個掛接。 關于samba的功能(共享Linux磁盤給Win95/NT、共享Linux打印機給win95/NT、共享win95/NT打印機給Linux機器。、共享Win95/NT磁盤給Linux機器),前面兩個屬于samba服務器的內容而后兩個屬于samba客戶段的內容,在我的兩篇文章中都有介紹了他們的實現(xiàn)方法,但是samba實在是一個強大的工具,無法十分詳細地介紹它地全部功能,而且限于筆者的知識有限,有不到之處請各位指出,還望各位多多交流。 Samba使用大全中有這樣一段: force user強制把建立文件的屬主是誰。如果我有一個目錄,讓guest可以寫,那么guest就可以刪除,如果我用force user= grind強制建立文件的屬主是grind,同時限制create mask = 0755,這樣guest就不能刪除了。 如上面所述,我建立一個共享文件夾(smb.conf片斷) ........... [MyShare] comment = share directory path = /home/myshare writable = yes public = yes create mode = 0755 directory mode = 0755 force user = root 按照資料的意思,不論我以任何用戶登陸到這個共享文件夾,在這個文件夾里建立的文件都是屬于root用戶的,當前用戶建立文件之后應該就是沒有刪除的權限了。 我試驗,在win2000登陸到samba服務器,進入myshare目錄,在里面建立好一個文本文件test.txt之后,我在samba服務器上用root登陸,進入myshare目錄,用ls -l查看,test.txt的屬主是root,屬性是 -rwxr--r--,這樣應該說我在win2000上就應該不能刪除這個test.txt文件了,但是,在win2000里,卻可以刪除這個文件,不知道兄弟們有沒有注意這個問題?到底怎樣解釋? 還有一個問題,/home/myshare目錄是root用戶建立的,用命令chmod 777 /home/myshare 更改過權限,上面的權限問題是不是和這個文件夾的權限有關? 請大家?guī)兔纯?。謝謝?。?! __________________ 失去不一定不再有;轉身不一定最軟弱 meteorsky ★ 有分號的是注釋 meteorsky ★ 我發(fā)現(xiàn)force user = ...這一行的作用不是“force user強制把建立文件的屬主是誰。如果我有一個目錄,讓guest可以寫,那么guest就可以刪除,如果我用force user= grind強制建立文件的屬主是grind,同時限制create mask = 0755,這樣guest就不能刪除了”這個意思,而是任何登陸的用戶進入這個目錄時就被當作root,作為root當然可以進行任何操作,登陸身份的改變是在剛登陸之后。 我在linux系統(tǒng)中察看當前連接到samba的用戶id時發(fā)現(xiàn):不管我用那一個用戶登陸samba服務器,只要我進入MyShare目錄,當前的用戶id就變?yōu)閞oot, 可是,這樣的話,我就無法實現(xiàn)限制用戶在指定目錄里只能寫,不能刪除的權限了,這樣的權限限制在windows的ntfs文件系統(tǒng)中是很容易實現(xiàn)的, 不知道在samba中如何才能實現(xiàn)這樣的限制,抑或根本就實現(xiàn)不了? 還請大家?guī)兔Γ。? Samba服務器的使用 一、Samba基礎 1、 簡介 1).SMB協(xié)議 SMB(Server Message Block,服務信息塊)協(xié)議可以看作是局域網(wǎng)上的共享文件/打印機的一種協(xié)議,它可以為網(wǎng)絡內部的其它Windows和Linux機器提供文件系統(tǒng)、打印服務或是其他一些信息。 SMB的工作原理是讓NetBIOS(Win95網(wǎng)絡鄰居通信協(xié)議)與SMB這兩種協(xié)議運行在TCP/IP的通信協(xié)議上,且使用NetBIOS nameserver讓用戶的Linux機器可以在Windows的網(wǎng)絡鄰居里被看到,所以就可以和Win95/NT主機在網(wǎng)絡上相互溝通,共享文件與服務了。 目前Microsoft正在開發(fā)一種新的文件和打印共享協(xié)議--CIFS(Common Internet Files System,通用網(wǎng)絡文件協(xié)議),該協(xié)議支持TCP/IP和DNS等協(xié)議,能在www上支持文件和打印共享。在CIFS下服務器實際上是DNS名,由主機名和域名組成。這種變化是從NetBIOS命令結構中分離出來的。目前CIFS還沒有得到廣泛的應用?,F(xiàn)在在Linux和Win95/NT之間的文件共享注意還是SMB和NFS。 2).什么是Samba Samba是用來實現(xiàn)SMB的一種軟件,由澳大利亞的Andew Tridgell開發(fā),是一種在Linux(Unix)環(huán)境下運行的免費軟件。 通過使用Samba,Linux系統(tǒng)可以實現(xiàn)如下功能: 文件服務和打印服務(在Linux和Win95/NT之間系統(tǒng)之間提供打印機和磁盤的共享) 登陸服務器,使用Windows客戶能注冊到網(wǎng)絡上 作為主要域控制器和域中成員的功能 WINS服務器以及瀏覽功能 支持SSL(Secure Socket Layer) 支持SWAT (Samba Web Administration Tool ) Samba除了支持Linux(Unix)和Win95/NT之外,還支持DOS、IBM OS/2、Macintosh 等操作系統(tǒng)。 在Samba的軟件包中所包括的組件參看表1-1: 表1-1 Samba軟件包的組成列表 2、Samba的記錄文件 Samba為smbd、nmbd和訪問Samba的客戶提供了下列記錄文件,分別記錄有關smbd、nmbd運行信息和每個客戶的訪問信息: 記錄smbd 信息 /var/log/samba/log.smb 記錄nmbd信息 /var/log/samba/log.nmb 記錄客戶訪問信息 /var/log/samba/log.%m 3、啟用Samba服務器 Samba的運行包含兩個后臺守護進程:smbd和nmbd,它們是Samba的核心,在全部時間內運行。nmbd 程序使得通過企圖計算機可以瀏覽Linux服務器。Smbd守護進程在SMB軟件包到達網(wǎng)上時對它們進行處理,并且為使用或共享它的資源與Linux進行協(xié)調。如果指定的是一個文件,該資源就是一個文件;而一個打印機請求就要求訪問一臺打印機。實際上,在請求訪問打印機時,Smbd把要打印的信息存儲到打印機隊列中;在請求訪問一個文件時,Smbd把數(shù)據(jù)發(fā)到內核,最后將它存到磁盤上。 你可以從inetd選擇啟動它們,但這種方法會使Samba變慢。建議使用下面命令可以啟動這兩個進程: /etc/rc.d/init.d/smb start /usr/sbin/samba start 如果想要在系統(tǒng)啟動時自動啟動samba,可以使用/usr/sbin/turboservice命令,選中其中的"SMB (Windows)File Services"。 二、Samba配置及使用 1、定制文件/etc/smb.conf 在安裝完Samba后,還需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。由于SMB是一個非常復雜的協(xié)議,所以配置Samba的工作也是比較繁瑣的,大約有超過170條配置項出現(xiàn)在smb.conf文件中。 1).smb.conf的語法 smb.conf文件有一個清晰的語法結構,與Windows的*.ini文件十分類似。如下所示: 該文件被分成幾部分,每一部分都包括幾個參數(shù),用來定義Samba輸出的共享及其詳細操作。 文件被分隔成若干節(jié),每一節(jié)都由一個被方括號括起來的標識開始(例如,[global]、[home]、[printers]),每一個配置參數(shù)或是一個全局參數(shù)(影響或控制整個服務器),或是一個服務參數(shù)(影響或控制服務器提供的某項服務 )。 global部分定義的參數(shù)用來控制Samba的總特性。除global部分外,每一部分都定義了一個專門的服務。 你可以使用下面的語句來指定一個參數(shù): name=VALUE name可以是一個單詞或者用空格隔開的多個單詞。VALUE可以是布爾值(ture或false;yes或no;1或0)、數(shù)字或字符串。 注釋以分號開頭,可以單獨一行,也可以跟在一條語句之后。 通過在一行的最后一個字符后加反斜杠"\\"可以將一行分成多行。 每一部分的名字和參數(shù)都不區(qū)分大小寫,例如,參數(shù)browseable=yes與browseable=YES是完全等價的 2).smb.conf文件的功能 smbd和nmbd這兩個守護進程啟動時(通常為系統(tǒng)引導時)讀配置文件smb.conf,這一配置文件向這兩個守護進程說明輸出 什么共享、共享輸出給誰以及如何進行輸出等等。 因為安全問題是最重要的,所以你必須指定哪些計算機可以訪問這一共享,smb.conf文件可以很靈活的明確指定每一服務有哪些用戶可以訪問。隨著Linux網(wǎng)絡的增大,這一控制越來越重要。 3).smb.conf文件結構 smb.conf文件主要包括三部分: global(全局)參數(shù) directory shares (目錄共享)部分--包括標準的[home]部分 printer shares(打印共享)部分 其中,global參數(shù)用來設置整個系統(tǒng)的規(guī)則;[home]部分和[printer]部分是服務的特定例程,services(服務)這一術語是網(wǎng)絡客戶機共享或輸出的目錄和打印機的Samba術語。這些服務定義了哪些用戶可以訪問這些目錄和打印機以及如何訪問這些目錄和打印機。 清單1-1給出了smb.conf文件的一個簡單的例子。 清單1-1 smb.conf文件的一個簡單示例 [global] netbios name = FRODO workgroup = UAB-TUCC server string = John Blair\‘s Linux Box security = user printing = lprng log file = /var/log/samba lock directory = /var/lock/samba [homes] comment = Home Directory browseable = no read only = no [printers] browseable = no guest ok = yes printable = yes 在 [global] 段中設置了主機名稱, 主機所在的工作組名稱和瀏覽時可看到的對本機的描述。安全參數(shù)告訴 Samba 使用"用戶級別"的安全保護方式。 SMB 有兩種安全模式: 共享級別, 將資源加密碼控制;用戶級別, 可以使用某一用戶的所有資源。 這里不能詳細解釋兩種方式的微妙差別, 但大部分情況下, 你會想用用戶級別安全控制。 [global] 段中還定義了日志文件目錄和鎖定文件的位置。日志文件在解決故障和完善系統(tǒng)時是很有用的,鎖定文件可以阻止多個用戶同時修改相同的文件。 [homes] 段中的設置控制了每一個用主目錄的共享權限。comment 參數(shù)指定的字符串在你瀏覽本機資源時出現(xiàn)在指定資源的旁邊。 browseable 參數(shù)控制一項服務是否能夠出現(xiàn)在網(wǎng)絡資源瀏覽表中。這里是一些非直覺的東西, browseable = no 意味著這個目錄將在瀏覽時顯示為要驗證的用戶名稱。 舉例來說, 指定 browseable = no, 當我瀏覽這個 Samba 服務器時, 我將看到一個名稱為 cuckoo 的共享目錄。當指定 browseable = yes 時, 我將看到一個名為 homes 和 cuckoo 的共享目錄。設置 read only = no 將允許通過驗證的用戶對主目錄有寫入的權限。 但是, 如果他們的主目錄的 UNIX 權限 不允許寫入, 那么他們就沒有寫的權限。 無論 UNIX 的權限怎樣, 設置 read only = yes 后, 他們的主目錄是只讀的。 printing 命令描述了本地打印系統(tǒng)類型, 這可以讓 Samba 知道怎樣提交打印任務, 顯示打印隊列, 刪除打印任務和其它操作。 如果打印系統(tǒng)是 Samba 所不知道的, 你必須在每次執(zhí)行打印操作時指明命令。 清單中[printing]一段配置允許任何能夠登錄到 Samba 服務器的用戶使用 printcap 中出現(xiàn)的 每一臺打印機。 正常情況下, 如果使用用戶級別安全控制, guest ok = yes 并不能授權每一個用戶(使用系統(tǒng))。 每一個打印服務必須定義為 printable = yes。 下面的一段配置片斷增加了一個命名為 public 的共享目錄, 直接對匿名FTP目錄有只讀的 權限。 你必須在客戶機上建立打印機驅動程序。 對于 Windows 95 和 Windows NT 客戶機, 你可以使用printer name 和 printer driver命令自動建立打印驅動。 [public] comment = Public FTP Directory path = /home/ftp/pub browseable = yes read only = yes 這段描述并不是解釋一些微妙的主題, 例如用戶級和共享級安全性的區(qū)別或者其它的授權認證主題。它僅僅讓我們看到了Samba這座冰山的一角。另一方面,這是一個良好的例子,從中我們可以了解產(chǎn)生一個簡單但可工作的smb.conf文件是多么容易。 下面,我們舉另一個例子說明如何通過Samba把Linux的打印機共享給Windows機器。 為了共享Linux的打印機給Windows機器,必須確定Linux機器上的打印機已經(jīng)設置好。如果能從Linux上打印,那么設定Samba的打印機共享是很簡便的。只要根據(jù)自己的情況,對smb.conf文件有關打印的部分進行修改就可以了。在修改中唯一需要注意的是確保打印機的路徑要與/etc/printcap中的spool目錄相符合,然后就可以在Win95/NT上配置網(wǎng)絡打印機了(關于如何在Win95/NT上配置網(wǎng)絡打印機,本文不做介紹)。 4).標準smb.conf文件清單 在Samba的軟件包里的example目錄中有一個缺省的配置文件smb.conf.defaults。我們可以對它做適當修改后拷貝到你的安裝目錄下的lib目錄里,并改名為smb.conf。清單1-2是Samba系統(tǒng)提供的標準的配置文件。為方便讀者閱讀,本文翻譯了文件中的注釋并適當?shù)奶砑恿私忉尅? 清單1-2 標準smb.conf 文件 # 這是服務器的主要配置文件。您應該閱讀smb.conf(5)的用戶手冊以了解下面 # 列出的每一個選項。Samba有很多的選項,它們之中的大多數(shù)并沒有出現(xiàn)在這 # 個例子中。 # # 以分號";"或井號"#"開始的每一行都是注釋,在執(zhí)行時被忽略。在本例中 # 我們使用"#"作為注釋而使用";"作為可選配置的注釋。 # # 注意:無論何時修改了這個配置文件,您都要運行"testparm"命令來檢查您所 # 做的修改有沒有基本的語法錯誤。 # #=================== 全局變量設置Global Settings ==================== [global] # workgroup用來指定您的機器在網(wǎng)絡上所屬的NT域名或組名。格式是 # workgroup = NT-Domain-Name or Workgroup-Name。缺省的組名是 MYGROUP。 workgroup = MYGROUP # server string 用來設置NT描述域。缺省值是Samba Server 。 server string = Samba Server # 下面的選項對于安全很重要。它允許您設置哪些領域的機器可以訪問您的Samba # 服務器。下面的這個例子允許兩個C類子網(wǎng)和"lookup"的連接請求而禁止來 # 自其他網(wǎng)段機器的連接請求。有關的例子請參看smb.conf的用戶手冊。 ; hosts allow = 192.168.1. 192.168.2. 127. # 允許自動加載打印機列表,而不需要您單獨設置每一臺打印機。 load printers = yes # 您也許希望覆蓋原有的printcap 文件。 ; printcap name = /etc/printcap # 對于SystemV系統(tǒng),如果將printcap名設置為lpstat 將允許您從SystemV 的 # spool中自動獲得打印列表。 ; printcap name = lpstat # 除非您的打印機不是標準型號,否則您沒有必要在下面指定打印機系統(tǒng)的類型。 # 目前支持的打印機系統(tǒng)包括:bsd, sysv, plp, lprng, aix, hpux, qnx ; printing = bsd # 如果希望建立一個客戶賬號,去掉下面語句前面的分號";"。同時,您必須在 # /etc/passwd中加入這個賬號的定義,否則將使用用戶"nobody"作為客戶帳戶。 ; guest account = pcguest # 此選項將為每一個與服務器連接的機器定義一個單獨的日志文件。 log file = /usr/local/samba/var/log.%m # 此選項設置最大的日志文件的大?。ㄒ訩B為單位) max log size = 50 # 定義安全模式。大多數(shù)人都喜歡用戶級安全模式,詳細內容參看security_level.txt security = user # 只有當安全模式設置為服務器級(security = server)時,才定義下面選項。 ; password server = <NT-Server-Name> # 如果用戶想使用加密口令的話,請參閱ENCRYPTION.txt、Win95.txt和 WinNT.txt # 文件,請在閱讀以上文件后使用下面選項。 ; encrypt passwords = yes # 使用此選項允許您對每一個機器使用不同的配置。%m將被替換成與服務器 # 請求連接機器的NetBIOS名。 ; include = /usr/local/samba/lib/smb.conf.%m # 大多數(shù)人會發(fā)現(xiàn)此選項將顯著提高服務器的執(zhí)行效率,請參讀speed.txt和用戶 # 手冊以了解更多細節(jié)。 socket options = TCP_NODELAY # 配置Samba來使用多個網(wǎng)絡界面,如果您有多個網(wǎng)絡界面,那么必須按照下面 # 格式在這里列出。請參閱用戶手冊以獲得更多的細節(jié)。 ; interfaces = 192.168.12.2/24 192.168.13.2/24 # 瀏覽控制選項 #如果不想使您的Samba服務器成為局域網(wǎng)內部的主瀏覽服務器,將此選項設為no ; local master = no # OS Level決定了該服務器在局域網(wǎng)內的訪問優(yōu)先權。 ; os level = 33 # Domain Master將Samba服務器定義為主域瀏覽器。此選項將允許Samba在子 #網(wǎng)列表中比較瀏覽。如您已經(jīng)有一臺Windows NT域控制器,不要使用此選項 ; domain master = yes # Preferred Master使Samba在啟動時選擇一個本地瀏覽器并給它獲得選擇的較高 # 的機會 ; preferred master = yes #僅當您的網(wǎng)絡中有一臺在安裝時設置為主域控制器的NT服務器時使用此選項。 ; domain controller = <NT-Domain-Controller-SMBName> # 如果想使Samba成為Windows95工作站的登錄服務器,則使用此選項。 ; domain logons = yes # 如果允許域登錄服務,那么您也許希望每臺機器或每個用戶的登錄腳本運行一 # 個特定的每工作站的登錄批處理文件。, ; logon script = %m.bat # 運行一個特定的每用戶名登錄批處理文件。 ; logon script = %U.bat # 放置roving profiles 文件的位置(僅用于 Win95 和WinNT) ,%L代表該服務器 # NetBIOS名,%U是用戶名,您必須取消后面定義的[Profiles]前面的注釋號。 ; logon path = \\\\%L\\Profiles\\%U # Windows的Internet名服務支持記錄部分 # WINS Support告訴NMBD守護進程支持WINS服務器。 ; wins support = yes # WINS Serve選項告訴NMBD守護進程作為WINS的客戶機。 # 注意:Samba既可以作為WINS服務器也可以作為 WINS客戶機,但不能兼 # 而有之。 ; wins server = w.x.y.z # WINS Prox代表一個非WINS客戶通知Samba響應名字解析請求。要使此選項 # 正常工作必須保證網(wǎng)絡中至少有一臺WINS服務器。缺省值是NO。 ; wins proxy = yes # DNS Proxy選項決定Samba是否通過DNS 的nslookups 去解析主機的NetBIOS # 名。對于1.9.17 以前的版本內置值是yes ,對于1.9.18之后的版本內置值是no 。 dns proxy = no #================== 定義共享服務Share Definitions =================== # 所有使用者的home目錄 [homes] comment = Home Directories # 當一個客戶程序以客人用戶類出本服務器的共享服務時,不列出homes服務。 # 但是本機用戶創(chuàng)建的主目錄服務仍使用[global]節(jié)設定的browseable。 browseable = no writable = yes # 如果要創(chuàng)建一個netlogon目錄則取消下面的注釋。 ; [netlogon] ; comment = Network Logon Service ; path = /usr/local/samba/lib/netlogon ; guest ok = yes ; writable = no ; share modes = no # 如果要提供一個特定的共享roving profile則取消下面的注釋。 # 缺省值是使用用戶的home目錄。 ;[Profiles] ; path = /usr/local/samba/profiles ; browseable = no ; guest ok = yes # 注意:如果您有一個BSD 風格的打印系統(tǒng),您不需要單獨定義每臺打印機。 [printers] comment = All Printers path = /usr/spool/samba browseable = no # 設置public = yes 將允許以guest 賬號登錄的用戶使用打印機。 guest ok = no writable = no printable = yes # 此選項定義網(wǎng)絡用戶共享文件的臨時目錄。 ;[tmp] ; comment = Temporary file space ; path = /tmp ; read only = no ; public = yes # 一個用戶共享目錄,除了在"staff "組里的用戶有些寫的權限之外之外,對 # 其它用戶是只讀的。 ;[public] ; comment = Public Stuff ; path = /home/samba ; public = yes ; writable = yes ; printable = no ; write list = @staff # 其他例子: # # 下面定義了一臺只有fred可以使用的私人打印機。Spool數(shù)據(jù)放在fred的home # 目錄里。注意:fred必須對Spool目錄有寫的權限,不管這個目錄在什么位置。 ;[fredsprn] ; comment = Fred\‘s Printer ; valid users = fred ; path = /homes/fred ; printer = freds_printer ; public = no ; writable = no ; printable = yes # 下面定義一個只有用戶fred才能使用的私人目錄。fred 必須對這個目錄擁有 # 寫的權限。 ;[fredsdir] ; comment = Fred\‘s Service ; path = /usr/somewhere/private ; valid users = fred ; public = no ; writable = yes ; printable = no # 下面定義的是對每個域服務器連接的機器有不同的目錄的服務。這將允許您 # 對于不同的機器使用不同的配置,同樣也可以使用%U選項為每個用戶使用不 # 同的配置。%m在連接時將被替換為客戶機的主機名。 ;[pchome] ; comment = PC Directories ; path = /usr/pc/%m ; public = no ; writable = yes # 下面定義一個所有用戶都可以讀寫的共享目錄。注意用戶在這個目錄中創(chuàng)建的 # 文件都將歸默認用戶所有。所以任何可以訪問這個目錄的用戶都可以刪除別的 # 用戶在這個目錄里放置的文件。顯然,這個目錄對于默認用戶必須是可寫的。 # 當然,也可以指定某個用戶,這時,該目錄的所有文件將為此用戶所有。 ;[public] ; path = /usr/somewhere/else/public ; public = yes ; only guest = yes ; writable = yes ; printable = no # 下例說明了如何定義讓兩個用戶共享一個目錄,他們在這個目錄里放置的文件 # 歸他們各自所有。在此例中,這兩個用戶對該目錄都有寫的權限。當然文件的 # 保護應該設置恰當。很顯然,這個例子可以擴展到適合于多個用戶的情況。 ;[myshare] ; comment = Mary\‘s and Fred\‘s stuff ; path = /usr/somewhere/shared ; valid users = mary fred ; public = no ; writable = yes ; printable = no ; create mask = 0765 2 共享訪問限制 1).通過主機地址 使用以下參數(shù)來限制通過主機地址訪問: allow hosts hosts allow deny hosts hosts deny "allow hosts"、" hosts allow"這兩個功能相同的參數(shù)指定允許訪問一個服務的主機列表,主機列表用","號、空格或制表符隔開。如用于[global]段,則應用于所有服務,而忽略在每個服務中的各自的設置。 主機列表的組成可以是主機名、IP地址、子網(wǎng)地址或網(wǎng)絡號碼/掩碼。也可以使?quot;EXCEPT"關鍵字來限制子網(wǎng)中的個別主機的訪問。例如: hosts allow = 202.204. 3 EXCEPT 202.204.3.30 允許在202.204.3子網(wǎng)上的主機訪問,但禁止其中的202.204.3.30訪問。 "deny hosts"、" hosts deny"這兩個功能相同的參數(shù)指定禁止訪問某個服務的主機列表,與"allow hosts"相反。當與"allow hosts"列表沖突時,"allow hosts"列表優(yōu)先。 2).通過用戶口令 使用以下參數(shù)來限制通過用戶口令訪問: security 參數(shù)security可以確定對客戶用戶名/口令的驗證方式。缺省為"user",即對Samba服務器的任何訪問都要通過用戶名/口令的驗證。如果客戶登錄客戶機,如Windows 所用的用戶名與Samba服務器上的UNIX用戶名一致,則通過口令驗證后就可以訪問;如Windows 所用的口令也與UNIX一樣,那么不經(jīng)任何提示就可以訪問。 但如果客戶機上登錄的用戶名與Samba服務器上的UNIX用戶名不一致,則需要在一個映射文件中(如/etc/smbusers)寫入客戶機用戶名到UNIX用戶名的映射,同時使用"username map"參數(shù)指定映射文件,例如: username map = /ect/smbusers 在/etc/smbusers文件中的內容如下: cuckoo = "cuckoo doo" 這樣,在客戶機上以"cuckoo doo"注冊后,再與Samba服務器連接時,輸入UNIX客戶cuckoo的口令就可以進入,因為Samba已經(jīng)把"cuckoo doo"映射為cuckoo。 security參數(shù)的另一個值是"share",表示Samba服務器不需要客戶機使用用戶名/口令來登錄,而是根據(jù)每個共享的設置來決定是否需要用戶名/口令驗證。設置security為share一般用于客戶機上大多數(shù)用戶名與Samba服務器上UNIX用戶名不相同的情況,以及Samba服務器主要提供guest訪問。 在smb.conf文件中,如果沒有設置"encrypt passwords",Samba將使用UNIX的password數(shù)據(jù)庫來驗證用戶口令。這需要客戶機將口令以"普通文件"的方式傳遞過來。如果設置了"encrypt passwords",Samba則使用另一個加密口令文件,通過"smb passwd file"來設置,例如: encrypt passwords = yes smb passwd file = /etc/smbpasswd 3).通過用戶名 public guest ok 上面的兩個參數(shù)的功能相同,都可以使用相應的服務允許guest用戶,即不需要用戶名/口令驗證。如果還指定了"guest only",那么相應的服務器只允許由guest用戶來訪問。 invalid users valid users 這兩個參數(shù)分別設置不允許注冊某個服務和允許注冊某個服務的用戶列表。一個用戶同時出現(xiàn)在兩個列表中的時候,不允許注冊優(yōu)先。列表中的用戶名可以用空格隔開,以"@"開頭的名字被認為是NIS 組名或UNIX組名;以"+"開頭的名字被認為是UNIX組名;以"&"開頭的名字只被認為是NIS組名。 only user 此參數(shù)控制是否只允許在"user ="列表中指定的用戶訪問某個服務。如果設置為true,則只有在"user ="列表中的用戶才能訪問。 4).通過是否可以讀寫來控制 read only 此參數(shù)設置為"yes",則使用服務的用戶不能在該服務的目錄中創(chuàng)建或修改文件。 writable writeable write ok 這三個參數(shù)功能相同。如果它們被設置為"no",則使用服務的用戶不能在該服務的目錄中創(chuàng)建或修改文件。 read list write list 這兩個參數(shù)分別指定只允許對一個服務進行只讀訪問或同時有"寫"權限的主機列表,這里,如果一個主機同時在兩個列表里,則"寫"優(yōu)先。 5).通過是否在瀏覽器列表中顯示來控制 browsable browseable 這兩個功能相同的參數(shù)控制該段是否在瀏覽列表中列出。瀏覽列表列出的是可獲得的共享列表。一般[home]段禁止瀏覽,以提高安全性。 3、Windows 9x做為SMB客戶的設置 1).配置microsoft網(wǎng)絡客戶 在客戶機(WIN9X)上,在控制面板里添加microsoft網(wǎng)絡客戶。選中microsoft網(wǎng)絡客戶--標識--計算機名--my_computer_name--my_group,其中,my_computer_name將作為表示客戶機的NetBIOS名, my_group為組名 2).編輯注冊表記錄 如果在SMB服務器上的smb.conf 文件中沒有用到"encrypt passwords",即使用"普通文本"格式的口令,則必須要編輯注冊表,來允許使用"普通文本"格式的口令。 在Windows的注冊表的以下條目中: /HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP 新建DWORD值,將新建的值命名為EnablePlainTextPassword;雙擊EnablePlainTextPassword,將鍵值設為1。 3).重新啟動 重新啟動計算機,以用戶名/口令登陸。該用戶名/口令將用于與SMB服務器連接時進行用戶身份認證,所以如果要訪問SMB服務器上用戶自己的home目錄,建議使用與SMB服務器上相同的用戶名/口令。 4).訪問Samba服務器 通過網(wǎng)絡鄰居瀏覽訪問Samba服務器,可以在列表里選擇,也可以在命令窗口里使用命令: \\\\sambaserver 4 、Samba服務器提供的其他命令 smbstatus smbstatus指令用于顯示當前的SMB服務器的連接狀態(tài)。例如,在IP地址為202.204.3.16的"cuckoo"客戶機上,用戶john訪問SMB服務器的"public"服務時,命令輸出如下: /usr/bin/smbstatus Samba version 2.0.3 Service uid gid pid machine ---------------------------------------------- public john john 10009 cuckoo (202.204.3.16) Fri Jul 21 20:3 No locked files Share mode memory usage (bytes): 1048464(99%) free + 56(0%) used + 56(0%) overhead = 1048576(100%) total 此命令可以附加一些開關來顯示不同的內容,下表列出了主要的開關及其含義: 表1-2 smbstatus命令主要選項表 nmblookup nmblookup命令用于把一個NetBIOS名字映射到IP地址。對于上面的例子,可以使用下面的命令查找主機cuckoo: /usr/bin/nmblookup sale 可以使用合適的選項來允許nmblookup查詢一個IP廣播域或是一個單獨的機器,該命令常用的選項參看表1-3。 表1-3 nmblookup 命令主要選項列表 smbclient smbclient是訪問SMB服務器資源的客戶程序。該程序提供的接口與ftp程序類似,訪問操作包括從SMB服務器下載文件到本地,或從本地上載文件到SMB服務器,還可以在SMB服務器上檢索目錄信息等。 命令語法如下: /usr/bin/smbclient //smbserver/service [passwd][-U username] 其中,smbserver是SMB服務器的NetBIOS名,一般與服務器的主機名一樣,但不是必須的。"service"為服務器提供的服務,如文件服務public或打印服務printer。 passwd是訪問某些服務時需要的口令。如果在命令行輸入,后面則不會再提示輸入口令。否則,將在后面提示輸入口令。雖然有些要訪問的服務器不需要口令,但仍然會有輸入口令的提示。如果不希望有口令提示,則可以在命令行使用"-N"選項。 如果要使用其他的端口與SMB服務器進行TCP連接,可以使用"-p"選項來指定,缺省值為139。 "-U"可以指定與SMB服務器連接時使用的用戶名。如果沒有指定,smbclient使用環(huán)境變量USER指定的值作用戶名。如果沒有USER環(huán)境變量,則用"guest"。 在環(huán)境變量USER中,可以設置"USER=username%password",這樣就不用在命令行上輸入口令。同時,使用ps命令看不到命令行參數(shù),具有一定的安全性。同樣,也可以使用"-U username%password"的形式指定用戶名和口令。?quot;-U"指定的口令"%password"要優(yōu)先于在命令行[password]中指定的口令。 "-L"選項可以列出在一個服務器上提供的服務,例如: /usr/bin/smbclient -L smbserver 使用下面的命令可以進入與ftp類似的提示狀態(tài): /usr/bin/smbclient //smbserver/service 執(zhí)行結果: smb:\\> 其中"\\"表示服務器當前的工作目錄。在該提示符下可以使用的命令可以通過"?"、"help"命令列出。命令不分大小寫。 在該提示符下除了可以使用很多與ftp類似的命令外,還有命令recurse,它可以被設置為on,以便在使用mget或mput命令時能夠get或put匹配的子目錄。recurse缺省為off,即只get或put當前目錄中的文件。 在該提示符下還可以使用下面的命令: smb:\\>tar c localfile filename 將服務器上文件名為"filename"的文件和目錄(可以使用通配符)經(jīng)過tar 拷貝到本地的"localfile "文件中?;蛘撸? smb:\\>tar x localfile filename 可以把本地tar 文件localfile 中的文件filename拷貝到服務器上;如果filename省略,則拷貝所有的文件。 上面的命令也可以在smbclient命令行上來執(zhí)行,如: /usr/bin/smbclient //smbserver/service [passwd] -T c local file filename /usr/bin/smbclient //smbserver/service [passwd] -T x local file filename smbprint smbprint是在Linux系統(tǒng)下將打印文件提交給遠地SMB服務器打印的腳本程序。程序中調用的命令就是smbclient。下面舉例說明此命令的使用方法。 例如,遠端SMB服務器NetBios名為prtserver(Windows 9X),提供打印服務。服務名為netpcl(NEC激光打印機),不需要口令。 在Linux系統(tǒng)中配置如下: 1. 編輯/etc/printcap文件,加入下面一行 smb:lo=/dev/null:sd=/usr/spool/smb:sh:if=/usr/bin/smbprint:af=/var/spool/lpd/smb/acct 2.建立目錄/usr/spool/smb、/var/spool/lpd/smb 3.用下面命令建立記帳文件 touch /var/spool/lpd/smb/acct 4.建立/var/spool/lpd/smb/.config文件,包含下面內容: server = prtserver service = necpcl password = "" 5.編輯/usr/bin/smbprint文件,在smbclient命令參數(shù)中使"echo translate"有效,這樣可以使UNIX文件到Windows 9x系統(tǒng)打印時,進行<LF>與<CR/LF>的轉換。 6.啟動lpd: /etc/rc.d/init.d/lpd start 7.使用lpr命令打印/etc/hosts文件 /lpr -P smb/etc/hosts lpr缺省使用的打印機名為lp,這里使用的是smb。 5、使用Samba加密口令 客戶機訪問Samba服務器時進行的用戶身份認證包括使用"普通文本"格式的口令,通過網(wǎng)絡傳送給SMB服務器,與UNIX的帳戶數(shù)據(jù)庫(如/etc/passwd)進行核查;或者使用加密口令,通過"SMB challenge/response"驗證進行核查。本文著重介紹加密口令的用法。 在Samba服務器中使用了與Windows NT兼容的口令加密算法,因此可以像Windows NT一樣對Samba的客戶進行用戶口令核實。 Windows NT使用一個包含用戶口令hashed值的文件,是通過對用戶的"普通文本"的口令經(jīng)過加密算法得到的,稱為"hashed口令"。不能從該hashed值返回得到原始的"普通文本"的口令。在Samba服務器上可以形成同樣的hashed口令,保存在smbpasswd文件中。 當一個Samba客戶(如Windows 9x 或NT)使用Samba資源時,它先請求一個連接,并商討連接使用的協(xié)議。Samba回答客戶請求時產(chǎn)生一個隨機值,發(fā)送給客戶,并且還儲存在Samba服務器上,稱為"challenge"。"challenge"對于每一個客戶連接是不一樣的。 客戶然后使用hashed口令與"challenge"進行加密運算,產(chǎn)生24個字節(jié)的"response",發(fā)送給Samba服務器。 Samba服務器使用自己保存的hashed值的用戶口令(保存在smbpasswd文件中)與先前產(chǎn)生的"challenge"進行同樣的加密運算,將產(chǎn)生的結果與客戶發(fā)送過來的結果進行比較,如果結果相同,則客戶被允許訪問;否則,禁止用戶訪問。 對于Samba服務器來說,它不存儲"普通文本"格式的口令,儲存的是從"普通文本"口令轉換的hashed口令。并且在網(wǎng)絡連接時,"普通文本"和"hashed口令"都不被傳送,所以比UNIX安全。因為當客戶程序與UNIX服務器連接時(如telnet),口令往往是以"普通文本"在網(wǎng)絡上傳送的,可以被網(wǎng)絡竊聽軟件(如tcpdump)截獲。Samba加密口令文件smbpasswd會被利用成為潛在的漏洞。所以該文件是要由root所有,讀寫權限應該為600。 Windows 9x 或NT缺省的用戶認證方式是使用加密的口令,這?quot;普通文本"不在網(wǎng)絡上傳送。相應的,Samba也要使用加密口令的認證方式。但如果想使用"普通文本"格式的口令,可以編輯Windows NT的注冊表來允許。這樣,Samba服務器就可以使用/etc/psswd文件來驗證用戶口令,而不需要smbpasswd文件。 要想讓Samba使用與Windows NT兼容的口令加密算法,則必須在Samba服務器上保存包含與用戶名對應的hashed值的口令文件??梢允褂?usr/bin/mksmbpasswd.sh程序產(chǎn)生加密口令文件的框架,文件名由"smb passwd file"參數(shù)設置,這里是/etc/smbpasswd,命令行格式為: cat /etc/passwd |mksmbpasswd.sh >/etc/smbpasswd 然后root可以使用smbpasswd命令可以設置用戶口令,例如設置客戶cuckoo的smb口令為smbpassword: /usr/bin/smbpsswd cuckoo smbpassword root還可以使用smbpsswd 進行添加用戶、取消口令等操作。但添加的用戶必須在/etc/psswd文件中存在。普通用戶使用smbpsswd 命令只能像使用passwd程序一樣更改自己的smb口令。 三、Samba常見故障排除 Samba的故障排除可以在SMB服務器和SMB客戶機上通過各自的命令來完成。 1 SMB服務器上的操作 1).使用下面的命令來查看是否有錯誤的配置。 /usr/bin/testparm /etc/smb.conf 2). 在服務器上以及客戶機上用ping命令檢查tcp/ip是否正常工作。 3). 在SMB服務器上用 /usr/bin/smbclient -L SMBserver 命令將得到一個共享的列表。 如果出現(xiàn)失敗信息,則要檢查與服務器相關的"hosts allow"、"hosts deny"、"valid users"、"invlid users"等參數(shù)的設置。如果出現(xiàn)"connection refused",則檢查Samba服務器進程是否啟動;若Samba以守護進程形式運行的話用"netstat -a"命令檢查端口是否處于監(jiān)聽狀態(tài)。 4). 運行了命令"/usr/bin/nmblookup SMBserver",將返回SMB服務器的IP地址。否則nmbd沒有正確的運行。 5). 運行"/usr/bin/nmblookup -d 2 \‘*\‘ "命令,在子網(wǎng)中運行NetBIOS/TCPIP的主機將會響應。否則說明nmblookup 不能正確的得到廣播地址,可以嘗試在smb.conf文件中用interfaces參數(shù)人工設置IP地址、廣播地址和子網(wǎng)掩碼。 6). 運行"/usr/bin/smbclient \‘\\\\SMBserver\\homes"命令,需要輸入客戶在SMB服務器上的用戶口令,然后會出現(xiàn)類似"smb>"的提示符。這時可以使用dir命令瀏覽客戶在SMB服務器帳戶目錄下的文件,用help命令可以得到其他命令的幫助。如果不能出現(xiàn)類似"smb>"的提示符,并且有"invalid network name"的錯誤信息,則有可能homes共享沒有正確的設置;或者有"Bad password",則要檢查"shadow password"、"password encryption"以及參數(shù)"valid users"和"path"的設置。 2、SMB客戶機上的操作 1). 運行"net view \\\\SMBserver"命令,應該能夠列出SMB服務器上的共享。 如果出現(xiàn)類似"network name not found"的錯誤,則要檢查客戶機上DNS或WINS的設置。如果出現(xiàn)"Invalid network name"或"bad password error"的錯誤,則參照與上面"smbclient -L"命令中同樣的錯誤結果的解決方法。要注意客戶機將要用客戶注冊客戶機時所用的用戶名/口令去與SMB服務器連接,所以在SMB服務器上,用戶最好有同樣的用戶名/口令。 2). 使用"net use x;\\\\SMBserver\\homes"命令,可以把SMB服務器上客戶home目錄映射到客戶機"x:"盤,"x:"應該是一個客戶機上未用的盤號。這樣,共享的目錄可以在客戶機上以"x:"盤來看待。正常的信息為"command complete successfully"。 如果要停止使用"x:"盤,可以使用"net use x:/delete"命令。如果不能正常的把客戶的home目錄映射到"x:"盤,則要檢查SMB服務器上"hosts allow"等參數(shù)的配置。如果客戶機上的用戶名不能與服務器上的用戶名匹配,嘗試使用"username map"選項。 3). 如果在SMB服務器上沒有使用"encrypted passwords",則在客戶機上要在注冊表中允許使?quot;普通文本"格式的口令。 小結 Samba是SMB的一種實現(xiàn)方法,主要用來實現(xiàn)Linux系統(tǒng)的文件和打印服務。Linux用戶通過配置使用Samba服務器可以實現(xiàn)與Windows用戶的資源共享。 守護進程smbd和nmbd是Samba的核心,在全部時間內運行。nmbd 程序使得通過企圖計算機可以瀏覽Linux服務器。Smbd守護進程在SMB軟件包到達網(wǎng)上時對它們進行處理,并且為使用或共享它的資源與Linux進行協(xié)調。 在安裝完Samba后,還需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。smb.conf文件的的語法結構與Windows的*.ini文件十分類似;文件結構主要包括三部分:全局參數(shù)部分、目錄共享部分、打印共享部分;本文著重介紹了如何配置各選項以完成特定的功能。 通過使用不同的參數(shù),可以實現(xiàn)對Samba的不同訪問控制:通過主機地址限制訪問、通過用戶口令限制訪問、通過用戶名限制訪問、通過驗證讀寫權限限制訪問、通過是否在瀏覽器列表里顯示來控制等。所有這些方法,大大的增強了Samba服務器的安全性。 |
|