1、安裝及設定
+ d/ d/ |: U; |分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
: n2 P- v, F) \4 h a' V v" }5 P1 O$ y% f- y+ `
2、Samba Server
1 ~. y% V2 |' v0 D步驟1.安裝 samba 套件
4 J7 K1 O; }# ~* {' F2 T2 ~2 Y
4 m" v9 g0 G( D, Z0 L9 r利用 yum 指令來安裝 samba 套件。; w% d. r$ D% f; j6 e5 O/ U5 }7 Q, p
#yum -y install samba //安裝 samba 套件
5 Y1 _: D: \+ j& h" a' m! {0 J* t+ _" C" D0 s& Q0 u
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
$ z1 O" Y1 n9 L; C#yum install samba-client samba-common cifs-utils
* r2 S- Y& r! `/ T' C/ d5 o0 {
( |& l& O. C+ B" u* [; g步驟2.修改 samba 設定檔 (smb.conf)7 H5 k( c0 N# s7 b, D
& b6 B) {1 q3 I' N G" D
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。* r- q; u+ z- _% ]5 r9 @$ N4 [) r) o
#vi /etc/samba/smb.conf //修改 samba 設定檔6 u' u& U- p/ E
9 m8 h, ]2 N5 T ?% z& O+ _ global //通用設定. K1 e* c* q6 g# z
* L. ]3 Q, V# ~( L% d- `( b netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱 h: p+ J3 u) K/ m" y1 r1 n
+ Q% h. T; {3 k workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
, @. A" Q" Q& u3 l1 T: Y7 r/ T6 A8 H) Y, v) ]3 O3 U0 X
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源, y/ g1 c+ P, t
+ f) L9 g- u. d hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
G& X+ ]# i- D1 u, p* J" I3 e9 S! U) F( E
security = user //安全等級user需在Samba主機上擁有帳號者才可登入" @8 R% u7 u ~+ d$ D! h+ }" ~4 U
* k6 a2 ~* b& d1 [: a" {, o
encrypt passwords = yes //是否對密碼部份進行加密
( m) T, I" G- h" s1 m; v4 {+ N/ W. O/ r
display charset = utf8 //Samba 上所顯示的編碼1 ^) A( K F' s$ T W/ x
+ p3 F3 @+ x1 i ]% |) _ unix charset = utf8 //Linux 上所顯示的編碼
: {" ?& ` X$ x# T7 x2 H; T8 Y6 w& U5 u1 k+ k
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
( d* R/ V5 M. V" B" ^- U& g( G0 W0 `+ o
home //分享設定,屆時顯示分享資料夾的名稱
' h6 X4 H# S) e) m
. b' J8 p0 i& Z( A comment = Weithenn Samba Files Shares //分享資料夾的註解
, f( k# k. _* D7 }; M: o$ l6 y1 w6 Q4 i |) N
path = /home //分享路徑
4 }& B/ [9 d$ y6 n
& H6 m" }# Z2 b7 O, o+ e# t* k! ~ valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
% @5 }2 U! ~7 u1 c2 l1 E; L0 B
1 C! Y$ K5 M: t5 v1 R2 v8 o public = yes //允許使用者登入後可看到此分享資料夾' G" B/ @/ ]( o9 k& L5 M y
0 o9 n- H8 M2 M5 {2 ? writable = yes //允許寫入
8 E2 e- f4 \" v4 @) `
}% K! b9 r$ b m7 y! }/ [1 F create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
0 Z: A* ]1 @. Z, ^
5 Q; a6 S3 |1 {+ @7 J directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
0 S. I9 s" s- j. q
( n! l$ J- C3 D3 O* f- u- R7 i/ [7 @" J& o1 C+ a) R$ |
步驟3.建立 samba 帳號
' _% u/ I. N1 N% B9 K7 @
& O ~* r& h& L: i" L$ j$ Y/ A設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
1 g6 Z3 J, K& F5 O+ o( x+ V2 Y#smbpasswd -a user1 //建立 samba 使用者帳號 user11 y, m; D- a' O9 @' i
' b0 j8 B# K+ J New SMB password: //輸入使用者帳號 user1 的 samba 密碼$ b4 ?+ C b8 P% W
# E8 ^6 N8 ~4 ?, b M" c
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
2 O" M/ I- B& r8 j; t; h4 n' \/ J; Y, S% }$ p! Z
Added user user1. //新增 samba 使用者帳號 user1 成功
( p, Z. J3 T6 b1 [; |
" {3 y- \% B5 [& g1 N, } O3 x新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
3 R7 L/ x4 X0 |' B7 {#cat /etc/samba/smbpasswd 或者5 Q( v# j& M! x) `( x
#cat /var/lib/samba/private/smbpasswd# W7 P, s! N, Z- ^: g4 m* N
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
8 m4 t! M2 V/ U& u! \) E+ ]1 O6 L0 @* B1 B3 Q& M
步驟4.啟動 samba 服務9 K& K2 g4 ?! w1 s
9 v2 q* J6 J# k
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。6 m) l* B) R0 K0 s- P! _8 N
#chkconfig smb on) I; F' e7 h$ P1 ]% ]. W
8 {9 g: C+ I4 @" k2 a# n* M2 f
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。# p0 ^3 [" @) X5 w3 r
#chkconfig --list |grep smb1 U0 q: W, S- ]# F* ~! h
2 A" ^$ p9 a8 ]# ~' @3 z1 q9 ^' a$ P
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off& {- n1 _8 j( P. p- d$ i( r
! I) e! U& }2 A: `完成上述設定後便可以啟動 smb 服務5 ` P7 f/ x) F9 n) ]; [% P
#/etc/rc.d/init.d/smb start
; ]2 A. F# ]* c% C
* i& K8 [& Y, i. @4 {' ` Starting SMB services: [OK]
0 [& e; z8 z0 I& o% Z' P- i' w' P ]
Starting NMB services: [OK]
8 j& s) n! Z0 q
: c% }! ~! \/ b% a4 [* y" U" m檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。5 D0 B6 V+ x/ P8 H* c3 M5 D) p8 A
#netstat -tnl
6 _" Z6 T6 v; Q# k1 x
$ Y8 y: o# c0 \) d Active Internet connections (only servers)0 q U; S4 ]2 O' I" I% x
. X" M, l/ j& Q; f Proto Recv-Q Send-Q Local Address Foreign Address State
/ _# b; G7 Y% s1 i C2 Z" x
9 }1 v1 a c2 i- l) ` tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
9 n }0 u n& b5 p+ ~" w; x: U( `
: a: s' o3 A1 w; b& D3 m tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN6 Y. g1 o7 L, {) `$ i- I
7 {/ \* @" d. h$ A( x$ i
3、Samba Client
6 Y* f9 i d# U5 ^6 x: A7 ?以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。* a! ^8 |- K4 e0 U1 i
: S4 Z- P: j* v$ j/ V: S/ o$ T
Windows Client, i- r. U- w9 o4 Y/ a0 Z
3 L7 ?5 h; C( n9 [3 d
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
7 ^/ Q% p6 S' Q- f9 v. z檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。0 L o" D' _$ @: k+ Z
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
; H5 i9 Z+ L0 \+ o' V _+ F0 c9 i
( \) @6 y2 C- M, T6 D2 g! g若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
5 a: W6 b* c2 ]; g! p+ d- e4 p& C0 J9 w+ p
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
0 G! V& _* {5 N net use w: \\Samba_Server_IP\home
* n# Y( O3 R( [3 {: a0 f! K7 ~. G/ A" i! g: s" ]( c
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)5 B$ x* j; i1 H, C7 O3 w6 {
net use w: \\Samba_Server_IP\home /user:user1 1234567 Q1 N0 l% U* U4 m, Q) c
8 r( n5 A* l: E* r
CentOS Client
* F. v4 f5 i& D+ v( w R" ]( J1 X" R+ t8 n' n* S h
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。0 p0 Z9 m' |7 {8 S; y, E. T
3 X: ?; w5 \* j! C
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)0 l( j" |0 J* a P% K- R
mount.cifs //Samba_Server_IP/home /mnt/home -o
1 L3 M& @# n! t' P2 s' x; Q: z# A
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)( l' p& y2 c: x- Z: ^- Z T" q# t. I
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
9 P. [/ n$ i1 i' F( s! P0 K! i' Y9 ~9 g4 c* P: Q% K0 ?6 p
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。6 J, R5 r4 l# N" {5 c" j( v" a! o* @
umount.cifs /mnt/home或
5 f* v9 l; Q" x4 K1 M, _umount /mnt/home
" [4 z, B9 w3 J8 D
1 v8 ]" O% u: n4、CentOS 存取 Windows 分享資源, z; d# n' ~ _+ [# Q
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:( m: X0 u3 S5 R* i2 @/ u, K3 g
4 Y8 n) Q2 z' \0 ]/ O$ j" `Windows 電腦名稱: user1-XP
2 o; U) Y. h, ^. y( @; W' I4 d6 l分享資料夾名稱: Shares
& t0 ]5 H Y- \3 g可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
4 V+ \2 X' ~. a6 @9 M7 J可存取 Windows 分享資料夾的使用者密碼: 123456
' S% ]" `, |$ ^6 h; e: @& f
+ L4 v" t3 e$ E8 QCentOS 掛載至本地端檔案系統: /mnt/shares
$ M$ @- F+ M: e( E uCentOS 帳號密碼檔: /home/user1/secret.txt5 q: J5 M+ @" g7 y
安全性權限設定: chmod 600 secret.txt4 O+ ]* T3 N8 U8 q- Q% G" u+ `9 @
3 x$ ?9 S0 U4 ^1 ^! K/ Q+ A- I; |: T4 q
了解後我們修改檔案系統設定檔 /etc/fstab。7 v) a* @& H, `8 f0 Z. {4 a4 g' U
#vi /etc/fstab
# _, u$ i* q. H( t1 q5 l. e& S$ \3 j4 `4 H; V7 }! C
LABEL=/1 / ext3 defaults 1 18 b, L3 {1 ^3 z v. o& W
2 g8 C' o: R1 E/ i9 I
LABEL=/home1 /home ext3 defaults 1 2
0 M+ E2 }/ b& V, o9 H8 l8 ?5 o& ]6 e' }, V
LABEL=/tmp1 /tmp ext3 defaults 1 2! N! O1 t1 O7 r* w8 `( v
# O! D) r0 K8 H
LABEL=/usr1 /usr ext3 defaults 1 2
( a ]% l5 e; e
! n4 P' ~, b+ u3 P% F; K LABEL=/var1 /var ext3 defaults 1 24 n7 R$ ?8 s! T$ Y- s% V. ?0 a4 W
! O% E1 a3 d, w, ~
tmpfs /dev/shm tmpfs defaults 0 0
0 q; T8 T) s/ {: ^6 ]5 @4 L* O6 B/ w" I5 y: W0 |3 \, e p1 N a m% T
devpts /dev/pts devpts gid=5,mode=620 0 0
3 s1 z7 U$ v5 F: J, l! R! m7 ~7 { H4 P. x( b
sysfs /sys sysfs defaults 0 0
3 s- A# J8 w0 a7 ]* G- B- f* ^+ `
proc /proc proc defaults 0 0
( W. S4 H5 }& O7 ]$ n
) j, p/ T1 {7 u, y, z LABEL=SWAP-sda6 swap swap defaults 0 07 p: E! _+ o- u
8 L) H* [# A& h2 b) q$ i //user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行* S4 x$ u2 T6 Y9 D
9 W* Q. \+ S5 L建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內: y) t) t1 h% Q) e; H0 k+ T N7 X
#vi /home/user1/secret.txt
9 ]; M- B+ B5 z! v& K1 A
2 k9 i5 ]5 ^7 Q# m- S username=user1
. w! G" P- k; }" B9 \; V3 D2 t" Q" C' L9 E# D
password=123456
+ ~/ o- t4 [& C1 A2 T* h
! w; f. b& y' `. ?$ Z# C( b設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
7 h' Q* r0 ^& ], p, Q#mount -a //讀取 /etc/fstab 更新+ y7 P- `# @/ f3 T" ?
+ `1 b9 ~+ v6 o! H#df -h //檢查是否成功存取 Windows 資源 c. o9 z: R& u
! d, d0 _* _, U
Filesystem Size Used Avail Use% Mounted on
. S- @- w# x& m% h3 K* N) c3 w C Q, Q) B( Q( Y8 r
/dev/sda1 9.7G 2.3G 6.9G 25% /' l) R" o- b) \( b1 t6 l! _) i- @
T* P8 l' t5 ]) Q$ r$ B* E; D
/dev/sda7 414G 211G 183G 54% /home
7 X& y$ f4 T) O
# k+ {1 \: \. ]( s0 g+ I /dev/sda5 4.9G 139M 4.5G 3% /tmp8 o8 x3 O# j- _% O, _/ y3 `9 D
# [& p0 F9 i* v /dev/sda3 9.7G 2.3G 6.9G 26% /usr
: X# B1 B( o* `6 I/ x; C8 T& x
* T( L- w @" A /dev/sda2 9.7G 255M 9.0G 3% /var( w( b" K. H/ v, B* {4 M: M& L
5 o2 X. W8 ~- f) e% r
tmpfs 2.0G 0 2.0G 0% /dev/shm
! _) x: D5 R- M0 z! x2 k
F- o- {0 S" O2 Y0 x //user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功 A# T. m) Y" j% n2 h5 p
i; D' n+ Y8 y \[Troubleshooting]
9 G% R* v$ l* Y) \1 ~+ u ~從client連到server端時出現error: " {9 `, A; H; H) _7 {5 ]2 Z% i
samba mount error(110): Connection timed out
- e/ p# O- p5 d- a! F% N0 g一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
& P. }- J& ^/ [1 r4 v: K+ B( W& i, y9 |4 a$ I. V
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:9 K, C$ J. k0 M
# a# E: B1 c. X4 H/ y) P+ L% T( O! M
用 yum 查一下有什麼 sshfs 相關的套件:
& z* e$ q. U9 Q! S* m3 H# yum search sshfs
3 g5 N& A" x2 T9 [. O=====================================================================( s: R R$ q; N. R
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH* n* c8 ?! V& O2 Z' ]1 N8 u
安裝sshfs:
) z" K% l+ k" h#yum install fuse-sshfs " X+ i6 F3 p0 z* d6 c4 { i! D
建立掛載目錄:
' f& A k0 Y+ _' M#mkdir /mnt/temp
' G3 U. w' M. ]7 P @用sshfs 掛載遠端的目錄:
( `$ ]* D2 Q! m#sshfs -p 22 root@192.168.1.2:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄' Q/ P; W; u# P' C1 h+ R R
root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼# p+ z& m/ \( V5 g6 K% k
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
) |9 L2 C! M, F- s' [如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
3 h' {$ ^7 A6 e( J$ a/ b# j- D3 I3 ]9 }: N" r) e
帶上密碼而不用手動輸入密碼
+ Y( H C+ ^; ~ q q#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp2 U% ?/ P4 @, o: q. I/ R& P8 L
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:& y9 m5 R4 g5 B" i2 X* _
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/ /mnt/temp
& n$ c2 V: P; S W6 d
0 D7 B* M8 M# z8 _, X6 |9 `6 x以一般帳號(非root)掛載時,出現error :! v5 m8 \' h! J5 }
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
! p* ]& |) D! L/ h# bls -l /bin/fusermount6 u; Z: a& a5 r' S3 }
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
5 h( b7 A1 N4 R! `故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
2 s4 ?/ h X6 m7 a2 w
$ B: H" t1 d7 R1 w& x% ^可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)2 G, j8 f1 w% l& Q2 E. e% c: }# J
8 N7 F7 x! |% y
, u% e" X. C6 q# F$ B$ ]) P
|
|