samba


·知識點,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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM