Chinaunix首页 | 论坛 | 博客
  • 博客访问: 308578
  • 博文数量: 321
  • 博客积分: 10055
  • 博客等级: 上将
  • 技术积分: 3780
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-29 13:03
文章分类

全部博文(321)

文章存档

2012年(1)

2010年(7)

2009年(1)

2008年(312)

我的朋友

分类: LINUX

2008-09-14 10:24:12

SMBServer (Server Message Block 的簡寫)
服務:
nmbd :這個 daemon 是用來管理工作群組、NetBIOS name 等等的解析,主要利用 UDP 協定開啟 port 137, 138 來負責名稱解析的任務
smbd :這個 daemon 的主要功能就是用來管理 SAMBA 主機分享的目錄、檔案與印表機等等,主要利用可靠的 TCP 協定來傳輸資料,開放的埠口為 139 及 445(不一定存在)
連線模式:
peer/peer
在區域網路裡面的所有 PC 均可以在自己的電腦上面管理自己的帳號與密碼, 同時每一部電腦也都具有獨力可以執行各項軟體的能力,只是藉由網路將各個 PC 連結在一起而已的一個架構, 所以,每一部機器都是可以獨立運作的
Peer/Peer 的架構是比較適:
(1)小型的網域
(2)沒有需要常常進行檔案資料分享的網路環境,或者是
(3)每個使用者都獨自擁有該電腦的擁有權,不能在其他客戶端進行登入作業

domain model
PDC 主機控管整個網域裡面的各個機器 (PC A ~ PC D) 的帳號與密碼的資訊
適用於大型企業間不同的人在不同的客戶端用同一個賬號和密碼來登錄系統進行相關操作。

Linux下套件下載地址:



[root@test227 ~]# rpm -qa|grep samba
samba-3.0.10-1.4E.11
system-config-samba-1.2.21-1.el4.1
samba-swat-3.0.10-1.4E.11
samba-common-3.0.10-1.4E.11
samba-client-3.0.10-1.4E.11
如上,察看系統中是否有安裝(一般的系統都會自帶)
samba:
這個套件主要包含了 SAMBA 的主要 daemon 檔案 (smbd 及 nmbd)、 SAMBA 的文件檔 (document)、以及其他與 SAMBA 相關的 logrotate 設定檔及開機預設選項檔案等
samba-common:
這個套件則主要提供了 SAMBA 的主要設定檔 (smb.conf) 、 smb.conf 語法檢驗的測試程式 (testparm)等等
samba-client:
這個套件則提供了當 Linux 做為 SAMBA Client 端時,所需要的工具指令,例如掛載 SAMBA 檔案格式的執行檔 smbmount 等等


配置文件說明:
[root@test227 ~]# ll /etc/samba/
total 32
-rw-r--r-- 1 root root 20 Feb 9 2007 lmhosts
-rw-r--r-- 1 root root 10836 Jun 13 17:32 smb.conf
-rw-r--r-- 1 root root 97 Feb 9 2007 smbusers
/etc/samba/smb.conf:
smb.conf 是 Samba 的主要設定檔名,如果你的 distribution 的 SAMBA 設定檔不在 /etc/samba/ 目錄當中, 那麼你應該使用 locate 或 find 等方式將他找出來,檔案主要在設定工作群組、 NetBIOS 名稱以及分享的目錄等相關設定。
/etc/samba/lmhosts:
這個檔案的主要目的在對應 NetBIOS name 與該主機名稱的 IP,有點像是 /etc/hosts 的功能,只不過這個 lmhosts 對應的主機名稱是 NetBIOS name,通常只要一啟動 SAMBA 時,他就能自己捉到 LAN 裡面的相關電腦的 NetBIOS name 對應 IP 的資訊,因此這個檔案通常可以不用設定。
/etc/samba/smbpasswd:
這個檔案預設並不存在啦!他是 SAMBA 預設的使用者密碼對應表,使用者的密碼預設就是放置在這裡(可以自行在 smb.conf 裡面設定密碼放置的地方及密碼檔名)。權限設定一般為 600。
/etc/samba/smbusers:
由於 Windows 與linux在管理員與訪客的帳號名稱不一致,分別為 administrator 及 root, 為了對應這兩者之間的帳號關係,可以使用這個檔案來設定。不過這個檔案的使用必須要經由 smb.conf 內的『 username map 』設定項目來啟動才行。
/usr/share/doc/samba-<版本>:
這個目錄包含了 SAMBA 的所有相關的技術手冊


samba主要命令
testparm:
這個指令主要在檢驗 samba 設定檔 smb.conf 的語法正確與否,當你編輯過 smb.conf 時,請務必使用這個指令來檢查一次, 避免因為打字錯誤引起的困擾。
smbstatus:
列出目前的 SMB server 的狀態
smbpasswd:
如果您的 SAMBA 設定的較為嚴格,需要規定使用者的帳號與密碼,那麼那個密碼檔案的建立就需要使用 smbpasswd 來建置才可以
smbclient:
當你的 Linux 主機想要藉由『網路上的芳鄰』的功能來查看別台電腦所分享出來的目錄與裝置時,就可以使用 smbclient 來查看
smbmount:
在 Windows 上面我們可以設定『網路磁碟機』來連接到自己的主機上面,同樣的,在 Linux 上面,我們可以透過 smbmount 來將遠端主機分享的檔案與目錄掛載到自己的 Linux 主機上面。
nmblookup:
有點類似 nslookup !重點在查出 NetBIOS name
smbtree:
有點像 Windows 系統的網路上的芳鄰顯示的結果,可以顯示類似『靠近我的電腦』之類的資料, 能夠查到工作群組與電腦名稱的樹狀目錄分佈圖


SAMBA設定:
Step1:在 smb.conf 當中設定好工作群組、NetBIOS 主機名、密碼使用狀態等等與主機相關的資訊
/etc/samba/smb.conf
在 [global] 部分關於主機名稱資訊方面的參數主要有:
• workgroup = 工作群組的名稱:注意,主機群要相同;
• netbios name = 主機的 NetBIOS 名稱啊,每部主機均不同;
• server string = 主機的簡易說明,這個隨便寫即可。
在新版的 3.x 上面有數個提供這些語系轉換的設定,如下所示:
• display charset = 自己伺服器上面的顯示編碼, 例如你在終端機時所查閱的編碼資訊。一般來說,與底下的 unix charset 會相同。
• unix charset = 在 Linux 伺服器上面所使用的編碼,一般來說就是 i18n 的編碼囉! 所以你必須要參考 /etc/sysconfig/i18n 內的『預設』編碼。
• dos charset = 就是 Windows 用戶端的編碼了! 一般來說我們的繁體中文 Windows 使用的是 big5 編碼,這個編碼在 Samba 內的格式被稱為『 cp950 』

關於語系編碼,建議您參考:
登錄檔方面的資訊, 包括這些參數:
• log file = 登錄檔放置的檔案,檔名可能會使用變數處理;
• max log size = 登錄檔最大僅能到多少 Kbytes ,若大於該數字,則會被 rotate 掉。
還有跟密碼有關的參數,包括這幾個:
• security = user, server, domain, share 四選一,這四個設定值分別代表:
o user :使用 SAMBA 本身的密碼資料庫,密碼資料庫與底下的 smb passwd file 有關;
o share:分享的資料不需要密碼即可分享;
o server, domain:使用外部主機的密碼,亦即 SAMBA 是用戶端之意,如果設定這個項目, 你還得要提供『password server = IP』的設定值才行;
• encrypt passwords = Yes 代表密碼要加密,注意那個 passwords 要有 s 才對!
• smb passwd file = 密碼放置的檔案,通常是 /etc/samba/smbpasswd 。

step2:在 smb.conf 內設定好預計要分享的目錄或裝置以及可供使用的使用者資料
/etc/samba/smb.conf
在目錄參數部分,主要有底下這幾個常見的參數:
• [分享名稱] :這個分享名稱很重要,他是一個『代號』而已。 舉例來說,你在 Windows 當中使用『共用』來分享網芳時,假設你將『D:\game』分享出來, 系統不是還會要你輸入一個『在網路上面的名稱』嗎?假設你輸入『My_Games』這個名稱好了, 那麼未來大家在網芳看到的這個資料夾 (D:\game) 名稱其實是『\\你的IP\My_Games』了!
• comment :這個目錄的說明!
• path :在網芳中顯示的名稱 [分享名稱] 中,所實際進入的 Linux 檔案系統。 也就是說,在網芳當中看到的是 [分享] 的名稱,而實際操作的檔案系統則是在 path 裡頭所設定的。
• read only:是否唯讀?
• public :是否讓所有可以登入的使用者看到這個項目?
• writable :是否可以寫入?這裡需要注意一下喔!那個 read only 與 writable 不是兩個蠻相似的設定值嗎?如果 writable 在這裡設定為 no ,亦即不可寫入,那跟 read only 不就互相抵觸了!那個才是正確的設定?答案是:最後出現的那個設定值為主要的設定!
• create mode 與 directory mode 都與權限有關的咯!
• valid users = 使用者,這個項目可以指定能夠進入到此資源的特定使用者。

變數特性說明:
為了簡化設定值,Samba 提供很多不同的變數給我們來使用,主要有底下這幾個變數:
%S:取代目前的設定項目值,所謂的『設定項目值』就是在 [分享] 裡面的內容如:
[homes]
valid users = %S
....
因為 valid users 是允許的登入者,設定為 %S 表示任何可登入的使用者都能夠登入的意思,今天如果 dmtsai 這個使用者登入之後,那個 [homes] 就會自動的變成了 [dmtsai] 了!這樣可以明白了嗎? %S 的用意就是在替換掉目前 [ ] 裡面的內容啦!
%m:代表 Client 端的 NetBIOS 主機名稱喔!
• %M:代表 Client 端的 Internet 主機名稱喔!就是 HOSTNAME。
• %L:代表 SAMBA 主機的 NetBIOS 主機名稱。
• %H:代表使用者的家目錄。
• %U:代表目前登入的使用者的使用者名稱
• %g:代表登入的使用者的群組名稱。
• %h:代表目前這部 SAMBA 主機的 HOSTNAME 喔!注意是 hostname 不是 NetBIOS name 喔!
• %I:代表 Client 的 IP 咯。
• %T:代表目前的日期與時間
Step3:添加用戶
#groupadd linux
#useradd –g linux –G linux linux
#smbpasswd -a linux
Step4:修改所共享文件目錄
#chmod 775 /u01/packages
#chown linux:linux /u01/packages

Step4:編輯/etc/samba/smb.conf
首先備份:
#cp /etc/samba/smb.conf
可以直接新建一個smb.conf文件,重新編輯
#> /etc/samba/smb.conf
#vi /etc/samba/smb.conf
添加如下內容:
[global]
workgroup = linux
netbios name =test227
server string = Linux Samba Server TestServer
security = share
[linux]
path = /u01/packages
writeable = yes
browseable = yes
valid user =linux
create mask =0664
directory mask =0775
guest ok = yes
說明:
可以根據不同部門的需求在一臺linux主機上面建立多個不同權限的共享目錄,此時就需要配置多組【linux】…或是類似的參數(同時最好建立多個用戶組和用戶,以示區別)
[global]这段是全局配置,是必段写的。其中有如下的几行;
workgroup 就是Windows中显示的工作组;在这里我设置的是linux;
netbios name 就是在Windows中显示出来的计算机名;
server string 就是Samba服务器说明,可以自己来定义;这个不是什么重要的;
security 这是验证和登录方式,这里我们用了share ;验证方式有好多种,这是其中一种;另外一种常用的是user的验证方式;如果用share呢,就是不用设置用户和密码了;
[linux] 这个在Windows中显示出来是共享的目录;
path = 可以设置要共享的目录放在哪里;
writeable 是否可写,这里我设置为可写;
browseable 是否可以浏览,可以;可以浏览意味着,我们在工作组下能看到共享文件夹。如果您不想显示出来,那就设置为 browseable=no
valid users = 使用者,這個項目可以指定能夠進入到此資源的特定使用者
guest ok 匿名用户以guest身份是登录,若設定為guest ok = yes則表示windows客戶端可以不用輸入密碼即可訪問該文件,若將該行屏蔽起來,則登錄該主機的共享文件時需要密碼認證;
create mask是用户创建文件时的权限掩码;对用户来可读可写,对用户组可读可写,对其它用户可读;
directory mask 是用来设置用户创建目录时的权限掩码,意思是对于用户和用户组可读可写,对其它用户可读可执行;

step5:重新啟動samba服務
# /etc/init.d/smb restart
Shutting down SMB services: [FAILED]
Shutting down NMB services: [FAILED]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
Step6:從windows訪問
在IE中輸入:\\10.161.32.227\


********
實例:
********
(1)目錄需求說明
/dbs/dive 这是管理员目录,负责管理其下所有目录;
/dbs/dive/dive01 是sir01的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写;
/dbs/dive/dive02 是sir02的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写;
/dbs/dive/dive03 是sir03的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写;
/dbs/dive/diveshare 所用用户(除了linuxsir有权限写入外)只读目录
/dbs/dive/dive0103rw 是用于sir01到sir03用户可读可写共用目录,但匿名用户不能读写;
/dbs/dive/diveallrw 用于所有用户(包括匿名用户)的可读可写;
(2)添加用戶
[root@test228 ~]# groupadd dive
[root@test228 ~]# groupadd dive01
[root@test228 ~]# groupadd dive02
[root@test228 ~]# groupadd dive03
[root@test228 ~]# groupadd dive0103
添加用戶,添加的这些用户都是虚拟用户,因为这些用户是不能通过SHELL登录系统的,如下shell類型,若需要其登錄可改變其shell即可
# useradd -g dive01 -G dive0103 -d /dbs/dive/dive01 -s /sbin/nologin dive01
# useradd -g dive02 -G dive0103 -d /dbs/dive/dive02 -s /sbin/nologin dive02
# useradd -g dive03 -G dive0103 -d /dbs/dive/dive03 -s /sbin/nologin dive03
# useradd -g dive -G dive,dive01,dive02,dive03 \
> -d /dbs/dive -s /sbin/nologin dive
給每個用戶設置密碼:使用命令:#smbpasswd –a username
提示:若使用smbpasswd給用戶新增密碼后,在/etc/samba文件夾下會自動生成一個密碼文件smbpasswd
(3)創建共享目錄:
[root@test228 ~]# mkdir -p /dbs/dive
[root@test228 ~]# cd /dbs/dive
[root@test228 dive]# mkdir dive01 dive02 dive03 diveshare dive0103rw diveallrw
[root@test228 dive]# ls
dive01 dive0103rw dive02 dive03 diveallrw diveshare
(4)配置目錄權限:
[root@test228 dive]# chmod 755 /dbs/dive
[root@test228 dive]# chown dive:dive /dbs/dive
[root@test228 dive]# cd /dbs/dive
[root@test228 dive]# chmod 2770 dive*
[root@test228 dive]# chown dive01:dive dive01
[root@test228 dive]# chown dive02:dive dive02
[root@test228 dive]# chown dive03:dive dive03
[root@test228 dive]# chown dive:dive0103 dive0103rw
[root@test228 dive]# chown dive:dive diveshare
[root@test228 dive]# chmod 755 diveshare
[root@test228 dive]# chown dive:dive diveallrw
[root@test228 dive]# chmod 3777 diveallrw
(5)修改配置文件:
#cp smb.conf smb.conf.bak
#> smb.conf
注意:修改/etc/samba/smb.conf后,不要忘记重启smbd和nmbd服务器
# /usr/sbin/smbd
# /usr/sbin/nmbd
確認服務器已開啟:
# pgrep smbd
# pgrep nmbd
修改配置文件如下命令:
#vi /etc/samba/smb.conf
添加如下(只添加藍色部分代碼):
[global]
workgroup = linux
netbios name = dive
server string = Linux Samba Test Server
security = share # 這裡才是與密碼有關的設定項目哩!

# 與語系方面有關的設定項目
unix charset = utf8
display charset = utf8
dos charset = cp950

# 與登錄檔有關的設定項目,注意變數 (%m)
log file = /var/log/samba/%m.log
max log size = 50
# 其他預設存在的項目(以下是可選的)
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
template shell = /bin/false
winbind use default domain = no

# 與密碼有關的設定項目,包括密碼檔案所在與加密與否
security = dive
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd

# 與 NetBIOS name 名稱解析有關的設定
name resolve order = lmhosts bcast host

# 跟安全有關,一般只設定hosts allow,表示允許訪問的IP,還可以使用hosts deny來拒絕訪問(可選項)
hosts allow = 127. 192.168.1.11 192.168.1.21
smb ports = 139


[dive]
comment = linuxdiveadmin
path = /dbs/dive
create mask = 0664
directory mask = 0775
valid users = dive
browseable = yes
[diveshare]
path = /dbs/dive/diveshare
writeable = yes
browseable = yes
guest ok = yes
[diveallrw]
path = /dbs/dive/diveallrw
writeable = yes
browseable = yes
guest ok = yes
[dive0104rw]
comment = dive0103rw
path = /dbs/dive/dive0103rw
create mask = 0664
directory mask = 0775
writeable = yes
valid users = dive,@dive0103
browseable = yes
[dive01]
comment = dive01
path = /dbs/dive/dive01
create mask = 0664
directory mask = 0775
writeable = yes
valid users = dive01,@dive
browseable = yes
[dive02]
comment = dive02
path = /dbs/dive/dive02
create mask = 0664
directory mask = 0775
writeable = yes
valid users = dive02,@dive
browseable = yes
[dive03]
comment = dive03
path = /dbs/dive/dive03
create mask = 0664
directory mask = 0775
writeable = yes
valid users = dive03,@dive
browseable = yes

說明:
伺服器端語言設定選項有三個(/etc/samba/smb.conf中預設沒有這三個選項,需自行加入[global]選項,一般我們沒有加入):
display charset = UTF8
dos charset = cp950
unix charset = UTF8

display charset = UTF8
輸出訊息到 stdout,stderr (也就是在伺服器自己的銀幕上顯示訊息)時所用的編碼。這邊應該是指輸出訊息,通常設定成與底下的unix charset選項相同。

dos charset = cp950
DOS客戶端連接到伺服器時,所使用的編碼。測試結果不管是Unix或windows都使用這個編碼設定,在設定該伺服器給中文Windows存取時,應使用這個新的參數,在smb.conf裡面沒有 950 這種參數,一定是 "cp950",google上面有些文章寫950,少了cp 兩個字元,那是不正確的,在 testparm 檢查時會失敗。

unix charset = UTF8
本機Linux檔案系統所使用的編碼方式。Samba必須要知道本機的編碼方式,才能正確的轉換要送給客戶端的訊息,這個選項在一般情況下,應與您 Linux 伺服器系統編碼相同,也就是 /etc/sysconfig/i18n內所設定的編碼方式。

Client 端掛載的語言選項也有三個(使用 mount 或 smbmount 指令掛載時,加在 -o 選項後面):
iocharset = UTF8
codepage = cp950
unicode

iocharset = UTF8 指定本機電腦所使用的編碼方式。這個選項在一般情況下,應與您 Linux 客戶端主機所使用的編碼方式相同,也就是 /etc/sysconfig/i18n 內所設定的編碼方式。
codepage = cp950 指定遠端伺服器送出訊息的編碼方式。
unicode 使用 unicode 來與伺服器通訊。

詳細資料及設定請參考:


(6)配置文件/etc/samba/lmhosts的設定
vi /etc/samba/lmhosts
127.0.0.1 localhost
192.168.1.254 vbirdserver
192.168.1.21 vbirdcpu2
192.168.1.11 vbirdcpu1
# 這個檔案的內容很簡單,與 /etc/hosts 很類似,左邊是 IP 右邊是主機名稱。
# 只是主機名稱必須符合 NetBIOS name 的標準,包括:
# 主機名稱不要超過 15 個字元,不要含有特殊字元等等。
# 亦可使用 man lmhosts 來查閱喔!



(7)啟動samba服務
[root@test228 samba]# /etc/init.d/smb restart
Shutting down SMB services: [FAILED]
Shutting down NMB services: [FAILED]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
并確認以下端口已經開放:
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
microsoft-ds 445/tcp
microsoft-ds 445/udp

(8)從windows訪問
在IE中輸入:\\10.161.32.228\
阅读(272) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~