1、安裝及設定$ y- _# V' { K* e* T
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
& v- ^4 y$ ?! n, N. {' Y3 O* x
0 M4 b5 r5 @% [( k0 m# Z9 b6 N2、Samba Server5 f1 y7 r: ^" p6 f2 O
步驟1.安裝 samba 套件0 N8 e. O' M% ~( l4 ?* ]0 F7 T
9 Q& R, l' `0 w利用 yum 指令來安裝 samba 套件。+ i+ [0 i/ E8 e
#yum -y install samba //安裝 samba 套件
g ]6 [% r, F) l
+ n2 C2 p! p- N& L. ^***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: , R% G; r0 r; p! R
#yum install samba-client samba-common cifs-utils$ Z! X" w) z1 y1 ~/ s4 F
) L1 m" m. C* z+ t' l* w+ v步驟2.修改 samba 設定檔 (smb.conf)/ a8 Y9 z# H" a; b5 M7 b
: g/ @. B% c3 _' c4 A7 u
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。* W+ b4 x: m0 z! P$ A
#vi /etc/samba/smb.conf //修改 samba 設定檔
" x2 o4 n5 `& x! U$ }& ^) J3 U6 I
global //通用設定9 R% E1 _- Y" r
" F4 }* t" f/ C# P' L1 N. r
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
4 h* n! P8 O- V0 B8 Q) w9 b
- G2 M w: x; k1 ~7 D: y" n workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
. d- _# G5 Y% Q) r8 M$ ]4 A; k
4 F( V' \ }- b. x' H hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
4 @, w3 K& l2 b+ ^) D: s5 u: u: G/ t" A% R( H
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
. \7 i! I: O6 F; V1 `# m' s+ y
8 x1 N5 b) I- Q0 O6 ? security = user //安全等級user需在Samba主機上擁有帳號者才可登入
# f1 Y1 k/ G* [# t' T( I! K/ L' V0 U( \7 J7 r; E7 D9 u* M( ^; M* ~
encrypt passwords = yes //是否對密碼部份進行加密$ H. A% o. i/ a# C2 {
" [. ^# w9 o/ I* C+ s& e display charset = utf8 //Samba 上所顯示的編碼
, N8 M, M6 V' u6 l
2 _' Y8 J& H. t% p unix charset = utf8 //Linux 上所顯示的編碼! ^: v% l4 a) i# P$ T& `% N- L7 [4 N
' f7 L; i: L! t# B& e! t dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)* o7 F0 |. e; O0 p! i( z
3 M* N$ c/ Y5 U
home //分享設定,屆時顯示分享資料夾的名稱
' U! h M9 N$ a) _0 P! P9 v. J4 n- U$ S8 |* P
comment = Weithenn Samba Files Shares //分享資料夾的註解! V1 `5 ~' C0 p3 q3 d2 Q
8 z3 R; `; p! M% i% G path = /home //分享路徑
+ e' [6 Y: o$ _3 i/ m) C/ Q' n/ J2 _, w! D
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源; `# b, d6 U4 _! e4 ]
0 f' `0 Q/ Y* }0 p
public = yes //允許使用者登入後可看到此分享資料夾
1 r. m- ?% R! h( A' K% _3 u) L1 h$ q2 {) V' ~
writable = yes //允許寫入
' l+ f, C" V! R8 i, V! l6 t: Y. E6 b/ u4 r/ l+ P r
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
* t6 \( n+ Q7 H$ n8 H- x: G! d& P( ` l5 `4 ^+ m+ R# z" ^
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
1 z! M7 }* s8 X1 P
2 ]9 ]4 ^( d: L& A9 K8 n1 y' C v; K: c- R$ U3 F
步驟3.建立 samba 帳號
7 w/ A2 B5 g3 l5 {/ C% c3 X5 W/ g/ c+ x) E$ P
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
) S0 O& C% ]* S. M! G# @#smbpasswd -a user1 //建立 samba 使用者帳號 user1% b$ Z$ i' i+ F4 }4 N
9 t5 t4 O* C5 m$ J l4 V! h- z7 u
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
: x1 j* D% u+ {9 H$ |
. t. j) G4 @& j Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
* C: N% d8 V) F& e0 ^; D; x' Q3 Q: `" f" z. I$ {1 F: Z
Added user user1. //新增 samba 使用者帳號 user1 成功" _) k G" ~$ L3 `" F: y4 j( @
7 z( X$ S! e! y2 Y新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過/ b- Q0 E. d+ h( `$ G! n
#cat /etc/samba/smbpasswd 或者
4 w) @& r+ J P b; d4 R#cat /var/lib/samba/private/smbpasswd
4 ^! h1 x. z r- w/ c4 }( n% E user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :9 s. t* I" L) u" ?$ w$ q+ X' z( Y
w; D) g5 P- o' |* G% ^5 ~) e9 l2 o步驟4.啟動 samba 服務( T: {1 L4 D" N0 Y1 f3 S( N
# \$ b- S t" O/ @% S" C1 P9 p" W( z
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。" O5 G2 O( L! O
#chkconfig smb on
! F+ P+ p S1 a* E' l% T
9 k z6 |+ a; f2 z. E7 Y使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。) \ z3 P0 R6 l
#chkconfig --list |grep smb
! m! |6 X. q' w
" O/ @ w0 F8 M+ m" N smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
7 q: J/ V6 y5 X2 q& P z9 U) f w8 K; Z3 g& t; y6 p7 g* M
完成上述設定後便可以啟動 smb 服務
1 G2 W2 t: h1 T ~ }- m+ O#/etc/rc.d/init.d/smb start
( m! A0 V: v! N. E* S9 Y% g& {3 g0 ]: P8 L! x1 ?5 S
Starting SMB services: [OK] # y- M7 ]$ d% a) T% p; K
5 x- O/ u: v6 Q$ {) p4 z Starting NMB services: [OK]
6 M3 t/ \% Z6 V# M0 H: W, r9 R* a5 J! A/ F+ k$ G
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
* `8 t9 e- I9 [& S, f, q#netstat -tnl
$ }- Q$ d& A$ M4 g; h3 @+ r; n; s/ g
Active Internet connections (only servers)
( u/ e/ |" B9 ~) v8 v: j6 e/ ~6 Z: U3 [1 P3 A2 \/ p0 [4 ^
Proto Recv-Q Send-Q Local Address Foreign Address State
) `4 o* N7 l4 D. o! \5 n% b' m& U0 A& r1 h5 ?) n
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN0 { ^8 U+ z$ t, ]" `
5 @- ~. V* F* J% t
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN. T% y9 ]2 d q7 ^2 W! B
: B+ N: w; D0 i/ L* V, G$ b
3、Samba Client
. a! u M! Y0 b: `' Y9 g+ j以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。5 B) B6 V7 u. Q) x c9 S
& L) {# }# E) _Windows Client$ B& j& Q0 D. x( q
: N7 A ^7 @* H7 J+ q$ n& @. _
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:- T2 F# t9 h3 S2 i; L Q
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。4 u) [% t1 M! k4 |: _
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。. f, d I3 s4 p- B# G. @* g$ f( B7 w
, k$ L. \' d. V- p9 a6 w
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
& s6 j- m# u j, S% u) `
- r D# T" t0 F2 l方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)0 |3 B8 g" }4 I2 R9 c' X
net use w: \\Samba_Server_IP\home
, _+ Z, c; ~: h* Y+ L, P% r4 s
5 |; A; E) n0 N- T2 ~方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)) I7 t8 m: t3 g1 Q B" g7 x( s
net use w: \\Samba_Server_IP\home /user:user1 1234564 I2 _: |/ I: @/ \. O3 D. X
3 e$ j' u' T# G& \2 ]' n, SCentOS Client% \$ t) F$ l' r8 a% v3 h
$ D- o) _+ I' k O若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
7 J$ z- R' h3 N" n7 u/ Y$ {* a7 O# B8 I
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
7 n1 H9 |; t- Pmount.cifs //Samba_Server_IP/home /mnt/home -o
" I1 }. v( p7 J4 T; `# b
( w, T$ D G) X0 {' f. g方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)8 Q0 N v3 T- n- {7 j
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
; {% v+ t; F8 L5 ?* U, g' U$ ]- P/ h7 `- w: ~6 U- ^- e2 d7 Y- n5 g& n
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。& j% o9 m+ S: {4 m6 e2 |4 M6 M
umount.cifs /mnt/home或' [( ?: Y8 O6 u9 E
umount /mnt/home5 w# U; ]) l& d( G
. @2 l/ ^: X3 Z+ x, G/ I
4、CentOS 存取 Windows 分享資源
R: M4 T. S, ~Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
8 V$ e* X+ V: L% P6 \% H9 U& a6 `3 \% Z# o) d t" G2 J: S
Windows 電腦名稱: user1-XP4 n- @$ M) w$ ]* b& B4 q s8 F
分享資料夾名稱: Shares
( S! W+ G: G) f% O/ Z6 \4 j可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
5 J3 b7 Z! Z/ S+ e$ T) a可存取 Windows 分享資料夾的使用者密碼: 123456
9 O$ C2 S, R7 X+ y2 `; t! t, i. \ T, l# K( t6 g o
CentOS 掛載至本地端檔案系統: /mnt/shares4 J5 Z9 q0 H# a8 Z r% B5 g
CentOS 帳號密碼檔: /home/user1/secret.txt4 A8 p* V/ M+ c/ H
安全性權限設定: chmod 600 secret.txt/ r, V, J: {0 R1 c
5 x8 F c `, o9 v+ _ }. y
了解後我們修改檔案系統設定檔 /etc/fstab。
9 c( K4 R! y8 G ~7 [4 J- {& c#vi /etc/fstab: F: I% i, U L) L$ X
4 I7 i8 l/ K8 {9 ^ LABEL=/1 / ext3 defaults 1 1 Y: Z; e" F* G* Y
~# o: w8 `- E0 } LABEL=/home1 /home ext3 defaults 1 21 V3 Q1 g1 w0 ~6 b. U" [
5 s/ a* `5 a4 L
LABEL=/tmp1 /tmp ext3 defaults 1 23 ~1 q+ ~$ G. \& B
& D9 D7 L( \5 Q LABEL=/usr1 /usr ext3 defaults 1 2
$ Q: F* V& J" }3 Y/ N5 T" p1 l% A' R- z* H7 K
LABEL=/var1 /var ext3 defaults 1 2- _" o5 B6 @: k, j
" N& M' a. B: k1 m
tmpfs /dev/shm tmpfs defaults 0 02 x7 w9 B8 K! u- }3 |3 h- w
L( N5 A7 h0 z% [4 ?% n9 m, e devpts /dev/pts devpts gid=5,mode=620 0 0
$ L$ k$ k$ A2 J% C) {# b, l5 B" N2 o9 b2 j2 w" X' g
sysfs /sys sysfs defaults 0 0
- `' i$ p& o! m, W/ [ h2 T4 A! H7 q3 |+ V
proc /proc proc defaults 0 0
4 z8 ^) O( A9 J* `3 n+ Q/ x9 T8 ~4 o {/ }8 ?* R
LABEL=SWAP-sda6 swap swap defaults 0 05 m: _! x/ J% x/ k
4 `$ `/ K1 A3 C //user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行" X& M+ D. I- H2 _: h5 G
_% |$ e+ M1 b. t" @; p
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:$ s6 `4 M# V# a2 T% L& C* L
#vi /home/user1/secret.txt, \ ?4 I* {1 N4 I2 d* i
2 s/ q/ y+ j3 r0 ?9 |# T0 E. v+ q9 k username=user17 V( F' D: T4 @7 }0 b0 {$ ?# J; ~
2 ]# }: h# g7 R* {: T, j* p! e password=123456
h' K) [6 c. ]' N' t! I1 l( d8 M4 ?- X& X! _* x5 H
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。7 U( ?: A |1 S; w- c
#mount -a //讀取 /etc/fstab 更新' H/ K/ r2 f; \
6 G4 c* Q* X; O y: L- A" }
#df -h //檢查是否成功存取 Windows 資源
( G" m' M4 h4 h/ g) U4 J9 g: p) C: f. v% Y' D9 K. b1 L5 Y
Filesystem Size Used Avail Use% Mounted on
( K7 M- D0 e1 ?( Z9 x8 O
- s/ k, X. V( V! H* O# v /dev/sda1 9.7G 2.3G 6.9G 25% / n" {6 @5 I. ~* l( @) H
; Y# ~8 ^+ |* b5 w0 J3 Q3 h, Y /dev/sda7 414G 211G 183G 54% /home
$ s ~4 m% m, [8 T6 ]1 i' F9 O9 e3 i, `5 G
/dev/sda5 4.9G 139M 4.5G 3% /tmp
G+ w8 C, \8 R5 d9 T* e
) j+ s' \. d; K! x; W /dev/sda3 9.7G 2.3G 6.9G 26% /usr6 c4 }2 Y- \ M& k C* T; o
& q1 k) k* {! `: h$ m+ V* k/ Z
/dev/sda2 9.7G 255M 9.0G 3% /var
t, g) R. X; Q+ O" t0 h: l; b' S1 _2 L+ [* X- s, M$ w' K
tmpfs 2.0G 0 2.0G 0% /dev/shm
& k8 A( h5 ]. O3 r f& i
4 ^4 {( E8 O8 g4 \" P //user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
3 m0 k- n" C& J% o) y
- g f. ~! S7 M0 p, g( e; C[Troubleshooting]
$ L7 r4 d" O# b- e3 b$ }" I2 R從client連到server端時出現error:
- L {. J. _4 U C# K' t; f& Esamba mount error(110): Connection timed out) p, _1 \6 ]1 ?+ U2 B
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445) x5 g* F; L! m _5 s& X4 s
' l4 q1 i5 b) ?+ P# V至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:4 L4 d9 A6 O( Y( h* z& [- Q) f$ V
8 |6 H/ I( J: U4 U用 yum 查一下有什麼 sshfs 相關的套件:
& n& {) k( M- b# yum search sshfs5 P% S( x* j u6 ~' F
=====================================================================
/ ~' d* M& [- U/ V/ X+ ~2 ?fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH/ r! U; Z/ v# B6 j9 K
安裝sshfs:
0 p% e$ m/ P# t' d#yum install fuse-sshfs 8 f! a+ X9 G7 \$ @0 ]! h! ^
建立掛載目錄:9 W7 a, D6 Z& ]- j! H
#mkdir /mnt/temp
3 u3 `6 y$ A3 K1 ^2 v. I* P用sshfs 掛載遠端的目錄:
& l% f% b+ `: j( @+ R2 @; I4 p#sshfs -p 22 [email protected]:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄5 K6 D# w; x! I* N0 r2 u
[email protected]'s password: //接著要你輸入遠端ssh root密碼
& U' J, m8 k% @+ S' i( O正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
" F" g$ U. z C" w' r( |如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便1 P% g' h* @# n
: k! O. n- [. ]" T' x3 n( |7 T! I% k
帶上密碼而不用手動輸入密碼
1 L: b Y; M3 k% @6 Y" y: Q#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp. \. K! v& P$ _; y- _5 M
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
' ?" M7 M7 J" P2 gsshfs -p 10022 -o sshfs_debug -o debug [email protected]:/ /mnt/temp- f, s. N5 |3 u
; z- R' Q& j2 H/ i* H
以一般帳號(非root)掛載時,出現error :6 u$ X+ y! r9 b0 |- V: r
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
9 d6 ~6 F- Q9 g& I8 N( z" `ls -l /bin/fusermount
! ^" [: D& ^. n-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount4 M* C/ a0 l2 D8 t+ N
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
0 {2 J& q- C+ y( V) H+ i, V, ]% Z" b
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux). I# L9 a$ {3 ]# }' |
3 X7 Q; S4 Z4 s: i$ X9 M' P S9 J
7 e! B' R2 f* f8 N" ? |
|