·知識點,samba有五種安全級別,它們分別是:
share:不需要samba賬戶就可登陸samba服務器
user:需要添加samba賬戶才可以登陸samba服務器
server:由另外一台samba服務器來對用戶進行身份驗證。
domain:把samba服務器加入到NT域,由NT的域控制器來進行身份驗證。
ADS:Active Directory Service,活動目錄服務,它是samba3.0中新增的身份驗證方式。采用ADS驗證方式,samba服務器集成到活動目錄中。
以上是它的五個運行級別;share,user這二個級別適合用小型部門,如網吧、企業內部局域網等,也是samba常用的級別。
(一) samba組件安裝:
(1)首先用“rpm –qa |grep samba”命令檢驗系統samba服務是否安裝。
#rpm –qa |grep samba
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
***************************************************************************
注意:
1、Smb.conf其它參數用缺省即可。由於Linux的權限管理沒有NT全面,在權限分配較復雜情況下,可以通過兩種方式:
A、對一個目錄產生多個共享目錄,每個目錄對相應的用戶組分配不同權限。
B、可以和Linux上文件權限相結合。比如:samba共享目錄可以給每個人寫權限,但Linux上文件權限為只給特定組寫權限,則其它人只能讀。
2、用戶及密碼管理:
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即可。
3、windows98客戶端:改注冊表。
在HKEY_LOCAL_MACHINESystemCurrentControlSetServicesVxDVNETSUP中增加一DWORD值:值名:EnablePlainTextPassword 數值:0x01。改windowshosts文件,ipaddree samba server name
4、過網關:如客戶端和samba server之間有路由器,確保客戶端和samba server在同一workgroup, 客戶端編輯windowslmhosts文件,a.b.c.d samba server的netbios名或主機名。
我現在的做法為:給分公司IT設一個帳號在總部,讓他們通過CUTEFTP再通過public目錄實現總部和分公司的文件傳輸。這樣可以避免分公司一定要跟總公司在一個域(他們還有NT)。
5、磁盤限額:
例如一百名,設定和 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