SAMBA 服務

在 Unix-like 系統中,檔案分享可用 NFS,如果要跨平台和 Windows 系統作檔案分享,就可以使用 SAMBA 服務。

SAMBA 是 System V 管理服務,由 /etc/init.d/ 中的腳本來啟動或關閉,要使用 SAMBA 要安裝 samba、samba-common、samba-client 三支套件,它使用的埠是 445(TCP),SAMBA 主要的兩個 Daemon 是 /usr/sbin/smbd 和 /usr/sbin/nmbd:
smbd:對使用者認證和授權,負責電腦資源的分享,模擬 Windows 系統中的 SMB。
nmbd:提供電腦名稱的解析及瀏覽,模擬 Windows 系統中的 NetBIOS。

設定 SAMBA

Red Hat 提供了註解完整的 /etc/samba/smb.conf 檔案,另外也提供了圖形介面的設定工具 system-config-samba 供管理者來設定 SAMBA:

system-config-samba 設定

system-config-samba 設定

SAMBA 新增共享

SAMBA 新增共享

設定 smb.conf

/etc/samba/smb.conf 以 [  ] 符號來分成幾個不同區塊,其中 # 及 ; 都是註解符號:
[global]:一般及全域性的設定內容
[homes]:使用者家目錄的設定
[printers]:分享印表機的設定
[MY_SETTINGS]:自訂的分享設定
在其他區段的設定,會覆蓋 [global] 中的設定。

[global]

#工作群組名稱
workgroup  =  MY_GROUP
#主機名稱,預設為本機 hostname 的第一部份,也可以自訂
netbios  name  =  MY_COMPUTER
#在網路芳鄰中的註解內容
server  string  =  My  SAMBA  Server
#模擬的認證類型,有 user, share, server, domain, ads
security  =  user
#如果使用  security  =  server  或  security  =  domain  要補上下列設定
#password  server  =  HOST_1 HOST_2  HOST_3
#允許存取的客戶端

hosts  allow  =  192.168.0.  192.168.1.  127.
printcap  name  =  /etc/printcap  #印表機設定檔
load  printers  =  yes
printing  =  cups
cups  options  =  raw  #使用 raw printer,即客戶端送來的資料直接轉送到印表機
#記錄檔的存放路徑

log  file  =  /var/log/samba/%m.log  #%m 代表 smbd 及 nmbd 的記錄檔 (2個檔案)
#記錄檔的大小,0 代表不限制、100 代表 100K

max  log  size  =  100
encrypt  passwords  =  yes  #驗證時密碼傳輸是否要加密
smb  passwd  file  =  /etc/samba/smbpasswd  #SAMBA Server 帳號資料庫
interfaces  =  192.168.0.0/24  #SAMBA Server 的服務要提供在那一張網卡上
wins  support  =  yes  #是否模擬成 WINS Server
wins  server  =  xxx.xxx.xxx.xxx  #網路上已存在的 WINS Server
case  sensitive  =  no  #檔名是否區分大小寫

==============================

目錄分享設定

每個分享設定都要建立獨立的 [  ] 區段,例如要將 Joe 的家目錄分享出來:
[joe-home]
comment  =  Joe’s  Home  Directory
#分享資源的註解
path  =  /home/joe #實際分享的路徑
public  =  no #是否公開給所有人,等同於  guest  ok  =  no
writable  =  no #是否可以寫入,等同於  read  only  =  yes
printable  =  no #是否允許列印
write  list  =  kevin,david,@devel,@admin #可以寫入的有 kevin、david、devel 群組、admin 群組

列印分享設定

預設的狀況下,在 /etc/cups/printers.conf 中定義的印表機都會分享出來給合法使用者,可在 [printers] 區段作全域設定,或在印表機中作個別設定。

[printers]
comment  =  All  the  Printers
path  =  /var/spool/samba
browsable  =  no
public  =  yes
guest  ok  =  yes
writable  =  no
printable  =  yes

[3rdfloor]
comment  =  Research  Printer  (3rd  Floor  Laser  Printer)
printer  =  3rdfloor
valid  users  =  bob  jane  joe  mary
path  =  /var/spool/3rdfloor
public  =  no
writable  =  no
printable  =  yes

==============================

SAMBA 使用者

SAMBA 的使用者資訊儲存在 /etc/samba/passdb.tdb 中,要新增使用者之前,使用者要先存在於 /etc/passwd 中,再用 smbpasswd  -a  USER_NAME 來新增使用者,用 smbpasswd  USER_NAME 來變更使用者密碼。

# smbpasswd  -a  june (系統沒有 june)
New SMB password:
Retype new SMB password:
Failed to modify password entry for user june

# smbpasswd  -a  kevin (系統有 kevin)
New SMB password:
Retype new SMB password:
Added user kevin.

==============================

SAMBA 測試

要測試 SAMBA Server 的設定檔 /etc/samba/smb.conf 是否正確,可使用 testparm 指令來測試:
# testparm (不帶任何參數會列出所有設定內容,有誤錯會顯示)
Load smb config files from /etc/samba/smb.conf
Unknown parameter encountered: “this is test”
Ignoring unknown parameter “this is test”

Processing section “[homes]”
Processing section “[printers]”
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
[global]
workgroup = MYGROUP
server string = Samba Server
username map = /etc/samba/smbusers
log file = /var/log/samba/%m.log
max log size = 50
dns proxy = No
hosts allow = 192.168.0.2
(只允許這個 IP 使用)
cups options = raw
[homes]
comment = Home Directories
read only = No
browseable = No
[printers]
comment = All Printers
path = /usr/spool/samba
printable = Yes
browseable = No

測試連線:

# testparm  /etc/samba/smb.conf  localhost  192.168.0.3 (使用 /etc/samba/smb.conf 設定檔測試 192.168.0.3 這台用戶可否連線到 localhost)
Load smb config files from /etc/samba/smb.conf
Unknown parameter encountered: “this is test”
Ignoring unknown parameter “this is test”
Processing section “[homes]”
Processing section “[printers]”
Loaded services file OK.
Server role: ROLE_STANDALONE
Deny connection from localhost (192.168.0.3) to homes
Deny connection from localhost (192.168.0.3) to printers

==============================

smbclient

使用 smbclient 可以瀏覽分享的內容:
# smbclient  -L  192.168.0.2 (暱名登入)
Password: (不用輸入密碼)
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.23c-2]
Sharename       Type      Comment
———       —-      ——-
sales           Disk      This is Sales Share Directory
IPC$            IPC       IPC Service (Samba Server)
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.23c-2]
Server               Comment
———            ——-
RHEL5                Samba Server
Workgroup            Master
———            ——-
MYGROUP              RHEL5

以使用者的身份登入:
# smbclient  -L  192.168.0.2  -U  kevin (以 kevin 的身份登入)
Password: (輸入以 smbpasswd 建立的 kevin 的密碼)
Domain=[RHEL5] OS=[Unix] Server=[Samba 3.0.23c-2]
Sharename       Type      Comment
———       —-      ——-
sales           Disk      This is Sales Share Directory
IPC$            IPC       IPC Service (Samba Server)
kevin           Disk      Home Directories
Domain=[RHEL5] OS=[Unix] Server=[Samba 3.0.23c-2]
Server               Comment
———            ——-
Workgroup            Master
———            ——-
MYGROUP              RHEL5

以使用者身份登入自己的家目錄:
# smbclient  //192.168.0.2/kevin  -U  kevin (使用 //HOST_NAME/SHARE_DIR 的 UNC 路徑方式來表示分享路徑)
Password: (輸入密碼)
Domain=[RHEL5] OS=[Unix] Server=[Samba 3.0.23c-2]
smb: \> ls
(登入後以 ftp 命令模式使用)
.                                   D        0  Tue Apr 21 23:36:23 2009
..                                  D        0  Sun Apr  5 23:31:35 2009
.bash_profile                       H      176  Sun Apr  5 22:06:16 2009
.bash_history                       H     1724  Tue Apr 21 23:36:48 2009
.bash_logout                        H       24  Sun Apr  5 22:06:16 2009
.bashrc                             H      124  Sun Apr  5 22:06:16 2009
kevin                                        0  Tue Apr 21 23:36:23 2009
.kde                               DH        0  Sun Apr  5 22:06:16 2009
.zshrc                              H      658  Sun Apr  5 22:06:16 2009
.emacs                              H      515  Sun Apr  5 22:06:16 2009
35584 blocks of size 524288. 22003 blocks available
smb: \> mkdir test
(建立 test 目錄)
smb: \> ls
.                                   D        0  Wed Apr 22 00:00:05 2009
..                                  D        0  Sun Apr  5 23:31:35 2009
.bash_profile                       H      176  Sun Apr  5 22:06:16 2009
.bash_history                       H     1724  Tue Apr 21 23:36:48 2009
.bash_logout                        H       24  Sun Apr  5 22:06:16 2009
.bashrc                             H      124  Sun Apr  5 22:06:16 2009
kevin                                        0  Tue Apr 21 23:36:23 2009
.kde                               DH        0  Sun Apr  5 22:06:16 2009
.zshrc                              H      658  Sun Apr  5 22:06:16 2009
.emacs                              H      515  Sun Apr  5 22:06:16 2009
test                                D        0  Wed Apr 22 00:00:05 2009
35584 blocks of size 524288. 22003 blocks available
smb: \> exit

可用 USER_NAME%PASSWORD 方式避免出現密碼對話:
# smbclient  //192.168.0.2/kevin  -U  ‘kevin%12345’
Domain=[RHEL5] OS=[Unix] Server=[Samba 3.0.23c-2]
smb: \> ls
.                                   D        0  Wed Apr 22 00:00:05 2009
..                                  D        0  Sun Apr  5 23:31:35 2009
.bash_profile                       H      176  Sun Apr  5 22:06:16 2009
.bash_history                       H     1724  Tue Apr 21 23:36:48 2009
.bash_logout                        H       24  Sun Apr  5 22:06:16 2009
.bashrc                             H      124  Sun Apr  5 22:06:16 2009
kevin                                        0  Tue Apr 21 23:36:23 2009
.kde                               DH        0  Sun Apr  5 22:06:16 2009
.zshrc                              H      658  Sun Apr  5 22:06:16 2009
.emacs                              H      515  Sun Apr  5 22:06:16 2009
test                                D        0  Wed Apr 22 00:00:05 2009
35584 blocks of size 524288. 22003 blocks available
smb: \> exit

==============================

掛載網路芳鄰磁碟機

可以用 mount 來掛載網路芳鄰分享出來的磁碟機,網路芳鄰分享出來的檔案系統是 cifs (Common Internet File System, CIFS),掛載語法:
# mount  -t  cifs  //SERVER_IP/SHARE_NAME /MOUNT_POINT -o  user=USERNAME,dom=DOMAIN,uid=NUMBER,file_mode=644

例:
# mount  -t  cifs  -o  user=john //192.168.0.2/sales  /mnt/smb
Password: (輸入密碼)
# df  -h
檔案系統              容量  已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
18G  6.0G   11G  36% /
/dev/sda1              99M   22M   72M  24% /boot
tmpfs                 760M     0  760M   0% /dev/shm
//192.168.0.2/sales    18G  6.9G   11G  40% /mnt/smb

除了手動掛載外,也可以將之寫入 /etc/fstab 中,輸入密碼就製作一個 ASCII 文字檔來驗證:
# df  -h
檔案系統              容量  已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
18G  6.0G   11G  36% /
/dev/sda1              99M   22M   72M  24% /boot
tmpfs                 760M     0  760M   0% /dev/shm

# vi  /etc/samba/myPassword.txt (先製作一個帳號密碼檔)
# chmod  600  /etc/samba/myPassword.txt (改變權限只給 root 可以使用)
# cat  /etc/samba/myPassword.txt (帳號密碼檔內容)
username=john
password=12345

# echo  “//192.168.0.2/sales  /mnt/smb  cifs  credentials=/etc/samba/myPassword.txt  0  0”  >>  /etc/fstab (在 /etc/fstab 中加入這一行)
# mount  -a (掛載)
# df  -h
檔案系統              容量  已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
18G  6.0G   11G  36% /
/dev/sda1              99M   22M   72M  24% /boot
tmpfs                 760M     0  760M   0% /dev/shm
//192.168.0.2/sales    18G  6.9G   11G  40% /mnt/smb
(完成掛載)