1、安裝及設定5 z3 m. q+ p6 m$ ^ I
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。: n9 k F# s+ O& l' y1 f
. B0 k, A* b2 k0 l" P( u& W2、Samba Server" _, T3 D1 r+ R* d
步驟1.安裝 samba 套件
5 Z& I2 M2 N% `" J) y! C: Z8 a! U* c5 S' X+ p$ D) ?' K
利用 yum 指令來安裝 samba 套件。
, B2 r7 |. u1 L0 U3 g9 t1 _#yum -y install samba //安裝 samba 套件
. v! S' G6 s4 o+ e2 B% J! X; y6 r9 { J2 ?6 d5 V6 R
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
/ x: R b& F5 l8 i#yum install samba-client samba-common cifs-utils
2 o9 H F ]+ r4 N1 c- R$ I6 L) v; |7 ?" x( h3 w1 d
步驟2.修改 samba 設定檔 (smb.conf)7 v! k) G# E, M: F
1 ^3 {8 `& W& f7 B) q! q) ]
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。# M2 `3 y7 {2 g$ m4 {& X
#vi /etc/samba/smb.conf //修改 samba 設定檔! C) A$ d1 I7 S; y6 K4 w1 I3 p+ p" X
5 ~4 Z) G! v1 \ B& n6 r global //通用設定2 w6 w# s& ~8 |
* }; v* {2 [3 y3 J$ W6 d netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱3 V( g V3 b( `
" y! e5 {1 j6 y7 k
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱' i! ?) D9 |( x" M$ }! R1 L c
+ n" ~- R+ Q+ ?$ w' P% L# t hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
7 [, |# T! A+ V* z: O# j, A. E' H2 Y( I0 n, G' K7 p3 {# x, p
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
& n' f8 [! r2 z& q, M/ W5 Z( T! ]3 b& q( u3 Z5 `$ J) h# A5 c& n* ~
security = user //安全等級user需在Samba主機上擁有帳號者才可登入0 c/ p, x/ Q+ j. U
2 H6 m. F! } v encrypt passwords = yes //是否對密碼部份進行加密
2 Z0 ]9 C* ?6 F Y8 _9 v% U- M8 B, Q4 M" q
display charset = utf8 //Samba 上所顯示的編碼
0 l$ `! A' E; V8 b! p d8 j4 C5 z4 |4 R0 b
unix charset = utf8 //Linux 上所顯示的編碼( w8 w$ V7 w1 G, \; L
2 |, ]5 Z* R$ N0 T
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
& V4 u% a: Q. x( O- n
" [+ W0 B6 |0 j( ^ home //分享設定,屆時顯示分享資料夾的名稱 l, @/ s# c; g9 ?6 R' u
9 B" Y2 Z- D5 q! s$ C comment = Weithenn Samba Files Shares //分享資料夾的註解3 q2 s; R/ T4 W: q* u% k, z
V U5 |1 O3 [2 @. b( V
path = /home //分享路徑5 S, N/ u4 y7 @' S3 {
: `9 \& P* E n' Q$ z valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源9 J# @2 ^1 ^3 p$ s) h9 z+ n
7 n" J/ A/ k5 `* b# a& O8 b public = yes //允許使用者登入後可看到此分享資料夾1 p- Z! N- u+ {: U$ e* O2 _% e
! ?4 X; E, m4 N# V) S0 L1 Q3 N+ e: W
writable = yes //允許寫入+ F( q `% t. X
$ z6 k' t: v* w0 \1 e create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664): N# `8 U" |4 t- B% p9 I+ C
; ]# o( y) g+ t/ F: J5 w$ h directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
% K8 h5 o: o( X% ~6 `# B5 Z+ q
3 N% Y3 i1 S! }/ l% j
. T- ^2 o! w* b8 f步驟3.建立 samba 帳號
0 R& e+ e+ _# c* P, g6 I: ~8 @2 g+ }1 e- z3 i3 B
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。/ v8 I; v# z3 g$ Q0 _; S: B( \& ^
#smbpasswd -a user1 //建立 samba 使用者帳號 user14 |, t8 e; |2 i ]/ t2 v
* `5 P) e: g, a4 m0 K New SMB password: //輸入使用者帳號 user1 的 samba 密碼# P3 v5 `; }; o' o0 a9 {/ s
4 M2 O, X$ a" z) b# [' p8 C
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
) n8 j+ e# _1 _! Y/ j2 Y5 l) m& p2 T: r, U
Added user user1. //新增 samba 使用者帳號 user1 成功
6 ?# d& a" g6 a! o" w. ~+ t4 i' [2 X7 [- T3 H
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
) Z" @! z, R3 J#cat /etc/samba/smbpasswd 或者
: `! U! `4 E+ I6 x* x) w R#cat /var/lib/samba/private/smbpasswd
) P* M2 S# @8 s; H/ y user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
4 M& s8 {7 L2 l. v# Y$ H' J$ e4 H6 g/ k& f) `1 I, L0 W9 G
步驟4.啟動 samba 服務. |! j0 a7 ]; x! x+ S- G, ?# Z: B
& g1 p9 R0 X5 r. E+ `& w
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。: y8 e5 M9 E: X/ u1 T3 J1 h
#chkconfig smb on
2 Y% f9 m# _! u# `* I
4 c) S8 {; j% k; U. b E使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
" d# }: e7 B- {( m: ~) P#chkconfig --list |grep smb
& S, y2 m' k) r# s1 R" n7 F2 D; w+ a7 _8 @
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
* j4 H2 P. l6 P4 g# J* T6 ?. l( J# m3 }5 t
完成上述設定後便可以啟動 smb 服務
2 @" Y6 F# ]8 R! }- Z) p3 q#/etc/rc.d/init.d/smb start; \* i5 z0 W# M
' Q9 U2 U" w5 g* [. G
Starting SMB services: [OK] 3 i P" v. I% l! G7 ]! o1 M
! E: S$ e: f& F# |9 v3 T/ ~
Starting NMB services: [OK]
& ~9 m3 r' y! i' N% _" Y4 X- ^" c6 W; i; z6 o! f, r& k
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
0 y( |5 n2 q3 X" u# {& F#netstat -tnl
: F- u2 p; q) v6 o+ q
* w% Y9 Z: c8 C; O* y Active Internet connections (only servers)$ H8 c' M* l5 G+ [, _
2 w/ g0 O4 x; \) |0 U Proto Recv-Q Send-Q Local Address Foreign Address State' w0 a j: V. Z [
* a" M: }5 x5 M& N/ C tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
4 t- N" @; ?0 K, e
, M7 q& ^9 O3 v/ u$ x3 m tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
/ p1 S- F7 L, T/ O; R' q6 ]
4 L+ y+ x# P \' c' Q/ Z6 B3、Samba Client6 v |0 U7 O) ~& g, i/ y9 L. E
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。0 g8 M- V6 Z( O# ?0 o& L5 F8 i
$ n1 n+ h8 W9 y+ z- E! xWindows Client
0 \" r4 j; }1 i, N6 Q# V5 S5 T% C. s" K) y
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:- M1 ^; Z9 [1 j
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。 |) t( `, C$ ?8 s7 e1 ]
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
. X5 m! W# M/ g$ V% f4 M0 g5 j
& v& m5 l, G1 G若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
U' Q7 ]+ ], A1 i1 j! `0 p! @* w
# L% b- V$ c3 \2 q. S0 q% N方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)- f+ a* _7 ` l/ R1 y. z
net use w: \\Samba_Server_IP\home
- V# l( w' `8 K2 M( N' o: `: C: x1 u0 a5 z9 G3 W2 T$ ^
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
) Q4 a& K3 i2 v) z4 A net use w: \\Samba_Server_IP\home /user:user1 123456$ \2 m" { G. g- L% j
( I2 G! W1 v( C6 @CentOS Client7 {3 h( a9 B2 \( P
" ~7 {/ @3 X/ u5 d% u3 i2 i* l4 v
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
/ q$ Z+ L! {; n( ?0 m3 k/ H( I& H1 U& C) ~
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)! N$ C8 v6 a" ~$ n# `* N
mount.cifs //Samba_Server_IP/home /mnt/home -o8 ?9 J. |& N) R: k
7 {( X' ?6 s6 E( {, E& ~
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)3 ~- s! T$ g4 g- p: R1 u
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=1234566 y6 Z" i2 d2 l2 M9 z9 K
6 Y9 H1 f3 G! ]; L0 o7 h- `6 F
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
. Y: A5 ~, k4 b6 o6 T; O* Xumount.cifs /mnt/home或
6 G$ |' j8 ]' B* t$ R5 K0 H! l8 Yumount /mnt/home
5 t5 x, r7 k2 b2 J# f2 w
; B2 O! K& g& d% L5 \4、CentOS 存取 Windows 分享資源 p0 Q% p! Q" k" X5 f( x
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:+ s( n: V# q/ b% h7 D* ^) r7 Y
+ o" e) f. c! z; d/ l" R; C7 WWindows 電腦名稱: user1-XP
2 P* B7 }) ~/ r+ H& O$ D分享資料夾名稱: Shares. ] {$ J) M& {0 G7 O# S
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
6 i8 a. B8 T( z' B2 z可存取 Windows 分享資料夾的使用者密碼: 1234565 h' {1 i" `8 e2 O
8 v) h# E, J/ e2 I# z8 sCentOS 掛載至本地端檔案系統: /mnt/shares
; f! H S5 L3 ?+ y+ L( E8 uCentOS 帳號密碼檔: /home/user1/secret.txt
. q$ Z+ u! y' _0 F2 B% T) t安全性權限設定: chmod 600 secret.txt
3 e5 f" r2 k9 v7 M1 A: [9 e9 y9 Z5 M
# w0 v) Q3 ]3 a5 ]; ]2 [; J* T& S- I了解後我們修改檔案系統設定檔 /etc/fstab。, z6 b, I2 r4 k' i" b2 D4 x$ m
#vi /etc/fstab
. k/ H j p3 {$ D+ E5 i* v$ P# o) ]0 X; X( o
LABEL=/1 / ext3 defaults 1 1
3 O i% T5 J" @4 A( T7 }9 K! R" \1 H
LABEL=/home1 /home ext3 defaults 1 2 A4 |6 _9 n* P% ?
9 Z( U/ m) }% _6 n, m LABEL=/tmp1 /tmp ext3 defaults 1 2
$ Y+ O5 H! |2 i* V" `! A
; h4 h y+ F! _6 N' ^% @4 e LABEL=/usr1 /usr ext3 defaults 1 2
" e; g' D( F( G- G: X, x' k
7 P- f2 z' `) j# w% t LABEL=/var1 /var ext3 defaults 1 2
( x. ]$ J5 W4 r) _" `0 T. F9 Q0 F& W- h B
tmpfs /dev/shm tmpfs defaults 0 0
- p" b; J5 ^- p w" I3 T
' E }+ Z! q/ | @! e$ r devpts /dev/pts devpts gid=5,mode=620 0 0" n4 i, ]! n" R$ X% }' F5 U" P' w
/ ^0 B0 c2 F' S2 O# h sysfs /sys sysfs defaults 0 0( n& O: y. ~5 ` E
: k9 c0 I/ d. }+ \4 S9 W m proc /proc proc defaults 0 07 [ H% ]0 |! Q' z8 a
& R1 z/ U: i' a; L% f% _" {
LABEL=SWAP-sda6 swap swap defaults 0 0
8 d; q/ g O4 x& f/ ~# o
2 M& S+ b* k) j0 W( o //user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行& P" A! e3 @4 o( T* ~; D
) D) n# q" L- y4 i5 J
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:4 ]) `$ ~/ O& Z5 ]" G
#vi /home/user1/secret.txt' a! u* ]/ R3 k2 t2 M( _, J D: N
4 |; J0 r0 \ C& l2 m, {+ s
username=user1
8 V/ B8 j3 M# h) l. N
8 `9 B6 x: _. V0 a S password=123456
X5 Y3 q3 R6 L1 ]/ [/ A
7 S) r3 o, U+ S5 _' G設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
5 s4 s% s! u+ i#mount -a //讀取 /etc/fstab 更新( i: q# L# F, \# [2 ^3 ^0 o V
9 U" M/ B' X9 O
#df -h //檢查是否成功存取 Windows 資源
9 m# ~0 T, F* b% ]; j4 D2 Q
3 y c3 r2 R8 e8 u; [+ M0 z7 q Filesystem Size Used Avail Use% Mounted on& D5 |6 y2 |: O1 s
: R- e6 @" G9 H0 U) J) a% l /dev/sda1 9.7G 2.3G 6.9G 25% /2 V3 _4 ~9 w, U
% r' [( o% |* H
/dev/sda7 414G 211G 183G 54% /home
' U* R; H/ ]- m% j" j ^
9 ]# ^8 l5 S: K /dev/sda5 4.9G 139M 4.5G 3% /tmp( P8 T. Z4 ^3 b% F" u, e. I
( g$ r3 F2 {( V; B7 f /dev/sda3 9.7G 2.3G 6.9G 26% /usr- z( B1 D+ H* U( Q- Y, W
+ i% k+ d/ i( O /dev/sda2 9.7G 255M 9.0G 3% /var
# y1 w4 |4 R2 b( z" q6 z0 s4 K k/ E
tmpfs 2.0G 0 2.0G 0% /dev/shm `9 i# ~! i' q. Y) P
: W( `% |; g) u5 D' Z( t% A$ n/ M/ V //user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
4 S3 L# Q8 B* } g1 @
- f9 {% ]$ [ _[Troubleshooting]
9 J y- U6 N5 H+ T& x2 U8 t* }8 ~6 M從client連到server端時出現error: , U5 t; b8 ~0 }% K
samba mount error(110): Connection timed out
' O% u$ m2 s1 m/ Z/ I$ D+ M一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
3 E: X8 y/ ~% v2 w r( j4 K* t( ^5 z% e8 Z! s9 q1 D% u
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:1 M7 Z) F$ T2 ~
q! _8 Q8 Z3 l) y1 f9 W) `7 g6 H4 @用 yum 查一下有什麼 sshfs 相關的套件:
& ?' h+ G6 p- ^4 I8 p6 L& m# yum search sshfs
1 b- Q: @; o f4 s1 d, r=====================================================================( I& ]: p u' U E
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH% I+ E% t! y" ^( P9 m8 Q
安裝sshfs:, V) k/ Y' g" L" X8 G! @
#yum install fuse-sshfs
$ q7 {( H+ N( G) q( x, ]/ a建立掛載目錄:! M! P% \8 d# t8 O! q* b: j
#mkdir /mnt/temp0 j; c! V0 D {5 j
用sshfs 掛載遠端的目錄:6 }, R) u6 d* @/ |" y3 }8 P2 e
#sshfs -p 22 [email protected]:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
4 E; h2 `) z) b4 A' l[email protected]'s password: //接著要你輸入遠端ssh root密碼
/ K a O _- ?* T正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的( A) O* \; R O j# q
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
& o( y5 r# N7 W8 `# @, x) Z# y
3 d6 y. Q+ T) f; {3 P2 C' u2 a& }( V帶上密碼而不用手動輸入密碼( O$ M. o/ Z/ |5 I
#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp
% C ^$ U8 F2 W3 p7 T註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
( B2 X3 y5 G7 U$ R, fsshfs -p 10022 -o sshfs_debug -o debug [email protected]:/ /mnt/temp
# L3 X4 g# \+ e% i* D
; J7 [" e) I0 w- x: c3 T% [以一般帳號(非root)掛載時,出現error :% |' A- M* v* Q/ x2 P5 H! W
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限* T3 p" V( Y- Z0 Z! o& B! E! s4 N
ls -l /bin/fusermount
; f9 ^8 V, J8 ~9 D5 p. w-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount3 H" i) ]* j4 a- r% b5 p9 _
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
/ s" s: X; f6 Z" i0 _% S, M/ R# Y+ ^8 v
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
- h7 I: \& P H8 i" J$ p1 W3 u
0 N3 x5 c( O& L- b/ \. W" \! j8 a& O' D" T f" {; x1 n6 \
|
|