1、安裝及設定# q# [- \4 ~, h/ G8 d
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
/ k: v: M" p1 d/ r# N4 o9 T: D7 f( m% ?7 o+ k: |8 ~
2、Samba Server) U4 n) o, Q) w3 j
步驟1.安裝 samba 套件 P. g( m6 P, [- E$ ^ ?& F
4 ~6 O, a) O# C& z7 [, U- M利用 yum 指令來安裝 samba 套件。+ X3 u- K- e! ]- _
#yum -y install samba //安裝 samba 套件
}- O) I6 T) y2 G5 ?
5 o, ? X6 L, N0 `, g***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: 0 M6 Y T6 [1 W$ |: i! N: p- p
#yum install samba-client samba-common cifs-utils. G% z) V1 x/ r2 |, f+ a
9 l/ j5 |8 h" ?* W0 O步驟2.修改 samba 設定檔 (smb.conf)
4 X3 F# g7 Q" _5 S
/ m j( N$ g/ P: a% l修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。( ~8 h, x) H7 x4 r" u! e
#vi /etc/samba/smb.conf //修改 samba 設定檔6 ?; B2 o0 C- D: L& W
8 n3 J& C) _2 s( D1 [
global //通用設定, q5 D$ i Z/ Y9 I+ g) S" v+ }
, M( B6 @" ]; ~( Y" a! c4 x
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
% K( r: ], M* M- v* U/ R( A: }9 ?3 ?5 b: s6 j" ]. O* q
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
* [* m e. a1 U# S) o# V
( h7 K/ z0 w; U2 P% [! U hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源+ h8 ]0 `( q: Y- p
, K! e5 ~! S1 `* j) ~. h) X: { hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源 |% w4 B; M) @, _
. t! ?- x, U! u. U' b* s3 A
security = user //安全等級user需在Samba主機上擁有帳號者才可登入+ b- e8 n6 j* N' p0 p" i3 a' p
1 F9 j0 r& ], I
encrypt passwords = yes //是否對密碼部份進行加密
4 }+ P! V: P) G
7 q9 P" k& ]2 i& n4 z, C4 G display charset = utf8 //Samba 上所顯示的編碼
7 F. N& u) v+ l1 ~2 A& I* X( L' i. W8 p: V z1 J2 l# D
unix charset = utf8 //Linux 上所顯示的編碼, w1 _$ @2 G1 |5 v- v% b
7 _( c! t! F% |' U: i9 h
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)$ a8 q/ M$ W6 k" C4 a
# Z0 P$ W" ?$ N2 Y% x0 t home //分享設定,屆時顯示分享資料夾的名稱
% n% \* T5 k; P* O9 l
[( S, L0 M9 \3 |3 ?) B comment = Weithenn Samba Files Shares //分享資料夾的註解 [* `; s# v9 h" h, D9 Q; w! s
* _9 b' l1 c& V1 Z8 {3 i2 j path = /home //分享路徑
4 b8 k5 S% Y# ]4 r- K8 c6 T2 W* e5 N( A' A' A7 |8 D5 r
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源! t/ [( O: @& d7 N7 t
X4 `, B# Q8 h0 C' s0 R. ?. G public = yes //允許使用者登入後可看到此分享資料夾
# u/ W; S6 y9 }2 ~. M' T, b" w' _9 A& b8 Y
writable = yes //允許寫入
; W- V* [( C: t& `2 Q. ~. ^( A, H
) M! b& z& ?1 ^2 {: p( i create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664). Z# h: A/ S! c
* b3 X1 y9 v9 ]2 G1 R directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
( N5 _4 G$ Y) [& C8 f
+ F) j1 o/ ~. G: Y; C5 {3 u
: g9 j; I( v+ @, k步驟3.建立 samba 帳號
' J9 u _; n8 C l9 ^ w! C3 J$ g% k4 s2 A) H9 n
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
6 X$ o% a/ d- M; C#smbpasswd -a user1 //建立 samba 使用者帳號 user1+ f4 ?& [8 C7 ~9 o( a& m
9 y9 o( X" Q# n( m) @% t9 `
New SMB password: //輸入使用者帳號 user1 的 samba 密碼3 f2 _2 t5 }. v' A1 j
) Q$ }# _5 Q) @. W, u Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼+ c; c9 y6 O; `9 e; U; l
8 Z, J1 c( R2 g. {8 T& X Added user user1. //新增 samba 使用者帳號 user1 成功 S; m4 H; `9 ]/ M' c# T
2 L! @/ D- L2 ?8 \
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過) t# P7 N4 q# d9 {4 p4 \; ~
#cat /etc/samba/smbpasswd 或者
: r S! X% T7 e7 L#cat /var/lib/samba/private/smbpasswd W+ X, r# N# T! O
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
- X+ D1 `9 p+ `8 r
2 P, z. y/ B4 `, q步驟4.啟動 samba 服務
4 k, ? r- {( L% E0 z. \, l& C, u; g7 Q; ~
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。/ z/ E" }( e# y ?6 {
#chkconfig smb on
2 z2 H& y3 ]4 _
8 i; {% ~1 w2 E$ p2 ]( B" Z使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。; w- |$ m; @6 a6 @
#chkconfig --list |grep smb8 @; T& `$ V) `' j. o
s4 \6 G: ~* I9 V z, Z0 v smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
6 n7 D0 |6 @: s' T
% Y8 C! y! D8 y/ I完成上述設定後便可以啟動 smb 服務
& M& U+ m9 b: w5 V4 F#/etc/rc.d/init.d/smb start( g+ l/ I1 i$ i" V8 x. \ _
# B# X# z; b# `2 o" b Starting SMB services: [OK] 4 T* o0 E' ^3 }
2 h" f7 T+ A/ T6 u
Starting NMB services: [OK]
+ l- T+ l% h {
8 u0 e, }' V( s# a |7 q) e檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。, r' y) T7 C, t' O- B+ _
#netstat -tnl
% J ?8 C9 P" ?3 d% y: W T- ]# A q0 ~ M3 z5 t, {7 O
Active Internet connections (only servers)5 `* D, K! M" j/ h# f* b
. z A) D& p! M3 ]+ Y. n6 {& f- w
Proto Recv-Q Send-Q Local Address Foreign Address State
- y s. n( k( c6 V/ ~2 U o
" I4 z! K5 {3 p0 E9 O" ~/ B tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN$ s! W( A3 q9 i- g$ E' I
: _: |5 z4 Q& {" N* {7 D tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
5 G/ P% J9 b1 K7 i0 f/ w% \. W+ a4 k9 S; s) ]
3、Samba Client* h0 Z# @( @/ f: Y% o
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。2 u: |) }) T7 [- w. J' E
; t0 J6 \ y5 ]3 z, s$ D8 R2 IWindows Client( ^3 z* l" l' J* I/ M3 _
* P7 {% |1 Q$ M+ t0 S# R- @
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
. x% J; u, q/ m3 [- l' M& j$ [5 T檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
7 C$ I$ n& I- k( j% Y8 \驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。3 y l, T8 ^. N
) t @1 `* a) Y- e& |若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
* \: @/ j( e2 ?+ H2 D; s1 q0 O2 U
/ E3 C$ l$ \1 u* ~% m# `2 h方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)3 E6 c( u: Z' o
net use w: \\Samba_Server_IP\home
. R* I' M6 _& k* w* v6 @1 x7 F3 c6 k# m: J6 q
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
, I- \7 w/ u$ D6 E' b. j- G net use w: \\Samba_Server_IP\home /user:user1 123456
3 K. ?2 m% L1 r) A6 y
1 Q* I) W' G- \. Z3 ICentOS Client
0 |! ^( a# L' i9 Q& e6 Y; I8 H' ?& k3 T7 x7 d3 l# S4 b
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
! D" t, V1 J* [6 c/ m% Y0 [8 y4 J
% E. {- M Z2 X4 Y) z8 F& W; ~方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)/ G2 h! `8 b( _# D7 [1 ~+ r# R
mount.cifs //Samba_Server_IP/home /mnt/home -o! n8 p5 Z j0 b; ~4 R k
- ]: ^( d" ]. M5 X$ D& t方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)0 J( A9 r/ y+ K& \. g# G2 Z
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=1234563 M- d( m" F' W- {
7 y7 S9 S* I- j2 E. n
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。; [' i$ t3 L" a% a1 f) a
umount.cifs /mnt/home或: Z4 G$ S% f3 _+ b0 W4 M7 l
umount /mnt/home
! Z* y: \7 ?& r, B: @2 b! Z& K/ V/ v2 A
4、CentOS 存取 Windows 分享資源! y+ s2 h5 u% L0 F& E; k; b! n
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
( c N1 b5 S6 ?3 o; Z9 Z) \
7 e) ]& V E- G1 |Windows 電腦名稱: user1-XP
& q- j" V" S; m; E3 s* G分享資料夾名稱: Shares/ s7 n4 b# t4 K' p. A
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)- Q0 D8 G3 E. S6 o
可存取 Windows 分享資料夾的使用者密碼: 123456/ V- M. L k2 b2 Y3 d# A
0 J% o! O7 F. H
CentOS 掛載至本地端檔案系統: /mnt/shares% p9 ~. U/ }. {
CentOS 帳號密碼檔: /home/user1/secret.txt
s0 [7 @: k9 E2 L/ ^7 s安全性權限設定: chmod 600 secret.txt& X. _. M. n2 B4 ^+ u" ]
" s; {+ {1 Q% z$ g了解後我們修改檔案系統設定檔 /etc/fstab。& \# j% G1 v& M; S' u8 [ F
#vi /etc/fstab
& @2 U" I( _/ U4 J8 d! _0 X. H
LABEL=/1 / ext3 defaults 1 1. K3 R& X2 A% n
" {; C0 @1 Q2 Q4 X" D. c4 ^
LABEL=/home1 /home ext3 defaults 1 2! Q5 C0 N$ t- K @" z: q' [% q
0 W2 P" F0 y/ k6 G LABEL=/tmp1 /tmp ext3 defaults 1 2) ]1 Z+ t4 T: o+ \# H( C) W0 f* g
& c3 F1 r) K1 P0 x
LABEL=/usr1 /usr ext3 defaults 1 2
, e, F) u0 M5 f1 q: o5 l: ]$ D& U, |3 Z7 _7 H) l: Z
LABEL=/var1 /var ext3 defaults 1 2" x3 ?! ] S2 {7 ]6 O; v
9 W+ B* z4 G0 i: B5 x tmpfs /dev/shm tmpfs defaults 0 0
& j5 I9 h& b. P" c) t0 r9 @2 X6 Q8 `
devpts /dev/pts devpts gid=5,mode=620 0 0& g- @: Q' t; k5 }% V' W
6 B! X& ^1 n6 f3 A5 d- z sysfs /sys sysfs defaults 0 0
6 C: h- G7 `% Q; C) @
5 I; J8 i# j! c! J4 v) @4 K( r proc /proc proc defaults 0 0; J! Z' s2 e$ e) O6 t9 v" }
* ]0 s, o* V+ T6 J, m; i9 b
LABEL=SWAP-sda6 swap swap defaults 0 0& ?5 c. C8 p* Z# v* k1 B0 J
7 ^7 c8 u$ N/ k+ s# m% S //user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行% c& G) ?# D# c8 X& C
, ^* w1 E5 G( R8 b7 o. I6 r# N+ ?
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
! a9 c/ }3 D+ W#vi /home/user1/secret.txt
7 e0 d- w. l9 G9 B. \5 s- T9 G* h' h B$ q* h& _- l) T
username=user12 k+ }$ H j( n! p
% y- d! h4 N9 }, u: I1 Q* L password=123456
( S" i6 n/ x" u2 u' a- G" m% |$ ]
' c0 }1 P5 ]4 r8 ^9 g# m設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。) E0 x8 I0 C- Q& l8 T/ L
#mount -a //讀取 /etc/fstab 更新
& k- x. Z5 P* r/ v3 M1 L
2 K& o( ]5 C7 g, ]5 ?#df -h //檢查是否成功存取 Windows 資源
) d& r* ^# K \8 Z) D
7 M! Z. E! k# `& }! L. R: r" y: [ Filesystem Size Used Avail Use% Mounted on3 g( U) S% u' ]7 D
& H. t% ]1 h! o0 M; U$ i3 a1 a
/dev/sda1 9.7G 2.3G 6.9G 25% /$ M4 ]7 L u y
( h2 T6 f* e2 m$ ~1 H+ y5 Q
/dev/sda7 414G 211G 183G 54% /home
$ L/ X% S# y5 }: H. s C4 e/ \3 ]& d; f5 p( b
/dev/sda5 4.9G 139M 4.5G 3% /tmp; @, z7 i) _! Z2 T2 }
. J6 D' D7 @$ V1 z) w$ b
/dev/sda3 9.7G 2.3G 6.9G 26% /usr0 K. C6 L! r8 m {" y# z
2 ^6 y1 V- l/ u6 J- f /dev/sda2 9.7G 255M 9.0G 3% /var
]9 X& ]+ B# |: y
5 q6 L( r% h" v3 c tmpfs 2.0G 0 2.0G 0% /dev/shm4 ~9 W! {$ m& [: H3 ?
4 \3 f' o- ?) H0 S- e2 E //user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
" u" `0 i! H0 X5 c/ a! w* K* N
, D% h/ X' q6 d5 J- o' o% t$ l[Troubleshooting]( p& `' s& \, p8 }+ O
從client連到server端時出現error: - q1 E- `! V E8 }+ T
samba mount error(110): Connection timed out
' z, m1 b. x& Y一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
# W+ Q+ l9 P5 [* H, @
2 J. h3 K5 T' C3 k; d至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:' E3 u1 h. h' w2 ^9 m' ~
4 }' @. E% b' C* ?) Q/ I
用 yum 查一下有什麼 sshfs 相關的套件:
! a2 a& ~8 C4 G0 D9 L# yum search sshfs2 u+ ]7 I0 W, E8 u
=====================================================================
, N+ F$ d9 i( H6 Ofuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
) Y: w$ P5 R, C0 {1 ~- Q5 V! r: `安裝sshfs:% z0 |' Q! {: b1 o, d
#yum install fuse-sshfs 6 b' M2 u2 Q. C3 K$ O# G& Z
建立掛載目錄:
8 u& n, \0 c8 I- K1 Q( w# H#mkdir /mnt/temp
( S$ E4 Q, f& g9 |# t- _: `用sshfs 掛載遠端的目錄:
) \. F/ ^4 A6 R4 e8 {4 d#sshfs -p 22 [email protected]:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
1 W+ a1 J+ B% U6 L( W- I[email protected]'s password: //接著要你輸入遠端ssh root密碼& X2 P0 r& R4 ?% i
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
+ ?* ? S! J' k8 c* O6 U; X如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
0 i* P7 P. p2 v/ k$ b: n* q' k. K. F0 {3 A! N! A- e
帶上密碼而不用手動輸入密碼3 a3 y; ]1 N% y" i; Z2 |/ Q: J8 D( |
#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp
" l& H# e. [; G* p2 F/ T註: 如果掛載有問題,可以開啟 debug mode 觀察過程:8 o! Y8 Q7 m& R* N& w. K
sshfs -p 10022 -o sshfs_debug -o debug [email protected]:/ /mnt/temp
6 e4 a$ x4 ^3 [! \# F4 H/ c' L0 E
L" |, D( R" i! A q$ A; o; @2 P以一般帳號(非root)掛載時,出現error :
- o4 A/ b, z, F& f: J, h Nfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限1 ~/ Q& v# q% ]6 v1 R/ ?3 @
ls -l /bin/fusermount
; s& f0 g- ^2 _, b9 ]! |-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount/ C& I2 @% f* o& l5 ?
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse: A0 c0 c- R/ |1 `
: w* o8 C3 o$ n; d7 ?6 }% k/ n
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)1 b% c( U/ ^1 |! a) B' r0 |
7 m4 a1 ~9 r; ^, M: k+ e, |5 O
# z3 r7 r! I% K$ U: t6 k2 y |
|