一. samba 的基本概念
1. samba 的功能
samba是一種基於linux/unix平臺中利用於smb(服務信息塊)協議,實現以下功能的軟件包:
n Linux/ UNIX與其它系統主機之間的文件及打印共享
n 支持wins服務器解析和瀏覽
n 支持Windows域控制器和成員服務器的身份驗證
n 可以模擬windows的域控制器
n 支持SSL
2. samba的工作原理
samaba利用smbd程序來監聽139號端口實現主機之間文件及打印共享,利用nmbd監聽137,138端口實現主機之間可以利用netbios名稱相互訪問
二. samba的配置
1. 安裝samba的軟件包.
#mount /dev/cdrom (插入第一張安裝光盤)
#cd /mnt/cdrom/RedHat/RPMS
#rpm –ivh samba-common-2.2.7a-7.9.0.i386.rpm
(該包中包括服務器和客戶均需要的文件)
#rpm –ivh samba-2.2.7a-7.9.0.i386.rpm
(服務端軟件)
#rpm –ivh redhat-config-samba-1.0.4-1.noarch.rpm
(samba的GUI管理工具)
#rpm –ivh samba-client-2.2.7a-7.9.0.i386.rpm
(samba客戶端軟件)
#rpm –ivh samba-swat-2.2.7a-7.9.0.i386.rpm
(samba的web管理工具,該包放在第三張安裝光盤中)
相關文件:
/etc/samba/smb.conf samba的核心配置文件
/etc/rc.d/init.d/smb samba的啓動腳本
/usr/sbin/smbd samba的守護進程
/usr/sbin/nmbd netbois的守護進程
/etc/rc,d/init.d/smd samba啓動腳本
/etc /samba/smdpasswd 存放samba用戶口令
/etc/samba/smbusers 存放samba用戶與系統用戶的映射情況
/usr/sbin/swat samba的web配置工具
/usr/bin/smbadduser 添加samba用戶
/usr/bin/smbpasswd 設置samba用戶的口令
/usr/bin/smbclient samba的客戶訪問工具
/usr/bin/smbprint samba的打印工具
/usr/bin/smbmount samba客戶加載工具
/usr/bin/smbumount samba客戶卸載工具
2. 修改/etc/samba/smb.conf
作用: 設置samba服務器選項和共享資源的設置
內容: #說明語句
[global] //定義samba服務器的全局選項
…………
…………
全局參數=值
…………
…………
[homes] //共享用戶主目錄
…………
…………
資源共享參數=值
…………
…………
[printers] // 打印機共享
…………
…………
資源共享參數=值
…………
…………
[public] //共享目錄設置
…………
…………
資源共享參數=值
…………
…………
以上聲明爲系統自帶的聲明,用戶也可以根據實際需要定義共享目錄:
[自定義] 自定義的共享
…………
…………
資源共享參數=值
…………
…………
說明:
(1) 全局參數
基本設置參數:Workgroup=域名/工作組名
功能:設定samba服務器所屬工作組/域的名稱)
實例:workgroup=linux
Netbios name=主機名稱
功能:設置samba服務器的netbios名稱
實例:netbios name=smbserver
Server string=字符串
功能:設置samba服務器的描述
實例:server string=samba server
interfaces=接口名/ip地址
功能:設置samba服務器的ip地址,如果不想使用默認IP地址或者想同時使用多個IP地址,可以設置這個選項
實例:interfaces=eth0 192.168.1.1/255.255.255.0
netbios aliases=主機名稱
功能:設置netbios的別名
實例:netbios aliases=smb1 smb2
bind interfaces only=true/false
功能:設置主機配置多塊網卡時,是否區分開不同網卡的數據報,默認爲false
實例:bind interfaces only=false
安全設置參數:admin users=用戶名
功能:設置管理員賬號,該用戶擁有所有文件的存取權限
實例:admin users=smbadmin
socket address=ip地址
功能:指定samba服務器監聽的ip地址
實例:socket address=192.168.0.1
security=user/share/domain/server
功能:設置samba的共享安全級別
注意:share 表示共享級訪問,服務器不對客戶機進行身份驗證
user 表示用戶級訪問,被訪問的samba服務器要對客戶機進行身份驗證
server 表示服務器級訪問,被訪問的samba服務器請求另一臺samba服務器對客戶機進行身份驗證
domain 表示域級訪問,被訪問的samba服務器請求另一臺win NT域控制器對客戶機進行身份驗證
實例:security=share
encrypt passwords=yes/no
功能:指定是否使用加密口令
注意:對於windows客戶機來說,該選項應該設置爲yes
實例:encrypt passwords=yes
restrict anonymous=true/false
功能:指定服務器是否允許win NT/2000以匿名方式登錄
實例:restrict anonymous=false
security mask=權限值
功能:設置windows 客戶機改變samba服務器文件權限時所能更改的最大文件權限
實例:security mask =0744
smb passwd file=文件路徑
功能:指定samba用戶密碼的文件位置
實例:smb passwd file=/etc/samba/smbpasswd
map to guest=never/bad user/bad password
功能:設置當用戶所輸入的用名和密碼不正確時的處理方式
注意:該選項只有security=share時纔有效,該選項可以取以下三種值:
never 表示拒絕使用任何資源
bad user 表示用戶輸入用戶名正確,但密碼錯誤時,可以允許以guest登錄
bad password 表示用戶輸入的用戶名和口令都錯誤時,可以允許以guest登錄
min passwd length=數字
功能:指定密碼的最小長度,默認值爲5位
實例:min passwd length=5
null passwords =yes/no
功能:設置是否允許用戶密碼爲空
實例:null passwords=yes
passwd level=數字
功能:設置用戶設置密碼時,最多允許幾個字符大小寫不同
實例:passwd level=8
username level=數字
功能:當驗證賬號時,設定最多允許幾個字符大小寫不同
實例:username level=8
username map=文件路徑
功能:指定SMB用戶名與LINUX用戶名映射文件的路徑
實例:username map=/etc/samba/smbusers
unix passwd sync=false/true
功能:設置服務器是否允許samba用戶口令與linux系統用戶密碼同步,當改變samba用戶口令同時更新linux系統用戶的口令
實例:unix passwd sync=false
passwd server=ip址址/主機名
功能:指定密碼服務器的位置,當security值爲server/domain必須設置該參數
實例:passwd server=192.168.3.1
update encryptd =yes/no
功能:設置客戶在samba用戶登錄時,是否需要修改密碼
實例:update encryptd=yes
guest account=用戶名
功能:指定來賓賬號的名稱,默認爲nobody
實例:guest account =guest
hosts equiv=文件路徑
功能:定義允許空密碼即可訪問samba服務器的主機和用戶名
實例:host equiv=/etc/samba/host.equiv
root directory=目錄名
功能:指定samba服務器工作主目錄,任何不在此目錄下的資源則拒絕訪問
實例:root directory=/etc/samba/
hosts allow= ip地址/主機名/域名
功能:設置允許訪問的客戶機
實例:hosts allow=192.168.1.1
hosts deny=ip地址/主機名/域名
功能:設置禁止訪問的客戶機
實例:hosts deny=192.168.0.2
打印機設置參數:
printcap name=路徑
功能:設定打印機的配置文件的位置
實例:printcap name=/etc/printcap
load printers =yes/no
功能:設定是否自動裝載打印機的裝載文件,當要做打印服務器時必須設置爲yes
實例:load printers=yes
printing =bsd/lprng/aix/hpux/qnx/sysv/plp
功能:設置打印機相關指令時所採取的模式
實例:printing=lprng
printer name=名稱
功能:設置打印機的名稱
實例:printer name=hpprint
printer driver file=路徑
功能:設置打印機設定文件的位置
實例:printer driver file=/etc/samba/driver
日誌設置參數: log file=路徑
功能:定義日誌文件的位置
實例:log file=/var/log/samba/%m.log
max log size=數字
功能:定義日誌文件的最大千字節
實例:max log size=5000
運行效率參數:change notify timeout=數字
功能:設置服務器週期性異常通知
實例:change notify timeout=90
deadtime=數字
功能:客戶端無操作多少分鐘後服務器中斷連接
實例:deadtime=10
getwd cache=yes/no
功能:是否啓用cache功能
實例:getwd cache=yes
keepalive=數字
功能:服務器每隔多少秒向客戶端發送keepalive包用於確認客戶端是否工作正常
實例:keepalive=30
max open files=數字
功能:同一個客戶端最多能打開的文件數目
實例:max open files=1000
max ttl=數字
功能:設定nmbd程序採用wins方式解析時,最大存活時間
實例:max ttl=259200
client code page=850/936
功能:設定客戶端存取samba服務器的資源時所使用的字符編碼表
實例:client code page=936
Pdc選項:
local master=yes/no
功能:設置是否允許samba服務器成爲網絡中的主瀏覽器
實例:local master=yes
domain master=yes/no
功能:設置samba服務器成爲PDC,如果網絡己有win NT的PDC時,該選項應該爲no
實例:domain master=yes
Preferrid master=yet/no
功能:讓samba服務器成爲網絡中的優先級最高的PDC
實例: preferred master=yet/no
domain logons=yes/no
功能:設置samba服務器是否允許win NT客戶機登錄
實例:domain logons=yes
wins設置參數:
wins support=yes/no
功能:是否支持wins解析
實例:wins support=yes
wins server=服務器
功能:指定wins服務器的位置
實例:wins server=192.168.0.2
wins proxy=yes/no
功能:設置samba服務器是否支持wins代理功能
實例:wins proxy=yes
(2) 資源共享的選項
基本選項 :
comment=說明語句
功能:對共享資源的說明
實例:comment=file shared
path=路徑
功能:共享資源的路徑
實例:path=/soft
訪問控制選項:
browseable=yes/no
功能:是否可以瀏覽共享目錄,默認爲yes
實例:browseable=no
printable =yes/no
功能:設置客戶機是否可以使用共享打印機打印
實例:printable=yes
avalidable=yes/no
功能:設置共享資源是否可用
實例:avalidable=yes
public=yes/no
功能:設置共享資源是否允許所有用戶訪問,除guest用戶以外
實例:public=yes
guest ok =yes/no
功能:設置是否允許guest用戶訪問共享資源
實例:guest ok =yes
guest only=yes/no
功能:設置共享目錄只允許guest用戶訪問
實例:guest only=yes
read only=yes/no
功能:訪問用戶對共享資源只讀
功能:read only=yes
valid users=用戶名/@組名
功能:設定指定允許訪問共享資源的用戶/組,多用戶名用逗號分開,指定組時要在組名前加@
實例:valide users=u1,u2,@g1
invalid users=用戶名/@組名
功能:設定指定禁止訪問共享資源的用戶/組,多用戶名用逗號分開,指定組時要在組名前加@
實例:invalid users=@g2
create mode=權限值
功能:指定客戶機在共享目錄中創建文件的默認權限,默認權限爲744
實例:create mode=755
directory mode =0775
功能:指定客戶機共享目錄中創建文件目錄的默認權限,默認權限爲755
實例:directory mode=755
writable=yes/no
功能:指定共享的路徑是否可寫
實例:writable=yes
write list=用戶名/@組名
功能:設定允許讀寫共享目錄的用戶列表
實例:write list=abc,@g2
read list=用戶名/@組名
功能:設定只讀訪問用戶列表
實例:read list=abc,@cuo
preexec=路徑
功能:指定客戶機連接時要自動執行文件
實例:preexec=/bin/mount /dev/cdrom
postexec=路徑
功能:指定客戶機斷開連接時要自動執行的文件
實例:postexec=/bin/umount /dev/cdrom
root preexec=路徑
功能: 指定客戶機連接時要以ROOT用戶身份自動執行的文件
實例:root preexec=/bin/mount /dev/cdrom
root postexec=路徑
功能:指定客戶機斷開連接時要以ROOT用戶身份自動執行的文件
實例:root postexec=/bin/umount /dev/cdrom
(3) 特殊變量
%S: 當前服務名
%P: 當前服務的根目錄
%u: 當前服務的用戶名
%h: samba服務器的主機名
%m: 客戶機的NETBIOS名
%L samba服務器的netbios名
%v samba版本號
%g 給定%u的所在的主工作組名
%H 給定的%u的宿主目錄
%T 當前日期和時間
文件實例:
根據以下要求/etc/samba/smb.conf文件:
n 設置samba服務器的工作組名爲linuxgroup,NETBIOS名爲linux
n 設置samba服務器的訪問模式爲share
n 共享/soft目錄,共享名爲soft,該共享目錄允許所有的用戶讀寫操作
#vi /etc/samba/smb.conf
修改內容如下:
[global]
Workgroup=linuxgroup
Netbios name=linux
Security=share
………………
………………
………………
[homes]
………………
………………
………………
………………
[printers]
………………
………………
………………
………………
[soft] //添加如下這個聲明
comment=applic soft shared
path=/soft
browseable=yes
writable=yes
guest ok=yes
public=yes
3. 啓動 samba服務
# service smb start
4. samba用戶的建立
samba用戶其實是系統用戶的映射,所以建立samba用戶先必須在系統中建立相應的用戶,再通過特定方式映射爲samba用戶
方法一: smbadduser 用戶名:用戶名
實例:建立samba用戶u1
#useradd u1
#passwd u1
#smbadduser u1:u1
方法二:#smbpasswd –a 用戶名
實例:
#useradd u2
#passwd u2
#smbpasswd –a u2
方法三:成批添加用戶
#mksmbpasswd.sh
實例:
#cat ./etc/passwd |mksmbpasswd.sh>/etc/samba/smbpasswd
三. Samba 的客戶工具的使用
1. Smbclient
功能: (1)查看其他主機上共享資源
(2)連接其他主機的共享目錄
格式:#smbclient [參數] 主機ip或netbios名稱
參數: -N 不提示輸入用戶口令
-L 主機IP地址/netbios名稱 查看指定主機上的共享目錄
-U 用戶名 指定連接其它主機的用戶名
實例:#smbclient -L 192.168.0.1 –U administrator
#smbclient //192.168.0.1/c -U administrator
2. smbmount
功能: 加載smb文件系統
格式:
smbmount //主機IP地址或netbios名/共享名 裝載點 -ousername=用戶名 password=密碼
實例:
#smbmount //192.168.0.1/c /h2 -ousername=administrator
四. 配置案例
配置要求:
設某公司有財務,技術,領導3個部門,我們分別爲3個部門建立3個用戶組爲caiwu,network,lingdao; 三個部門裏各有2個用戶,我們建用戶分別爲caiwu01,caiwu02,network01,network02,lingdao01,lingdao02,具體如下:
1. 首先服務器採用用戶驗證的方式,每個用戶可以訪問自己的宿主目錄,並且只有該用戶能訪問宿主目錄,並具有完全的權限,而其他人不能看到你的宿主目錄
2. 建立一個caiwu的文件夾,希望caiwu組和lingdao組的人能看到,network02也可以訪問,但只有caiwu01有寫的權限
3. 建立一個lindao的目錄,只有領導組的人可以訪問並讀寫,還有network02也可以訪問,但外人看不到那個目錄
4. 建立一個文件交換目錄exchange,所有人都能讀寫,包括guest用戶,但每個人不能刪除別人的文件
5. 建立一個公共的只讀文件夾public,所有人只讀這個文件夾的內容
配置過程:
1. 建立相應的用戶和用戶組
#groupadd caiwu
#groupadd network
#groupadd lingdao
#useradd caiwu01 -g caiwu
#useradd caiwu02 -g caiwu
#useradd network01 -g network
#useradd network02 -g network
#useradd lingdao01 -g lingdao
#useradd lingdao02 -g lingdao
然後我們使用smbpasswd -a caiwu01的命令爲6個帳戶分別添加到samba用戶中
2. 建立相應的目錄
#mkdir /home/samba
#mkdir /home/samba/caiwu
#mkdir /home/samba/lingdao
#mkdir /home/samba/exchange
#mkdir /home/samba/public
3. 改變目錄的權限
我們爲了避免麻煩可以在這裏把上面所有的目錄的權限都設置成777:
#chmod 777 /home/samba
#chmod 777 /home/samba/caiwu
#chmod 777 /home/samba/lingdao
#chmod 777 /home/samba/exchange
#chmod 777 /home/samba/public
4. 修改/etc/samba/smb.conf
#vi /etc/samba/smb.conf
修改內容如下:
[global]
workgroup = linux
netbios name=smbser
server string = xhnet’s Samba File Server
security = user
encrypt passwords = yes
#其他的基本上可以按照默認的來
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
#homes段滿足第1條件
[caiwu]
comment = caiwu
path = /home/samba/caiwu
public = no
valid users = @caiwu,@lingdao,network02
write list = caiwu01
printable = no
#caiwu段滿足我們的第2要求
[lingdao]
comment = lingdao
path = /home/samba/lingdao
public = no
browseable = no
writable=yes
valid users = @lingdao,network02
printable = no
#lingdao段能滿足我們的第3要求
[exchage]
comment = Exchange File Directory
path = /home/samba/exchange
public = yes
guset ok =yes
writable = yes
#exchange段基本能滿足我們的第4要求,但不能滿足每個人不能刪除別人的文件這個條件,即使設置了mask也是沒用,其實這個條件只要linux設置一個粘着位就行
chmod -R 1777 /home/samba/exchange
注意這裏權限是1777,類似的系統目錄/tmp也具有相同的權限,這個權限能實現每個人能自由寫文件,但不能刪除別人的文件這個要求
[public]
comment = Read Only Public
path = /home/samba/public
public = yes
read only = yes
#這個public段能滿足我們的第5要求。
4.啓動服務
#/etc/rc.d/init.d/smb restart
5.利用windows或linux主機測試SAMBA服務器