在 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:
設定 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 (完成掛載)