·知識點,samba有五種安全級別,它們分別是:linux
share:不須要samba帳戶就可登錄samba服務器ios
user:須要添加samba帳戶才能夠登錄samba服務器shell
server:由另一臺samba服務器來對用戶進行身份驗證。windows
domain:把samba服務器加入到NT域,由NT的域控制器來進行身份驗證。瀏覽器
ADS:Active Directory Service,活動目錄服務,它是samba3.0中新增的身份驗證方式。採用ADS驗證方式,samba服務器集成到活動目錄中。安全
以上是它的五個運行級別;share,user這二個級別適合用小型部門,如網吧、企業內部局域網等,也是samba經常使用的級別。服務器
(一) samba組件安裝:網絡
(1)首先用「rpm –qa |grep samba」命令檢驗系統samba服務是否安裝。dom
#rpm –qa |grep sambasocket
samba-common-3.0.0.15.i386.rpm
samba-client-3.0.0-15.i386.rpm
samba-3.0.0-15.i386.rpm
(2)若是沒有顯示samba(版本)信息,則說明沒有安裝,利用「RedHat Linux安裝光盤」裏自帶的RPM包進行安裝(也可本身在網上下載相關的版本包進行安裝)。
# rpm -ivh samba-common-3.0.0.15.i386.rpm
# rpm -ivh samba-client-3.0.0-15.i386.rpm
# rpm -ivh samba-3.0.0-15.i386.rpm
此外還有一個工具就是圖形界面的Swat。
要是用這個工具﹐你們還要修改一處﹐就是﹕
vi /etc/xinetd.d/swat把其中的
disable = yes
改成
disable = no就能夠了。
# rpm -ivh samba-swat-3.0.0-15.i386.rpm
(二) share級別的samba的配置
這個級別的samba很簡單,首先它不須要以用戶和密碼來驗證登錄,因此就沒必要去配置samba用戶了
下面是實例:
#service smb start // 啓動samba
#cp /etc/samba/smb.conf /etc/samba/smb.conf.bak // 備份samba的配置文件
#vi /etc/samba/smb.conf
// 找到 security = user 將它改爲 security = share
#service smb restart // 重啓samba服務器
打開「個人電腦」,輸入 \\192.168.1.88 sabma服務器的地址
此時samba服務器上任沒有設置任何共享目錄。
下面在服務器上設置一個名爲test的共享目錄
#mkdir /test
#chmod 777 /test //讓全部用戶具備徹底權限
#vi /etc/samba/smb.conf
找到 security = user 將它改爲 security = share
把光標移動配置文件的最後一行,在下面加入如下配置
[test] //共享名
comment = test resource //共享目錄的註釋
path = /test //共享目錄的路徑
writable = yes //是否容許寫入
public = yes //是否容許guest訪問
#service smb restart // 重啓samba服務器
這時輸入 \\192.168.1.88
能夠看到剛纔增長的名爲test的共享目錄,此目錄任何人有「徹底權限」
若是須要共享其它目錄,可照此設定。
(三) user級別的samba的配置.
Share級別的samba無需samba用戶就能夠訪問服務器,而user級別的samba則需以samba用戶和密碼才能訪問,因此咱們先要設定一個samba用戶,以下:
#useradd cc //添加cc用戶
#passwd cc //設置cc用戶的口令
#smbpasswd –a cc //將cc用戶添加爲samba用戶
#mkdir /cc //創建/cc 目錄,此目錄就是要共享的目錄
#chown cc.cc /cc //讓cc用戶成爲/cc目錄的屬主
#vi /etc/samba/smb.conf
// 找到 security = share 將它改爲 security = user
把光標移動配置文件的最後一行,在下面加入如下配置
[bb] //共享名,特地取名爲bb,以區別於cc的home共享
comment = cc resource
path = /cc
writable = yes
valid users = cc
public = no
#service smb restart // 重啓samba服務器
這時輸入 \\192.168.1.88,會彈出用戶驗證對話框
提示輸入samba用戶和密碼,輸入用戶名:cc 和密碼,進入這時會看到多了「bb」、「cc」這二個共享,其中bb是剛纔添加的samba共享,「cc」是cc用戶的家目錄共享。
[注] 在windows中添加cc用戶,而後註銷administrator,以cc用戶的身份登陸,訪問samba服務器時,則不會出現用戶登陸對話框,不用輸入用戶名和密碼而能直接瀏覽共享資源。下圖是在windows中以用戶cc登陸後,輸入 \\192.168.1.88 直接進入的畫面。在windows中以administrator身份登陸後訪問samba資源,之因此會出現登陸對話框,是由於administrator沒有對應的samba賬戶。
若是不想使用「cc」用戶的家目錄共享,能夠進行以下設置:
#vi /etc/samba/smb.conf
找到以下語句:
[homes]
comment = Home Directories
browseable = no
writable = yes
在每行的前面加上註釋符號「;」
;[homes]
; comment = Home Directories
; browseable = no
; writable = yes
#service smb restart // 重啓samba服務器
這時輸入 \\192.168.1.88
此時只剩下咱們人爲添加的bb共享,而家目錄共享cc已經不存在了
[注] samba共享的訪問權限受samba和linux操做系統的雙重製約。即便在samba中已經開通了某個用戶對於某個目錄的訪問權限,但若是samba用戶所對應的linux用戶沒有該目錄的訪問權限,此時仍然不能訪問該共享目錄
(四) 修改samba配置文件:( /etc/smb.conf )
***************Global parameters******************
#全局配置參數
[global]
#設置工做組或者說是域名。
workgroup = MYGROUP
#網絡上看到的計算器名稱(samba)。
netbios name = SAMBA
#服務器描述,%v顯示Samba版本。
server string = Samba Server %v
#設置samba服務器使用的認證過程。默認爲USER,有四個選項:User,Share,Server和Domain。
Security = User
#設置純文本密碼的最少字符數。
min passwd length = 6
#匿名、名稱、密碼都不正確不許登陸服務器。即任何非法用戶名登陸均被視爲gues用戶。
map to guest = Bad User
#用戶名的映像。
username map = /etc/samba/smbusers
#存放samba密碼的路徑
smb passed file = /etc/samba/smbpasswd
#samba日誌文件的名字和路徑。
log file = /var/log/samba/%m.log
#日誌文件的最大尺寸(KB)
max log size = 50
#做爲時間服務器。
time server = Yes
#設置鏈接被視爲無效而斷開前,未激活狀態的時間(MIN),防止資源被無效鏈接耗費。
deadtime = 5
#網絡協議選項,注意不要更改,不然影響網絡速度及網絡問題。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
#用戶成功登陸時在netlogon共享中運行的批處理文件或者windows命令文件,注意:這一項很重要,還有就是必定要配合下面的[netlogon]共享才能配置出你的PDC﹐%U爲自動匹配登陸用戶的名稱。
logon script = %U.bat
#在服務器上保存Windows用戶登陸時的配置文件路徑,%L爲Samba匹配服務器名稱。
logon path = \%Lprofile\%U
#設定登陸時主目錄的當地路徑。
logon drive = H:
#Samba接受所在組用戶以域登陸。
domain logons = Yes
#若是要把samba設置爲域服務器,瀏覽器的OS級別必定要高於Windows。這裏說名一下:OS級別:windows95爲1,98爲16,2000爲32。
os level = 65
#設置samba試圖成爲主瀏覽器。
domain master = Yes
#設置samba爲WINS服務器。
wins support = Yes
#超級用戶。
admin users = root
#設置新文件權限。
create mask = 0740
#創建新文件時強制權限限制。
force create mode = 0740
#容許用戶在NT2000下改變權限。
security mask = 0740
force security mode = 0740
#建立新目錄時容許擁有的最大權限。
directory mask = 0750
force directory mode = 0750
directory security mask = 0750
force directory security mode = 0750
#Windows工做方式,只要文件被修改,其時間戳將隨時更新。
dos filetimes = Yes
#Samba對文件生成時間做取整處理,計爲下1秒,這也是windows工做方式。
dos filetime resolution = Yes
#共享家目錄。
[homes]
comment = Home Directories
read only = No
browseable = No
#重要的設置,samba做爲域服務器時存放用戶登陸時執行的文件或腳本。
[netlogon]
comment = Network Logon Service
path = /home/netlogon
write list = root
guest ok = Yes
share modes = No
#用戶配置文件存放目錄 。
[Profile]
path = /home/profiles
read only = No
create mask = 0770
force create mode = 0770
security mask = 0770
force security mode = 0770
directory mask = 0770
force directory mode = 0770
directory security mask = 0770
force directory security mode = 0770
browseable = No
#打印機共享目錄。
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
browseable = No
***************************************************************************
注意:
一、Smb.conf其它參數用缺省便可。因爲Linux的權限管理沒有NT全面,在權限分配較複雜狀況下,能夠經過兩種方式:
A、對一個目錄產生多個共享目錄,每一個目錄對相應的用戶組分配不一樣權限。
B、能夠和Linux上文件權限相結合。好比:samba共享目錄能夠給每一個人寫權限,但Linux上文件權限爲只給特定組寫權限,則其它人只能讀。
二、用戶及密碼管理:
A、若是encrypt passwords = yes,用戶會有兩個密碼(Linux,smbpasswd),用戶改密碼會麻煩,因此我設置爲no,samba會用/etc/passwd作用戶驗證,用戶也只維護一個密碼,比較方便,但不足夠安全,好象unix password sync = Yes能夠既方便又安全,但我沒成功。
B、修改/etc/passwd,使用戶的shell爲/usr/bin/passwd,這樣用戶想改密碼時,telnet到samba服務器便可,其它如sendmail服務器也能夠用這種方法。
C、如不想用戶的目錄出現/GNUstep目錄,運行mv /etc/skel /etc/skel.backup便可。
三、windows98客戶端:改註冊表。
在HKEY_LOCAL_MACHINESystemCurrentControlSetServicesVxDVNETSUP中增長一DWORD值:值名:EnablePlainTextPassword 數值:0x01。改windowshosts文件,ipaddree samba server name
四、過網關:如客戶端和samba server之間有路由器,確保客戶端和samba server在同一workgroup, 客戶端編輯windowslmhosts文件,a.b.c.d samba server的netbios名或主機名。
我如今的作法爲:給分公司IT設一個賬號在總部,讓他們經過CUTEFTP再經過public目錄實現總部和分公司的文件傳輸。這樣能夠避免分公司必定要跟總公司在一個域(他們還有NT)。
五、磁盤限額:
例如一百名,設定和 bob 相同的 quota 值,首先以手動編輯 bob 的 quota 信息,而後執行:
# csh
# edquota -p bob ‘awk -F:’$3 > 499 {print $1}‘/etc/passwd’
這是假設你的使用者 UID 從 500 開始
**********************************************************************************
接下來就要手動在/home下創建目錄:profiles,訪問權限爲0770,組爲你想要創建的組﹐好比share用來存放Windows用戶的配置文件。
netlogon訪問權限爲1750,這裏加上了sticky選項,不容許其它用戶刪除目錄裏的文件,只有超級用戶或者創建者才能夠,注意sticky選項只對目錄起做用。組爲share
下面創建/etc/samba下面的smbpasswd文件:
# cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
爲了安全起見﹐設置權限:
# cd /etc
# chmod 500 samba
# cd samba
# chmod 600 smbapsswd
接下來你們能夠在netlogon目錄裏創建windows用戶的登陸腳本,好比批處理文件,須要注意的是,必定要在Windows下面創建,由於若是在Linux下創建,那幺Windows就不會執行Linux的文件。好比有個賬戶feixue,批處理文件能夠這樣:
feixue.bat內容爲:
@net time SambaServer /set /yes
@net use H: SambaServerfeixue -y
@regedit -s SambaServer
etlogon*.reg
等。
須要注意的是把批處理文件保存到netlogon下面後必定要檢查文件的權限,修正後用戶纔會執行,否則的話嘿嘿,你有麻煩了﹗﹗﹗
如何配置Windows端登陸Samba域,對於98來講很容易,在網絡屬性裏選Client for microsoft networks,在第一項打勾,下面輸入你的Samba服務器的域名(工做組)。從新激活機器之後,鄧入對話框就會有三項:用戶名、密碼、域名。
NT/2000下面登陸samba域會困難一點,首先你要在Samba服務器上創建windowsNT/2000機器的信用賬號。
(五) 修改samba配置文件2:( /etc/smb.conf )
/usr/sbin/smbd
處理來自用戶的鏈接;文件、權限、用戶名的管理
/usr/sbin/nmbd
幫助快速定位服務器,主要是主機名的定位
/usr/sbin/swat
Samba的Web維護工具,能夠經過Web來維護Samba
/etc/rc.d/init.d/smb
啓動或中止samba服務的腳本程序
/etc/smb.conf
Samba的主要配置文件
/etc/smbusers
samba客戶的用戶名到Linux用戶名的映射文件
/usr/bin/smbstatus
報告當前Samba的鏈接狀態
/usr/bin/mksmbpasswd.sh
從/etc/passwd文件造成smbpasswd文件的程序
/usr/bin/smbadduser
增長新的samba用戶的程序
/usr/bin/smbclient
訪問smb服務器資源的客戶程序
smbclient //Eloo-Server1/share
smbclient //Eloo-Server1/share -I 192.168.0.22
smbclient -M Eloo-Server1
smbclient -L
smbmount //smbserver/service /mnt/smb
/usr/bin/smbpasswd
改變一個用戶的smb加密口令
/usr/bin/testparm
檢查smb.conf配置文件語法是否正確的程序
smb.conf是由段組成,每一個段中又包含參數,參數的賦值方法
參數=參數值
; #開頭的都是註釋行
宏:log file=/var/log/samba/log.%m
[global]
workgroup=Eloo.com 指該服務器所在的工做組
server string= Samba Server 描述信息
log file=/var/log/samba/log.%m 指定日誌文件的存放地點 m表明客戶機的netbios名
security = user 指定Samba操做的安全方式
[homes]
comment = Home directories 註釋信息
browseable = yes 共享名稱能夠出現
writeable = yes 共享目錄可讓客戶寫
CREATE MODE=0755 按照unix文件的屬性來建立文件
[printers]
path = /var/spool/samba 設置一個能夠寫的目錄,做緩衝池
guest ok = yes 容許任何人訪問
printable = yes 能夠打印
global中經常使用的參數
security 肯定對客戶用戶名/口令的驗證方式
-user 進行訪問以前要輸入有效的用戶名及口令
-share 不須要有效的用戶名及口令便可訪問
-server 本質與'user'模式同樣,但由其它samba服務器來驗證
-domain 指定該samba服務器是一個域控制器
encrypt passwords = yes/no
是否使用Win系統下的加密口令,若是選yes的話,就接收傳過來的加密的口令,
若是選no的話,就要接收未加密的口令,但如今的win系統通常都加密,因此要修改註冊表,
使之不加密
regedit
/HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP
編輯-=-新建==Dword值
重命名"新值#1"爲"EnablePlainTextPassword"
賦值該新鍵值爲1
smb passwd file =/etc/smbpasswd
設置samba服務器的用戶密碼存放地
username map
把samba客戶的用戶名映射爲linux用戶名的文件
ex:root = admin administrator
host allow = 192.68.0. Except 192.68.0.11
容許192.68.0這個子網段內除192.68.0.11這臺機器外的的全部機器訪問
log file =/var/log/samba/log.%m
若是host1,host2這兩臺機器訪問過服務器,就會在/var/log/samba/目錄下生成log.host1,log.host2這兩個日誌文件
Smb.conf的其它參數說明
path 共享目錄的路徑(必定要存在)
browseable 共享段是否在控制列表中列出
exec 或 proexec 在創建鏈接以前有SMB服務器選運行的命令
root preexec 只有root才能執行的命令,經常使用於掛接文件系統
ex:
[cdrom]
comment = cdrom
path = /mnt/cdrom
read only = yes
root preexec = mount /mnt/cdrom
root postexec = umount /mnt/cdrom
public 是否公開,若是設置爲yes的話,訪問此共享目錄不須要口令
create mode = 0755 建立文件後文件的權限位
read only 若是設置爲yes ,則不容許用戶在此目錄中進行寫文件操做
實驗一:把本身本機設置爲一臺Samba服務器,使/home/user/test目錄共享,使用另一臺Windows機器來測試是否能找到此機器並能訪問共享目錄(注意:此實驗中samba的安全級別設置爲share級,即全部人均可以訪問 security = share)
實驗二:內容同上,但要把服務器的安全級別設置爲user級別,即security=user,而後再測試。
Share級別
vi /etc/smb.conf
[global]段中
改security = share
後,加一個共享段
[share]
path=/home/user/share
public=yes
browseable=yes
netconf 設置主機名
hostname 設置主機名
重啓便可
實驗內容:設置/home/user/share目錄共享,使win9x客戶端訪問
User級別(vi /etc/smb.conf)
[global]段中
改security=user
取消 encrypt passwords = yes
smb passwd file = /etc/smbpasswd
的註釋
cat /etc/passwd|mksmbpasswd.sh >/etc/smbpasswd
使系統賬號導入至Samba賬號庫中
smbpasswd <username>
爲一個Samba賬號設置密碼
重啓服務
實驗內容:設置win98客戶端經過正常的用戶名和口令能夠訪問本身的主目錄 下面以一個計算器名爲test的計算機爲例:
# useradd -c 'Test Compter' -d /dev/null -g share -s /bin/false -r test$
咱們建立了一個Linux本地賬號,出於安全的考慮不須要它登陸到Linux進行任何操做,所以的用戶目錄爲/dev/null,shell是/bin/false。
而後咱們就能夠用smbpasswd建立相應的Samba機器賬號:
# smbpasswd -a -m test
其中-a是添加,-m是機器信任賬號。這樣,依據test$的Linux賬號建立了一個NT域的機器信任賬號test。
而後在windowsNT/2000上加入Samba域,根據提示輸入超級用戶的用戶名稱和密碼,就能夠加入Samba域了。
從新激活機器之後,就會有三個選項了,好比用原先創建的用戶feixue登入便可。
而後開啓瀏覽器輸入http://hostname:901/
也能夠安裝redhat-config-samba這個工具。
爲了方便遠程管理,Webmin也不錯(建議安裝)
(六) linux服務器向windows客戶端提供文件/目錄及打印機共享
linux服務器上的samba運行起來之後,linux就至關於一臺文件及打印服務器,向windows和linux samba客戶提供文件及打印服務。工做在共享模式或者用戶模式下的兩種方法較爲常見(Security=share或Security=user),其中有如下常見問題。
環境:Redhat linux 6.x
1. 共享模式時從windows 98客戶端不能從網上鄰居中看到服務器,或者看到後不能點擊進入共享資源,說密碼不對等等。
a. 沒有去掉guest account = pcguest一行前面的註釋符號
b. 沒有建立guest賬號pcguest (#useradd pcguest便可)
c. windows 98默認發送加密的口令,而/etc/smb.conf中沒有enable samba加密口令。或者也能夠編輯windows 98註冊表,讓它發送文本口令(不被建議的)
2. 在/etc/smb.conf中定義了徹底可寫共享目錄,但實際操做時不能寫入。
a. 特別要注意的是:linux自己的文件及目錄權限永遠大於samba定義的權限,要讓某共享資源目錄能夠被寫,首先要保證在linux下面該目錄能夠被相應的用戶可寫,這是前提。
3. 在共享模式下如何對某共享目錄加用戶名及密碼保護
a. 看下面的共享資源定義例子:
security = SHARE
username map = /etc/smbusers
log file = /var/log/samba/log.%m
max log size = 50
socket options = TCP_NODELAY
client code page = 936
os level = 40
local master = yes
preferred master = yes
domain master = yes
guest account = pcguest
encrypt passwords = yes
smb passwd file = /etc/smbpasswd
[sales]
comment = test folder
path = /sales/training
guest ok = no
writable = yes
valid users = @sales
write list = @sales 在上面的例子中,咱們定義了security=share和samba encrypt password,共享目錄名sales不是guest用戶可訪問的,須要屬於sales組裏的用戶可訪問,同時也可寫,固然在linux下面要保證/sales/training目錄可被組sales可寫,這樣之後定義你的windows logon(不是NT域登陸)的用戶名爲組sales裏的用戶名,而後在網上鄰居中雙擊sales時會提示你密碼,該密碼是你在samba服務器上定義的samba加密的口令,在上面的例子中用戶名和密碼對存放在文件/etc/smbpasswd中,固然你事先要有系統用戶名在/etc/passwd中。
4. windows用戶常常不能在網上鄰居中瀏覽到samba服務器的名字。
a. windows的網上鄰居服務是很是不可靠的服務,它所創建的瀏覽列表不可靠,由衆多因素引發。
b. 一種可靠的解決辦法是直接用"查找"-"計算機"-打入samba服務器的主機名進行查找。注意要確保你在windows啓動時沒有取消登陸。
c. 你也能夠在DOS窗口用net use命令:如
c:>net use m: sambaservernameshareresourcename
5. 服務器端的測試配置工具
a. 在配置完/etc/smb.conf後運行testparm檢測配置文件中是否有相應語法錯誤
b. 在samba服務起來後,用smbstatus報告用戶使用和登陸狀況。
c. 在更改過配置文件後,運行/etc/rc.d/init.d/smb restart重讀配置文件
(七) 在linux客戶機上使用linux samba服務器
1. 在linux客戶機上使用smbclient
a. 列出計算機192.168.100.1上全部可用的共享資源:
smbclient -L 192.168.100.1
若是詢問口令,則直接回車。
也可用名字如:
smbclient -L sh3
若不知道sh3的IP地址,也可用
smbclient -L sh3 -I 192.168.100.1
b. 以某用戶身份鏈接到samba服務器192.168.100.1上的共享資源sales
smbclient //192.168.100.1/sales -U jephe
提示口令後輸入口令,也可把口令打在命令行上用%號分隔,爲:
smbclient //192.168.100.1/sales -U jephe%password
提示符爲smb:,就象是FTP同樣
也可用名字如:
smbclient //sh3/sales -I 192.168.100.1 -U jephe
你也能夠用符號,你的SHELL可能會過濾到特殊符號,則要這樣寫
#smbclient \sh3sales
2. 經過IP地址查找netbios名字
a. 在windows下用
c:>nbtstat -A 192.168.100.1
若是知道netbios名字,可用下面的命令得知某機器哪些服務
c:>nbtstat -a hydra
b. 在linux下用
#nmblookup -A 192.168.100.1
在一個網段內可用下面的命令檢測哪些主機在提供samba共享服務:
#nmblookup -d 2 * 或
#nmblookup -B 192.168.100.255 *
檢測其它網段內的某臺機器是否提供samba服務
#nmblookup -A 192.168.15.48
但不能用 #nmblookup -B 192.168.15.255 *,由於通常的路由器和linux雙宿主機不
轉發子網直接廣播。
3. netbios over TCP/IP使用的協議及端口號
a. 共有三種netbios服務
netbios-ns 137/udp(大多數) and 137/tcp
netbios-dgm 138/udp(大多數)
and 138/udp(<font color=red>明顯有誤,到底哪一個是udp/tcp</font>)
netbios-ssn 139/tcp
b. windows機器上的PC應用程序經過不一樣機器間的netbios名字來彼此通信。
c. 每次當windows機器啓動時,它向整個網段內發出137/udp廣播,一來登記向某工做組內的主瀏覽器登記netbios名字,二來確信整個子網內沒有與之相同的名字
d. 網上鄰居中所創建起來的瀏覽列表僅僅是列表,看不到也沒有關係,一樣也能夠經過計算機查找,net use命令等來與別的計算機通信,共享文件和打印機
e. 不在同一網段內的機器或者是撥號到LAN上的PPP服務器後不可能進行網上鄰居的瀏覽。這是由於子網內的廣播不被串行線路和路由器轉發。
f. 如何在撥號到LAN上的PPP服務器後使用LAN上的samba服務器
<1> 在windows目錄下編輯c:windowslmhosts
如:192.168.11.3 sh3 #PRE #DOM:sales
執行nbtstat -R 去enable它,不須要重啓windows
<2> 你必須登陸windows,如果用戶模式的samba,你應該選擇windows NT登陸
<3> 其它設置跟LAN上的機器同樣
<4> 撥號創建鏈接後,在查找"計算機"功能定位資源
<5> 如今你能使用遠端服務器上的目錄和打印機。
在不一樣網段內的機器也可參照此作法,也可用plug-gw代理tcp/139號端口訪問另外一網段上的samba服務器。
Samba config file created using SWAT
# from 0.0.0.0 (0.0.0.0)
# Date: 2003/11/19 15:38:38