tid=66566&1、安裝及設定+ e; N' T h, Q
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。6 \* J- f$ a* `# j3 }; V- x
+ t$ G. M0 |; r
2、Samba Server
; n) H/ n: v3 N- }$ f步驟1.安裝 samba 套件
3 I9 `1 a, N- S8 M- ]( Z- m; @0 h( r! R% F8 l# P# B8 r7 P
利用 yum 指令來安裝 samba 套件。$ q" W) _* w( p
#yum -y install samba //安裝 samba 套件
3 C: W) z. E- Q n1 @, M
: l6 D5 O0 a4 `9 c***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: E% c5 X& S5 y$ E& X
#yum install samba-client samba-common cifs-utils/ b+ f0 h" S3 ?& n* g
% h: g2 i3 x6 ^5 b4 C
步驟2.修改 samba 設定檔 (smb.conf)
[6 C# U5 K2 K0 d q( H/ u5 Z& D! ]# N& ~& H2 c7 t# J8 [: m
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。' O5 L0 o0 m1 D% g
#vi /etc/samba/smb.conf //修改 samba 設定檔
5 m9 U. ~& j9 g3 o
% @1 {- P1 B. S5 f0 E global //通用設定 n. w% R4 x3 ? m6 o. R: l
1 z7 W6 ]. Q8 C0 X, _ netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱: b* E' m4 X5 O& ^3 g$ `5 I
! K9 F, E! K/ z0 }9 s
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
+ b: {2 T" z' R5 c% U
# n) y$ q) e+ i5 `. z hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源9 D* ]2 _% J6 T# `0 k
. Z3 W. h, Z6 B" {" T
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
+ D5 `2 U+ l' q) ^
# L8 ~- n& z0 |3 |5 b security = user //安全等級user需在Samba主機上擁有帳號者才可登入8 X" U4 O0 w# t* j0 f. e) j
! ^0 c1 V# m7 h9 X
encrypt passwords = yes //是否對密碼部份進行加密
" E$ U, _% V$ [; C" ]9 k/ u7 M9 }8 Q/ p
display charset = utf8 //Samba 上所顯示的編碼9 U$ s$ y6 N$ n, h
9 |1 B9 O3 i' v" u# U# V
unix charset = utf8 //Linux 上所顯示的編碼; B. t1 s @- u3 K
3 W/ T9 q. `8 C- ?' A, }# m
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
6 ?- T( ]$ P4 d# f9 A* s1 t; C0 I
2 L8 o6 ~( X- z0 |- G8 i home //分享設定,屆時顯示分享資料夾的名稱
+ c/ E$ W i, g, P: j. ~- s, H' f/ i- |8 n8 A! U( t
comment = Weithenn Samba Files Shares //分享資料夾的註解
$ u4 R" T7 I7 S5 O. r) v }% S! |$ @2 M* ]+ g9 a5 j% d
path = /home //分享路徑
2 w1 S8 M- ], U: f) ~
\& {7 o- Y4 h& R: C( o y valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
5 ~% v& H" s8 i. A; [# {2 h0 J, o. t. @; ~& a
public = yes //允許使用者登入後可看到此分享資料夾5 _- a2 p6 ~8 Y, f, f
$ l; V7 |# e8 V
writable = yes //允許寫入6 Y7 M) p! u( G, ]4 v k
. U r7 }; `& r# M2 u e- F* n
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)' `2 B+ h7 ?% r& T% P
0 I: `& \5 w# {& ^8 N
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
+ r% d! x0 o' e7 K4 J; w
2 B" V w/ v- E U: o( d% @& y8 m; O ^
步驟3.建立 samba 帳號/ J2 J; D3 B- V, d7 `
I& q# y' Z6 P y! [, a
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。 }( g. w L: T! }
#smbpasswd -a user1 //建立 samba 使用者帳號 user1- o; I' \ m: C/ h0 N* O' d& _, f
6 }' o6 h" c1 k9 E* g! d
New SMB password: //輸入使用者帳號 user1 的 samba 密碼2 F! {; T8 [) E( X
9 ~/ `/ ~4 \) W1 C
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼9 b: K, D& @9 M! k
* ~0 `/ A; O5 t% {
Added user user1. //新增 samba 使用者帳號 user1 成功
. n* S7 y$ p- p2 ]
5 L0 o M( ?/ l1 Y新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
4 p1 l+ J+ z6 p# u0 v v#cat /etc/samba/smbpasswd 或者
* X' e* l0 w+ U( ?#cat /var/lib/samba/private/smbpasswd
2 z3 O' w9 W" ]) z user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :# D" I' s6 j: h8 L
8 r0 l1 _: r; ]$ i0 e) Y! f
步驟4.啟動 samba 服務* K" P. I; [- i' h* Z( c5 K
. G8 j% N) w( k在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
2 s b. T0 ? s( Y4 ~. A#chkconfig smb on3 ?: u$ m! N& T
$ f Z* u! }$ a7 j9 ~% e) i
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。, N, G7 }- b4 Y2 ?
#chkconfig --list |grep smb
1 I' p& {/ _5 G; p' m" d) R
7 Z y, v3 G# n) A+ t( m+ R0 `( U* L4 l smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off, B3 O: x$ b" x5 { \7 c
9 [- Y* ?# @' n( W* E" r; Z8 d
完成上述設定後便可以啟動 smb 服務( D6 {' P% s# Y& q8 \ H
#/etc/rc.d/init.d/smb start
6 v8 R$ U/ ~* Q
2 Y7 }. o+ Z C. H$ S; A Starting SMB services: [OK]
8 V1 ?1 r2 T0 w. M
S' z( F; I4 r1 E Starting NMB services: [OK] ( \3 z" P4 u: {! e3 ?2 b1 V, Q# ~
. t* w) g5 e) m! b檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。' q) m* b; a8 p7 g
#netstat -tnl* {# U) D( a' s3 |4 V: p
# T$ e) R' {% Z+ Z Active Internet connections (only servers)2 Q) s" t1 G+ i4 F0 i2 u
6 c# O: {- }8 t1 d( N1 j Proto Recv-Q Send-Q Local Address Foreign Address State
( |" ]$ S# Z! c; j( j3 N3 I- U
# T0 `( w2 r5 }8 E9 t0 z tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN& _+ o, }' F, \4 m: i3 ?# ^
% R; o: f! E+ ^/ h! C3 } \2 Z
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN: M' q# h$ H( k; `
0 i* `+ Q: F& Y: {1 \1 U
3、Samba Client E1 ~, Z4 B; G- r$ x8 h; l2 v
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。! c) g" A; d) c( v# ^
$ D: B/ o* m. q! D% K+ ]; q
Windows Client2 M; e. j" g; _# I7 h- R! Q4 h
# u& ~# B1 U# `% c: P上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:/ L, Y7 Y6 J( @- _- p! w' {
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
2 ]! \" N9 o+ S驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
" P. s6 @; N- c1 m9 L% Q6 s. ?0 w& d- `9 v5 s
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
% R6 O8 p8 t% \+ Q" o* d; Y' H+ n& o, t/ C# a; Y
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
! B A3 e4 N/ G net use w: \\Samba_Server_IP\home {1 _4 H d* w" h
1 `. F8 o! @ Q1 ?5 A: o$ u
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)5 O% v& p. d2 K: ?; M% S; k& L
net use w: \\Samba_Server_IP\home /user:user1 1234560 |0 L: |6 e' E: P3 R
E5 h6 B* ]) K, [CentOS Client8 w4 A9 I) z5 ^5 G/ G2 x* n3 c
* j, b7 p6 a/ Z* |2 ]若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。8 r9 \6 G1 W) T# B1 Z6 u; U1 B
* h7 C9 s6 G* l4 i [ N, ?
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
: T; }0 K2 H) hmount.cifs //Samba_Server_IP/home /mnt/home -o5 v9 O4 g& s! {3 ^( X
1 x8 D8 `+ T R+ ]& F& |方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)" J) L5 |: s4 q; [1 K
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
- j }$ ?0 y. e T: q- g% H# [8 a+ q! W2 P
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。/ k6 B# Z* T$ t
umount.cifs /mnt/home或
8 |/ j) E/ D" B% }umount /mnt/home
+ T0 |/ \4 M5 @/ c' [" ]; m; e' R k. }. N
4、CentOS 存取 Windows 分享資源
) n. ^ x0 G& C9 H3 D$ uSamba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
% O9 y- W0 o" y6 x' W2 ^
2 e# y$ x' C* n: m6 z5 |Windows 電腦名稱: user1-XP# v& M1 I% X% B* g, M
分享資料夾名稱: Shares# j, X% j/ j- C
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)5 L% _* g3 p4 B. J
可存取 Windows 分享資料夾的使用者密碼: 123456
" K$ F$ S3 U% a; R$ j7 Q
* @! r3 I( f6 f) o5 m0 `- h' @: pCentOS 掛載至本地端檔案系統: /mnt/shares
6 }% T" z O; y7 m0 qCentOS 帳號密碼檔: /home/user1/secret.txt7 M2 q( R* ]' Z8 q8 n
安全性權限設定: chmod 600 secret.txt
( m D/ m' @) Y" a# E; d, \, Z; r/ p9 Q0 Y( U. J' d" Q1 H
了解後我們修改檔案系統設定檔 /etc/fstab。2 A: u. v1 p" m5 o6 Z( a! f+ v
#vi /etc/fstab
4 `, k( F/ B* d" R
; w7 S& t/ H$ G) E2 A. T LABEL=/1 / ext3 defaults 1 1
6 e- |9 Q$ [* n2 Q# x% u. b4 ^/ O6 @4 Q! y9 s) H$ B$ O4 h
LABEL=/home1 /home ext3 defaults 1 22 Q, X$ H( l7 S I g
( X" K' h/ a3 K LABEL=/tmp1 /tmp ext3 defaults 1 2) C4 S1 c. P8 j* j
3 ~9 a/ i( i8 w' c
LABEL=/usr1 /usr ext3 defaults 1 2, p0 g6 g8 |" E! L0 G! T) \
, b. l$ T, n1 {& ~
LABEL=/var1 /var ext3 defaults 1 2
) e: ], V( V0 J" f# g* B+ j7 [ b+ b# \0 y% c& X0 m
tmpfs /dev/shm tmpfs defaults 0 0! }( q$ z' {. [) F, b2 M
2 ]. @# _9 m8 E: W1 O; n
devpts /dev/pts devpts gid=5,mode=620 0 0
& L) t6 j# n0 v, i0 C) M5 n: {; O% m6 ?) f* e; f+ ]- Q
sysfs /sys sysfs defaults 0 00 `5 C2 N0 p2 j4 Z8 j1 p4 F
% X# ~% h y. H7 A9 i6 X2 L proc /proc proc defaults 0 0
" U& W; ]2 E# ?3 n+ N5 V, \7 u# x- M1 w9 Q" {
LABEL=SWAP-sda6 swap swap defaults 0 0
4 v& q* n3 B" j% h
# d& t# f( b1 l& O ] //user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行1 j$ J- x2 t" P/ [0 m' c4 a
7 x7 X" G' O- l" ?
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:; L2 \8 v! p5 ^& t ^- Z6 n0 P/ V
#vi /home/user1/secret.txt, q2 D U0 O* P8 g& H7 Y
# [; m* ]6 y, O" T username=user1
! y( v3 i0 b; D' k) ?
4 h$ y. V" r4 X2 J password=123456
: O! o3 k$ I& a' H( P" O1 Z+ W. Y; L- J0 O
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。" n2 a* ~# Z7 p$ |6 X! z
#mount -a //讀取 /etc/fstab 更新0 ~8 a6 i! T% ~; X/ Y3 j; D
6 F4 |, n4 m: [2 S; c
#df -h //檢查是否成功存取 Windows 資源2 v/ v) H! r$ _; d: t! R! i
2 @2 }# v, T" O
Filesystem Size Used Avail Use% Mounted on% @6 l, [) j# x( v. [: X' c
9 Y: s, w' `& C& U! ]
/dev/sda1 9.7G 2.3G 6.9G 25% /, T) j( |6 z& P& B/ b1 u
8 o/ I6 \. _1 M4 B) _$ V /dev/sda7 414G 211G 183G 54% /home6 o( J; e. q: r7 D: V5 ?
6 b% q5 J% a8 K% Z4 w5 X /dev/sda5 4.9G 139M 4.5G 3% /tmp
/ m! Y0 k/ s- C- M, {3 Y) R$ E# @2 Q) O/ y) k: k' B
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
( v2 ~4 y0 ~7 l! E& E2 r7 @
1 s( [9 D" J- @4 Z8 ~ /dev/sda2 9.7G 255M 9.0G 3% /var
$ b, i. V/ H7 Y3 ]- n) [8 Z; p S5 I A
tmpfs 2.0G 0 2.0G 0% /dev/shm
4 C3 x2 w4 B, p: e; Z2 }3 c8 @! u- ]# l
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功; i7 A$ J* Y+ t# Z
' M0 r3 a& _! F: f5 M/ R
[Troubleshooting]; }0 i6 I6 f4 l6 z! {+ x) h
從client連到server端時出現error: # X0 K$ T" `4 e! v$ @
samba mount error(110): Connection timed out8 W* C7 @8 ?' f. k, r+ W
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
/ {" @. A3 F4 Z$ O, w% d% J7 N9 B9 ~8 v+ d* b
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
1 K3 ~& M# `9 |4 r @5 Z! l j1 L
6 T! V' l. L' Z) r4 S4 c; ~用 yum 查一下有什麼 sshfs 相關的套件:
( m/ P0 O. n0 i" J, _- h' p# yum search sshfs
# j- o) j: D" J* x0 y. V=====================================================================
1 `. e* `: |& p( _5 y& b K7 \fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH: G: J j' {" v& m" s
安裝sshfs:) Y2 c# R4 n1 e6 [+ F" r
#yum install fuse-sshfs
7 U. K. C4 k) ]/ y h8 t建立掛載目錄:0 I/ i& e8 r2 n/ T5 p8 Z
#mkdir /mnt/temp
8 {: v0 ?+ u$ i用sshfs 掛載遠端的目錄:# S1 a3 B. U" t3 @6 A
#sshfs -p 22 root@192.168.1.2:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄# K+ h& C+ S, I x: n" ^7 v' H; ]
root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼7 ]2 [0 _% D* O
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的0 Z( d6 x. t2 Z) f1 i c, g1 n
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便8 f) y: ]6 D$ f2 p; E! [
2 h: h- ?9 X: v
帶上密碼而不用手動輸入密碼
6 e9 S* h% L) S0 {#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp- P0 c7 }1 C( O- x3 {9 r X
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
; a5 {; A9 A& S& D6 r. H* o, Y% }$ osshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/ /mnt/temp
; t+ C3 j" x. O' T$ s/ g) h5 q- X& Q7 A& f; ^' N; V
以一般帳號(非root)掛載時,出現error :
( ]: J$ y& L. S7 H' Bfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
% e/ \" ?+ v T4 ? R. j9 cls -l /bin/fusermount/ X7 Q/ `$ R8 ]( Z) ]/ Z
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
- L; H7 b* g. f. F故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse/ s/ F) ^5 `5 o; a: y% |# C+ T
8 f: J* F s7 U* s" B
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux). J: A5 g+ s$ C9 s Q
. Y6 N) A* d3 Z, \0 V( w. P8 X
- \# Y9 i# A `- w7 h+ f+ g& m |