samba是與其他非unix作業系統共享資源最直接的方式,配置他的方式也非常簡單。本文主要目的是為了建置小型工作站的檔案共享環境所寫的筆記,內容包含如何安裝、配置及管理samba伺服器,掛載linux或windows所分享的filesystem。
需求:
每個使用者可以存取自己的家目錄,其他使用者連瀏覽的權限也沒有。一個可以匿名讀寫的目錄。
一個唯讀的目錄。
一、安裝所需的套件:
aptitude install samba swat smbfs smbclient xinetd -y其中xinetd是為了使用swat而安裝的,如果你沒有圖形化配置samba的需求,可以省去swat跟xinetd這兩個套件。安裝完成會有以下訊息:
--------- IMPORTANT INFORMATION FOR XINETD USERS ---------- The following line will be added to your /etc/inetd.conf file: swat\t\tstream\ttcp\tnowait.400\troot\t/usr/sbin/tcpd\t/usr/sbin/swat If you are indeed using xinetd, you will have to convert the above into /etc/xinetd.conf format, and add it manually. See /usr/share/doc/xinetd/README.Debian for more information. Suggested entry (automatically converted using itox): service swatttstreamttcptnowait.400troott { type = RPC rpc_version = usr/sbin/tcpdt/usr/sbin/swat Line 1: socket type missing -----------------------------------------------------------我們先記錄下來,等一下再來處理他。
規劃上:
/home/username 每個使用者需透過認證存取家目錄。 /opt/share_only 匿名使用者也可以瀏覽,屬性唯讀。 /opt/upload_free 匿名使用者可以有讀取權限。
二、samba配置:
samba主要設定檔是在/etc/samba/smb.conf。大致上可以看到兩個主要的區塊: [global]區塊 跟整個samba設定環境有關。 [global]以外區塊 跟個別資料夾分享的詳細設定有關。
重要的[global]如下:
workgroup = windowsrshit #宣告這台samba的工作群組 server string = Debian server #別人從網芳看到的註解名稱,可寫可不寫。 security = user #security參數非常重要,如果設定成share,則是最寬鬆的設定權限,可以允許匿名使用者進入;如果是要供本機使用者密碼認證登入,請改成user。 netbios name = homedebian #Windows上的主機名稱其實就是netbios name,因此這個名稱可以供windows使用者搜尋到你的機器;不寫也沒關係,你的主機名稱就是你的netbios name。 unix charset = utf-8 #unix類的主機以utf-8編碼來顯示samba分享內容。 dos charset=cp950 #windows的機器可以以big5來顯示內容。 hosts allow = 192.168.1.0/255.255.255.0 我設定samba只允許內部網路分享。假設每台linux工作站都要有一個public ip,那麼可以每張網路卡都各捆綁一個private ip來達成此目的。 lanman auth = yes client lanman auth = yes #server端跟client端都使用lanman認證。重要的資料分享區塊如下:
[homes] comment = Home Directories #只是註解 browseable = no #此參數是讓非%S(登入的使用者)在網路上看不到這個資料夾 read only = no #當然要可以寫入啦 create mask = 0600 directory mask = 0700 #使用者新增檔案,其權限為600;新增目錄其權限為700;無suid/sgid/stick bit設定。 inherit acls = yes #ACL規則會繼承。如果有設定extend acl的話才有影響,其規則會凌駕上面的mask設定;若沒有acl規則則可以不理會他。 valid users = %S #允許登入的名單。%S表示目前正在登入的使用者以上,是完成了在linux主機上所有使用者存取家目錄的設定。我們來建立兩個共享資料夾,一個可以允取匿名存取,一個只允許唯讀。
[share_only] comment = a share only folder for our lab public = yes path = /export/share_only browseable = yes #其中的public = yes可以寫成guest ok = yes [upload_free] comment = an upload permitted folder for our lab public = yes path = /export/upload_free browseable = yes writable = yes write list = @research, @student #只允許research跟student群組的寫入,其他人仍保持唯讀。儲存後,請記得samba的權限還是脫離不了filesystem的權限,允許上傳的目錄需要開放其他使用者也能讀寫:
chmod 777 /export/upload_free建立samba使用者: samba預設的使用者跟系統的使用者是分開的,然而新增samba的使用者必須依賴於/etc/passws裡面有的使用者名稱才行。
smbpasswd -a maxsolar-a表示新增使用者。往後若欲修改密碼,只要使用smbpasswd maxsolar就可以了。這裡需注意samba密碼跟系統密碼由於安全性因素,並不同步,請注意。如果你有密碼同步的需求,請參考Debian下實現samba密碼與系統密碼同步。 請務必利用testparm來檢查我們寫在/etc/samba/smb.conf的語法是否有錯,並且確定samba服務是不是同時有跑起來:
invoke-rc.d samba restart你現在可以從windows上存取linux的samba服務。
三、從linux存取samba服務:
圖形介面上,應該已經可以存取windows或是linux所分享的資料了。那麼文字介面如何存取呢?
A.查詢分享中的資料夾:
有時候我們真的很懶,把主機名稱跟ip對應表寫好後,就完全把ip給忘記了;我們又很懶不願意去查ip,該怎麼辦呢?我們可以使用nmblookup:
nmblookup HOSTNAME你就可以輕易的取得一個ip位置。接下來要查看他分享了哪些資料夾出來,你應該這麼作:
smbclient -L IP_address會被提示要求輸入你目前使用者的密碼,或是你可以用-U來指定一個使用者
smbclient -U mary -L IP_address顯示的結果會根據你所輸入的帳號密碼而有不同的結果。
Anonymous login successful Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.2.5] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers share_only Disk a share only folder for our lab upload_free Disk an upload permitted folder for our lab IPC$ IPC IPC Service (homedebian server) Anonymous login successful Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.2.5] Server Comment --------- ------- HOMEDEBIAN homedebian server Workgroup Master --------- ------- WORKGROUP MOTD945以此為例,我並沒有輸入我maxsolar的密碼,此時我被當成是guest,因此我也看不見自己所分享出來的[homes]家目錄。但是guest身份可以看到兩個分享的資料夾。你也可以發現此時的MOTD945是wins server。
B.取得一個shell:
smbclient //HOSTNAME/share_only#以目前身份取得smb的shell
smbclient //IP_address/upload_free -U username在此shell下的命令跟ftp差不多,可以利用"?"或是help來查詢。
C.掛載網芳或是samba filesystem:
1.手動掛載:
mount -t cifs //HOSTNAME/分享位置 /掛載位置#這是最基本的語法
mount.cifs -o username=maxsolar,password=mypasswd //HOSTNAME/分享位置 /掛載位置#這是包含帳號密碼的寫法。這樣明目張膽的把密碼寫在上面實在是很不妥@@,建議寫在fstab裡。
2.開機自動掛載: 在/etc/fatab裡,你可以這樣寫:
//HOSTNAME/分享位置 /掛載位置 cifs defaults 0 0要搭配帳號密碼的使用,你可以這樣寫:
//HOSTNAME/分享位置 /掛載位置 cifs credential=/密碼設定檔絕對路徑,uid=maxsolar 0 0密碼檔規格如下:
username=使用者帳號 password=登入密碼 workgroup=所屬群組掛載後,client端的maxsolar有讀寫權限。
四、以SWAT管理samba daemon:
安裝好swat預設還是不能用,實在不是很便民。我們知道swat服務需要依靠xinetd來啟動,筆者查詢了ubuntu論壇的討論串,把解決的過程分享給大家! swat會在舊版的inetd上面跑,但是現在實在沒人在使用他了!我們應該要把他改寫成xinetd的格式(如同本文最上面的警告訊息): 新增/etc/xinetd.d/swat:# description: Samba_SWAT service swat { disable = no socket_type = stream protocol = tcp #should use a more limited user here user = root wait = no server = /usr/sbin/swat }當然你需要重新啟動xinetd!
invoke-rc.d xinetd restart你現在可以在瀏覽器上輸入:http://localhost:901 會被提示輸入root的帳號密碼,登入後進去就可以看到非常多可以用的選項了。
後記: swat是英文版的,很多人會望之卻步;他的可用設定多如牛毛,但是我還是建議安裝他。因為他每個設定值都有一個help的連結,他會很詳細的告訴你該參數設定的意義跟效果,我認為學習的效果很好,因此建議大家可以安裝來玩。
沒有留言:
張貼留言