最近公司一台共用伺服器出現了故障,之前使用的是windows server 2003做的共用伺服器;於是就想重新搭建一台共用伺服器使用CentOS 6.5+Samba。
一、安裝Samba
1、使用yum來安裝,有依賴關係的包samba-common、samba-winbind-clients、libsmbclient將自動安裝上去。
1
# yum install samba samba-client -y
2、Samba命令
可以通過/etc/init.d/smb start/stop/restart/status來啟動、關閉、重啟、查看狀態Samba服務
3、設定開機啟動
1
# chkconfig --level 35 smb on
二、配置Samba
Samba主要設定檔為/etc/samba/smb.conf。
設定檔主要由兩部分組成
Global Settings(全域設定)
該設定都是與Samba服務整體運行環境有關的選項,它的設定項目是針對所有共用資源的。
Share Definitions(共用參數)
該設定針對的是共用目錄個別的設定,只對當前的共用資源起作用。
全域設定:
----------------------------------------[global]------------------------------------
config file = /usr/local/samba/lib/smb.conf.%m
config file可以讓你使用另一個設定檔來覆蓋預設的設定檔。如果檔案不存在,則該項無效。這個參數很有用,可以使得samba配置更靈活,可以讓一台 samba伺服器類比多台不同配置的伺服器。比如,你想讓PC1(主機名稱)這台電腦在訪問Samba Server時使用它自己的設定檔,那麼先在/etc/samba/host/下為PC1配置一個名為smb.conf.pc1的檔案,然後在 smb.conf中加入:config file = /etc/samba/host/smb.conf.%m。這樣當PC1請求串連Samba Server時,smb.conf.%m就被替換成smb.conf.pc1。這樣,對於PC1來說,它所使用的Samba服務就是由 smb.conf.pc1定義的,而其他機器訪問Samba Server則還是應用smb.conf。
workgroup = WORKGROUP
設定 Samba Server 所要加入的工作群組或者域。
server string = Samba Server Version %v
設定 Samba Server 的注釋,可以是任何字串,也可以不填。宏%v表示顯示Samba的版本號碼。
netbios name = smbserver
設定Samba Server的NetBIOS名稱。如果不填,則預設會使用該伺服器的DNS名稱的第一部分。netbios name和workgroup名字不要設定成一樣了。
interfaces = lo eth0 192.168.0.1/24 192.168.1.1/24
設定Samba Server監聽哪些網卡,可以寫網卡名,也可以寫該網卡的IP地址。
hosts allow = 192.168.0.1 192.168.1.1
表示允許串連到Samba Server的用戶端,多個參數以空格隔開。可以用一個IP表示,也可以用一個網段表示。hosts deny 與hosts allow 剛好相反。
例如:hosts allow=192.168.0.EXCEPT192.168.0.10
表示容許來自192.168.0.*的主機串連,但排除192.168.0.10
hosts allow=192.168.0.0/255.255.255.0
表示容許來自192.168.0.0/255.255.255.0子網中的所有主機串連
hosts allow=M1,M2
表示容許來自M1和M2兩台電腦串連
hosts allow=@test
表示容許來自test網域的所有電腦串連
max connections = 0
max connections用來指定串連Samba Server的最大串連數目。如果超出串連數目,則新的串連請求將被拒絕。0表示不限制。
deadtime = 0
deadtime用來設定斷掉一個沒有開啟任何檔案的串連的時間。單位是分鐘,0代表Samba Server不自動切斷任何串連。
time server = yes/no
time server用來設定讓nmdb成為windows用戶端的時間伺服器。
log file = /var/log/samba/log.%m
設定Samba Server記錄檔的儲存位置以及記錄檔名稱。在檔案名稱後加個宏%m(主機名稱),表示對每台訪問Samba Server的機器都單獨記錄一個記錄檔。如果pc1、pc2訪問過Samba Server,就會在/var/log/samba目錄下留下log.pc1和log.pc2兩個記錄檔。
max log size = 50
設定Samba Server記錄檔的最大容量,單位為kB,0代表不限制。
security = user
設定使用者訪問Samba Server的驗證方式,一共有四種驗證方式。
1. share:使用者訪問Samba Server不需要提供使用者名稱和口令, 安全效能較低。
2. user:Samba Server共用目錄只能被授權的使用者訪問,由Samba Server負責檢查帳號和密碼的正確性。帳號和密碼要在本Samba Server中建立。
3. server:依靠其他Windows NT/2000或Samba Server來驗證使用者的帳號和密碼,是一種代理驗證。此種安全模式下,系統管理員可以把所有的Windows使用者和口令集中到一個NT系統上,使用 Windows NT進行Samba認證, 遠程伺服器可以自動認證全部使用者和口令,如果認證失敗,Samba將使用使用者層次安全性模式作為替代的方式。
4. domain:域安全層級,使用主網域控制站(PDC)來完成認證。
passdb backend = tdbsam
passdb backend就是使用者背景意思。目前有三種後台:smbpasswd、tdbsam和ldapsam。
1.smbpasswd:該方式是使用smb自己的工具smbpasswd來給系統使用者(真實使用者或者虛擬使用者)設定一個Samba密碼,用戶端就用這個密碼來訪問Samba的資源。smbpasswd檔案預設在/etc/samba目錄下,不過有時候要手工建立該檔案。
2.tdbsam: 該方式則是使用一個資料庫檔案來建立使用者資料庫。資料庫檔案叫passdb.tdb,預設在/etc/samba目錄下。passdb.tdb使用者資料庫 可以使用smbpasswd –a來建立Samba使用者,不過要建立的Samba使用者必須先是系統使用者。我們也可以使用pdbedit命令來建立Samba賬戶。pdbedit命令的 參數很多,我們列出幾個主要的。
pdbedit –a username:建立Samba賬戶。
pdbedit –x username:刪除Samba賬戶。
pdbedit –L:列出Samba使用者列表,讀取passdb.tdb資料庫檔案。
pdbedit –Lv:列出Samba使用者列表的詳細資料。
pdbedit –c “[D]” –u username:暫停該Samba使用者的帳號。
pdbedit –c “[]” –u username:恢複該Samba使用者的帳號。
3.ldapsam:該方式則是基於LDAP的賬戶管理方式來驗證使用者。首先要建立LDAP服務,然後設定“passdb backend = ldapsam:ldap://LDAP Server”
encrypt passwords = yes/no
是否將認證密碼加密。因為現在windows作業系統都是使用加密密碼,所以一般要開啟此項。不過設定檔預設已開啟。
smb passwd file = /etc/samba/smbpasswd
用來定義samba使用者的密碼檔案。smbpasswd檔案如果沒有那就要手工建立。
username map = /etc/samba/smbusers
用來定義使用者名稱對應,比如可以將root換成administrator、admin等。不過要事先在smbusers檔案中定義好。比如:root = administrator admin,這樣就可以用administrator或admin這兩個使用者來代替root登陸Samba Server,更貼近windows使用者的習慣。
guest account = nobody
用來設定guest使用者名稱。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
用來設定伺服器和用戶端之間會話的Socket選項,可以最佳化傳輸速度。
domain master = yes/no
設定Samba伺服器是否要成為網域主瀏覽器,網域主瀏覽器可以管理跨子網域的瀏覽服務。
local master = yes/no
local master用來指定Samba Server是否試圖成為本地網域主瀏覽器。如果設為no,則永遠不會成為本地網域主瀏覽器。但是即使設定為yes,也不等於該Samba Server就能成為主瀏覽器,還需要參加選舉。
preferred master = yes/no
設定Samba Server一開機就強迫進行主瀏覽器選舉,可以提高Samba Server成為本地網域主瀏覽器的機會。如果該參數指定為yes時,最好把domain master也指定為yes。使用該參數時要注意:如果在本Samba Server所在的子網有其他的機器(不論是windows NT還是其他Samba Server)也指定為首要主瀏覽器時,那麼這些機器將會因為爭奪主瀏覽器而在網路上大發廣播,影響網路效能。
如果同一個地區內有多台Samba Server,將上面三個參數設定在一台即可。
os level = 200
設定samba伺服器的os level。該參數決定Samba Server是否有機會成為本地網域的主瀏覽器。os level從0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果設定為0,則意味著Samba Server將失去瀏覽選擇。如果想讓Samba Server成為PDC,那麼將它的os level值設大些。
domain logons = yes/no
設定Samba Server是否要做為本地區控制器。主網域控制站和備份網域控制站都需要開啟此項。
logon script = %u.bat
當使用者用windows用戶端登陸,那麼Samba將提供一個登陸檔。如果設定成%u.bat,那麼就要為每個使用者提供一個登陸檔。如果人比較多, 那就比較麻煩。可以設定成一個具體的檔案名稱,比如start.bat,那麼使用者登陸後都會去執行start.bat,而不用為每個使用者設定一個登陸檔了。 這個檔案要放置在[netlogon]的path設定的目錄路徑下。
wins support = yes/no
設定samba伺服器是否提供wins服務。
wins server = wins伺服器IP地址
設定Samba Server是否使用別的wins伺服器提供wins服務。
wins proxy = yes/no
設定Samba Server是否開啟wins代理服務。
dns proxy = yes/no
設定Samba Server是否開啟dns代理服務。
load printers = yes/no
設定是否在啟動Samba時就共用印表機。
printcap name = cups
設定共用印表機的設定檔。
printing = cups
設定Samba共用印表機的類型。現在支援的列印系統有:bsd, sysv, plp, lprng, aix, hpux, qnx
共用參數:
-------------------------------------Share Definitions--------------------------------
[共用名稱]
comment = 任一字元串
comment是對該共用的描述,可以是任一字元串。
path = 共用目錄路徑
path用來指定共用目錄的路徑。可以用%u、%m這樣的宏來代替路徑裡的unix使用者和客戶機的Netbios名,用宏表示主要用於[homes] 共用域。例如:如果我們不打算用home段做為客戶的共用,而是在/home/share/下為每個Linux使用者以他的使用者名稱建個目錄,作為他的共用目 錄,這樣path就可以寫成:path = /home/share/%u; 。使用者在串連到這共用時具體的路徑會被他的使用者名稱代替,要注意這個使用者名稱路徑一定要存在,否則,客戶機在訪問時會找不到網路路徑。同樣,如果我們不是以用 戶來劃分目錄,而是以客戶機來劃分目錄,為網路上每台可以訪問samba的機器都各自建個以它的netbios名的路徑,作為不同機器的共用資源,就可以 這樣寫:path = /home/share/%m 。
browseable = yes/no
browseable用來指定該共用是否可以瀏覽。
writable = yes/no
writable用來指定該共用路徑是否可寫。
available = yes/no
available用來指定該共用資源是否可用。
admin users = 該共用的管理者
admin users用來指定該共用的管理員(對該共用具有完全控制許可權)。在samba 3.0中,如果使用者驗證方式設定成“security=share”時,此項無效。
例如:admin users =david,sandy(多個使用者中間用逗號隔開)。
valid users = 允許訪問該共用的使用者
valid users用來指定允許訪問該共用資源的使用者。
例如:valid users = david,@dave,@tech(多個使用者或者組中間用逗號隔開,如果要加入一個組就用“@組名”表示。)
invalid users = 禁止訪問該共用的使用者
invalid users用來指定不允許訪問該共用資源的使用者。
例如:invalid users = root,@bob(多個使用者或者組中間用逗號隔開。)
write list = 允許寫入該共用的使用者
write list用來指定可以在該共用下寫入檔案的使用者。
例如:write list = david,@dave
public = yes/no
public用來指定該共用是否允許guest賬戶訪問。
guest ok = yes/no
意義同“public”。
Samba配置好後可以使用testparm命令測試smb.conf配置是否正確。使用testparm -v命令可以詳細列出smb.conf支援的配置參數。
三、linux用戶端訪問
1、查看Samba伺服器的共用資料
# smbclient –L //Samba伺服器的ip地址 -U Samba使用者名稱
"-L" 即為list的含義,“-U”是user的意思,如果Samba伺服器是無密碼訪問的話,可以省略“-U Samba使用者名稱”。
2、登入Samba伺服器
# smbclient //Samba伺服器的ip地址 -U Samba使用者名稱
登入後可以輸入?查看所有可用命令
3、掛載目錄
Samba伺服器共用出來的檔案還可以在Linux用戶端進行掛載
mount -t cifs -l //Samba伺服器IP/public /mnt/samba/
Tips:
在windows下通過“\\ip地址”的方式訪問其它檔案資源時,一般第一次需要輸入密碼,以後就無需輸入密碼直接登陸了,那麼如果我們要切換到其它Samba使用者怎麼辦呢?可以在windows下執行如下指令實現:
在cmd命令列下輸入:“net use”命令查看現有的串連,
然後執行“net use \\Samba伺服器IP地址或者netbios名稱\ipc$ /del”,刪除Samba伺服器已經建立的串連。或者執行“net use * /del”將現在所有的串連全部刪除。
最後,再次執行“\\ip地址”時,就可以切換使用者了。
案例一:
公司現有一個工作群組workgroup,需要添加samba伺服器作為檔案伺服器,並發布共用目錄/share,共用名稱為share,此共用目錄允許所有員工訪問。
1、修改設定檔
#----------------------------- Global Settings--------------------------------
[global] //該設定與Samba服務整體運行環境有關,它的設定項目針對所有共用資源
# ----------------------- Network Related Options -------------------------
workgroup = WORKGROUP //定義工作群組,也就是windows中的工作群組概念
server string = David Samba Server Version %v //定義Samba伺服器的簡要說明
# --------------------------- Logging Options -----------------------------
log file = /var/log/samba/log.%m //定義Samba使用者的記錄檔,%m代表用戶端主機名稱
//Samba伺服器會在指定的目錄中為每個登陸主機建立不同的記錄檔
# ----------------------- Standalone Server Options ------------------------
security = share //共用層級,使用者不需要帳號和密碼即可訪問
#----------------------------Share Definitions ----------------------------------
[share] //設定針對的是共用目錄個別的設定,只對當前的共用資源起作用
comment = Public Stuff //對共用目錄的說明檔案,自己可以定義說明資訊
path = /share //用來指定共用的目錄,必選項
public = yes //所有人可查看,等效於guest ok = yes
2、建立共用目錄
# mkdir share //上面設定了共用目錄為/share,於是需要建立這個目錄
# chowm -R nobody:nobody share //由於要設定匿名使用者可以下載或上傳共用檔案,所以要給/share目錄授權為nobody許可權
3、重啟smb服務
# /etc/init.d/smb restart
案例二:
公司現有多個部門,因工作需要,將TS部門的資料存放在samba伺服器的/ts 目錄中集中管理,以便TS人員瀏覽,並且該目錄只允許TS部員工訪問。
1、添加TS部門組和使用者
# groupadd ts
# useradd -g ts aaa
# useradd -g ts bbb
2、在根目錄下建立ts檔案夾
# mkdir ts
3、將使用者添加到samba的賬戶中
# smbpasswd -a aaa
# smbpasswd -a bbb
添加賬戶時會要求輸入密碼,此密碼就是登陸共用伺服器密碼
4、修改設定檔
#---------------------------- Global Settings --------------------------------
[global]
# ----------------------- Network Related Options -------------------------
workgroup = WORKGROUP
server string = David Samba Server Version %v
# --------------------------- Logging Options -----------------------------
log file = /var/log/samba/log.%m
# ----------------------- Standalone Server Options ------------------------
security = user //使用者層級,由提供服務的Samba伺服器負責檢查賬戶和密碼
#---------------------------- Share Definitions -------------------------------
[homes] //設定使用者宿主目錄
comment = Home Directories
browseable = no
writable = yes
[share]
comment = Public Stuff
path = /share
public = yes
[ts] //ts 組目錄,只允許ts群組成員訪問
comment = TS
path = /ts
valid users = @ts
5、重啟服務
# /etc/init.d/smb restart
案例三:
實現不同的使用者訪問同一個共用目錄具有不同的許可權,便於管理和維護。
a、需求
1、 某公司有5個大部門,分別為:人事行政部、財務部、支援人員部、項目部、客服部。
2、各部門的檔案夾只允許本部門員工有權訪問;各部門之間交流性質的檔案放到公用資料夾中。
3、 每個部門都有一個管理本部門檔案夾的管理員帳號和一個只能建立和查看檔案的普通使用者權限的帳號。
4、公用資料夾中分為存放工具的檔案夾和存放各部門共用檔案的檔案夾。
5、 對於各部門自己的檔案夾,各部門管理員具有完全控制許可權,而各部門普通使用者可以在該部門檔案夾下建立檔案及檔案夾,並且對於自己建立的檔案及檔案夾有完全控制許可權,對於管理員建立及上傳的檔案和檔案夾只能訪問,不能更改和刪除。不是本部門使用者不能訪問本部門檔案夾。
6、對於公用資料夾中的各部門共用資料夾,各部門管理員具有完全控制許可權,而各部門普通使用者可以在該部門檔案夾下建立檔案及檔案夾,並且對於自己建立的檔案及檔案夾有完全控制許可權,對於管理員建立及上傳的檔案和檔案夾只能訪問,不能更改和刪除。本部門使用者(包括管理員和普通使用者)在訪問其他部門共用資料夾時,只能查看不能修改刪除建立。對於存放工具的檔案夾,只有管理員有許可權,其他使用者只能訪問。
b、規劃
1、在系統磁碟分割時單獨分一個Company的區,在該區下有以下幾個檔案夾:HR、 FM、TS、PRO、CS和Share。在Share下又有以下幾個檔案夾:HR、FM、TS、PRO、CS和Tools。
2、各部門對應的檔案夾由各部門自己管理,Tools檔案夾由管理員維護。
3、HR管理員帳號:hradmin;普通使用者帳號:user1。
FM管理員帳號:fmadmin;普通使用者帳號:user2。
TS管理員帳號:tsadmin;普通使用者帳號:user3。
PRO管理員帳號:proadmin;普通使用者帳號:user4。
CS管理員帳號:csadmin;普通使用者帳號:user5。
Tools管理員帳號:admin。
4、建立使用者
# useradd -s /sbin/nologin hradmin
# useradd -g hradmin -s /sbin/nologin user1
# smbpasswd -a hradmin
5、建立目錄
# mkdir Company
# mkdir HR FM TS PRO CS Share
# cd Share
# mkdir HR FM TS PRO CS Tools
6、更改目錄屬性
# chown hradmin.hradmin HR
# chmod 777 Company
7、修改設定檔
#--------------------------- Global Settings ---------------------------------
[global]
# ----------------------- Network Related Options -------------------------
workgroup = WORKGROUP
server string = David Samba Server Version %v
# --------------------------- Logging Options -----------------------------
log file = /var/log/samba/log.%m
max log size = 50
# ----------------------- Standalone Server Options ------------------------
security = user
passdb backend = tdbsam
#--------------------------- Share Definitions --------------------------------
[HR] #其他幾個部門參考HR修改即可
comment = This is a directory of HR.
path = /Company/HR/
public = no
admin users = hradmin
valid users = @hradmin
writable = yes
create mask = 0750
directory mask = 0750
[Share]
comment = This is a share directory.
path = /Company/Share/
public = no
valid users = admin,@hradmin,@fmadmin,@tsadmin,@proadmin,@csadmin
writable = yes
create mask = 0755
directory mask = 0755
8、重啟服務
# /etc/init.d/smb restart