1、安裝及設定
7 i9 O" \! g# K7 |分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。( h5 t% A' l; Q) x s( C# j
V! `" `) ?; y! W. O% z5 t2、Samba Server4 r) Z) S3 D5 P. Z( N. H. C
步驟1.安裝 samba 套件 O& X9 }5 X; @7 U. P9 l: Y
2 f+ M. ^! @) H: G" j( Q
利用 yum 指令來安裝 samba 套件。
6 m* H1 [3 t3 I3 [# u; C#yum -y install samba //安裝 samba 套件
L2 d- o' Z& M# K( ]/ p6 o
+ j3 ^4 t; a* o4 I% ?! E! v, h) |* H***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
/ M. R( z0 H5 U f#yum install samba-client samba-common cifs-utils2 k* d( i' h H5 Y- {, y2 i- Q L) e
4 M" e5 |( X0 c, \
步驟2.修改 samba 設定檔 (smb.conf)" p. v; y" h7 E% {$ O
" i {& C. ]8 R& t$ l2 A- s7 u. X. p. Q( b1 S
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
8 C4 k6 N( k+ k: x( r#vi /etc/samba/smb.conf //修改 samba 設定檔0 x! A0 {" R7 K( [1 i3 E2 }
) }0 e% C2 c+ N4 d6 `/ Y/ G* x$ ^
global //通用設定7 o4 \+ y4 }0 K) @
% T, s: F2 m3 w, c+ a! e1 Y1 }3 X netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱( `* n" R( `( j0 C( |
$ p0 |9 E9 B+ o3 F
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱8 r' o8 {0 ? L! Q3 ]: C
X2 U3 }$ G u2 s- Z3 N hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源+ ~, Y* G. @3 A" k6 H, c) {
1 [4 A( M7 R8 k4 } hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源7 O# k4 U- B! q
# E" _4 v/ C$ E* _$ M security = user //安全等級user需在Samba主機上擁有帳號者才可登入' u# a/ o- I0 l
) U, l; `( k8 a7 I, V, m encrypt passwords = yes //是否對密碼部份進行加密% }* u/ z5 y0 z0 f9 g: @# T
8 E. ^0 a g- h9 D: N0 O
display charset = utf8 //Samba 上所顯示的編碼4 `8 L4 H5 j9 e) }
8 W: x3 a) L ` _. q7 M unix charset = utf8 //Linux 上所顯示的編碼( T8 j4 {& q. I6 T' L$ M
& @4 y3 `, a* e! N7 |* R
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文) L1 g# `2 \! q
( {* C0 |1 n, C, i home //分享設定,屆時顯示分享資料夾的名稱
" f w- ^; I& o' V- O% G% O
$ Z/ f. u/ C! D; R comment = Weithenn Samba Files Shares //分享資料夾的註解$ X+ M z, ?1 O! m: ~' Z
' d3 C" y* X, P3 Y6 _/ G path = /home //分享路徑
, u6 d: l$ g4 Z# A% g4 j% M2 s5 l/ |
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源: c1 u7 \* T4 ?$ k" ], E/ _3 L( H
* ~7 C2 M4 h! ~# p
public = yes //允許使用者登入後可看到此分享資料夾
! z- E b5 t- a, g( g
" z/ |5 x5 g" b! Q writable = yes //允許寫入8 s3 S; ?# h, b8 @# f. }1 T
. Z8 Z/ K. S, _4 r# k W1 y
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
6 _3 |2 `$ v _% W( j/ G' A( ]. x
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
4 m$ I" F2 c. j" c5 i+ s' e' D
4 Z, x) q0 G* z
0 p# t" x3 b/ W, A0 ]0 A, S. u* Z步驟3.建立 samba 帳號' w2 @. f0 P2 L4 Y
6 }; x$ c$ O: s, ]
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。2 }% M# C- k1 ~4 S2 S$ K- E
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
) Y. H/ n8 t/ d j: c
0 I+ e/ P5 S) H! N: C% Z" X1 t( B New SMB password: //輸入使用者帳號 user1 的 samba 密碼1 N J9 ]" h" [% Z! N, k0 R
# k) W0 v9 A& N6 k% s+ [" b Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼/ | ~4 ?% X( X( W j* O) |: U
% F! v# h9 v+ c$ \( ]1 R0 C; i Added user user1. //新增 samba 使用者帳號 user1 成功' @2 G9 [9 k. C+ `) H+ M
1 p& x/ |- K q
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
0 K: o! j' p" d) I/ W" r; y \#cat /etc/samba/smbpasswd 或者, u' e7 j! |7 l
#cat /var/lib/samba/private/smbpasswd* }4 ~& |: C6 `1 R! V; e4 B! k
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
B% P+ @5 I6 E, A1 v i. f+ j5 t3 t4 j1 G" V/ ^
步驟4.啟動 samba 服務( M& h: \' W+ Z" |7 Q
8 @! a, }1 U! q6 i4 [8 B& V' L在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。1 u1 P) j4 s. ~6 |: z, N+ z1 I
#chkconfig smb on
0 M8 q1 K! `: A2 P5 ^! W. _/ O0 q- g% M6 I; D
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
9 F6 ^0 l9 x6 u% _6 ?, [#chkconfig --list |grep smb
7 v; h3 L; k4 v$ |& ?* n" t% X
6 S* G: g) {) Q. M smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
2 ]7 f c* p- e* P
1 P1 ~! @. J7 w完成上述設定後便可以啟動 smb 服務
- w% B5 Q5 T! F) l& D4 c) X#/etc/rc.d/init.d/smb start! f( C& g# A* z( \5 j: \! z4 B g
H, r! v5 k( r# G% u/ s
Starting SMB services: [OK] , K# f$ A* H9 G+ j! T/ @
" @! w7 N( z# p5 b& s: |
Starting NMB services: [OK] / P4 P6 f$ q3 P1 f1 X
" o+ i; }7 U- V5 o+ r
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
4 o: m7 Z2 J4 V- I, d) Y#netstat -tnl
6 `- ~, h0 J2 V
2 f0 j0 Q; Q7 c Active Internet connections (only servers): R5 g( z* v. M7 m) Z
( {" ]4 l! ^ y7 B* j5 N
Proto Recv-Q Send-Q Local Address Foreign Address State! e) x* `+ }' l3 R) q* ~
7 G4 o0 l& \/ `7 g' m tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN, R( S5 O* j5 q3 J3 E: j* N
* u8 u* Z; o L9 _) w9 a tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN# H6 R6 `+ P' D* }: z" J
6 r: A- M. O. c6 t) W+ U0 g3、Samba Client
, k6 B0 r" Q" O0 R以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。: o$ `. k# L* o8 L! s
3 | i& P5 _9 H( V, F
Windows Client8 e g7 W ?% {6 D. K5 E
6 r( Q) r6 S3 ? T5 z+ G: i上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:* t$ ^% g9 a( R
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
4 t7 x ?, K) {, d% H驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。7 g+ Y& X* ]: O$ c
, o3 r' T6 ]8 G9 D: ~
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
0 N4 r; b- C" x7 D3 @- \2 ~/ \/ ?& |
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)* l& R$ n, e9 p5 X, M) D+ Q
net use w: \\Samba_Server_IP\home) o/ X, ^4 W) p; _. N
' f* Y1 [5 G! ^; ] C方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)4 A; Z1 L5 c C* ~; L& h$ g
net use w: \\Samba_Server_IP\home /user:user1 123456; I' B |2 m& ^, u
4 O% r+ G( p" T. I$ r: r
CentOS Client
9 ?0 U3 P9 k/ ^* N/ ~) r$ J p, |$ N$ J A5 C: v+ g% r$ @
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。$ r) M9 i" v2 r6 H3 L
9 x v2 x9 ?. J5 K/ ~
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)( t' B/ P: f& \" o5 N0 Q) L! d
mount.cifs //Samba_Server_IP/home /mnt/home -o
' b% p9 z+ n& Z' H3 q ]) ]& @2 Q; e% @. c3 p% L# _
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)2 _* S6 A2 n: W) w: y
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
; P( T# r. |9 M( f/ t, U2 M
2 [8 X& [. y2 u6 B3 Q: ?. m若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
. b" ^# p/ P4 q* y8 ~* D8 v Humount.cifs /mnt/home或8 W: h5 N; m$ H7 U% f& s) v; z
umount /mnt/home
. U0 A d6 a" S$ R7 q
' C; J# v* z2 O! \9 x" K% O4、CentOS 存取 Windows 分享資源
5 L' ~' H6 ^& ?; o) |Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
$ n& l y# Y2 w# n5 J: E: J
+ ?7 [( ?' h! p7 jWindows 電腦名稱: user1-XP
# t# h: @, b8 ]# b9 i分享資料夾名稱: Shares
0 w- G9 A2 R/ |# M, \9 C可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
/ {* x& h" O1 k+ p# u5 @可存取 Windows 分享資料夾的使用者密碼: 1234562 @' N4 I* I0 O( b8 J
# A+ A7 V( E2 B
CentOS 掛載至本地端檔案系統: /mnt/shares
& S3 k' @9 b0 x: A1 Y# ?1 B- OCentOS 帳號密碼檔: /home/user1/secret.txt
/ t# e. \7 \' O S安全性權限設定: chmod 600 secret.txt
. ~1 O- y1 {; U4 O
$ [) m1 E6 [5 d4 @+ y9 W# ]4 Z& C: e5 X了解後我們修改檔案系統設定檔 /etc/fstab。
?) n( ? z" a3 H& c" p#vi /etc/fstab9 ~, k0 o/ U- ?; P+ T
$ M- Z6 f% b0 g3 M! P& E
LABEL=/1 / ext3 defaults 1 1
7 S7 F1 u& f& ^6 j* i3 J: E
& g2 g: \/ B* E F/ x LABEL=/home1 /home ext3 defaults 1 27 x' A" S1 d& H
5 c2 D& V* Q' m# e) Z
LABEL=/tmp1 /tmp ext3 defaults 1 2
0 q0 s+ \& t; E& ~ T0 {$ m) ?+ C9 r* u6 T
LABEL=/usr1 /usr ext3 defaults 1 2+ }) [2 u& z: w* K
" l8 T7 ]1 ?) C% B LABEL=/var1 /var ext3 defaults 1 22 a4 M; v, o7 ^ v' o' t3 S' H* P
6 O8 l. B$ @, i
tmpfs /dev/shm tmpfs defaults 0 05 {! |) `8 q3 k
7 t9 A0 m- X! u2 @
devpts /dev/pts devpts gid=5,mode=620 0 0. `0 d* ~* }4 n$ E
5 l; G( g3 k3 ^+ H8 ^9 m sysfs /sys sysfs defaults 0 0
2 U- w5 @! L, s- [! Y- j
5 U! f! s) A& ^5 j2 S/ w proc /proc proc defaults 0 0
- e& E/ w" G% z4 x: f, }* F: P. N& Y" ~3 ~; T7 B0 {0 ?- ~/ w
LABEL=SWAP-sda6 swap swap defaults 0 0
0 } K" G( s9 B8 y6 L7 O' e: n9 ~. g0 ~" t
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行1 g( w& c7 F9 x) ?2 ?2 ^
6 e% Z. l; t8 Q) g. Q+ H
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:6 ^* J. [* Z3 W l; }: u9 k
#vi /home/user1/secret.txt! H8 Y. W" A9 _/ I2 y
, Q2 E- S/ y |2 } username=user1+ s/ i' u' W6 V3 `" F6 v# [
, r' M& g( M( }0 z( d; X( m z6 ^
password=1234565 u5 J) h6 i3 N$ @ n4 t/ ^
+ @. \/ f' U9 ^3 x) C設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。& N" y% O: D) }) H
#mount -a //讀取 /etc/fstab 更新+ D1 H+ l% ~, \' Z3 Q, T, E
U* q" j+ C8 ^0 x
#df -h //檢查是否成功存取 Windows 資源
/ j$ r' d! A# p2 a( D; z
# ]! I+ [6 R+ o( K' v2 j Filesystem Size Used Avail Use% Mounted on
# R: E; u- X) i4 I* k9 H T" \. _5 ~
/dev/sda1 9.7G 2.3G 6.9G 25% /! L* q0 c" p# o) j
' E7 E8 K2 n2 L: u k' l /dev/sda7 414G 211G 183G 54% /home& P W! I" G' Z' y: K
: R! q7 i" e8 l* P3 ^9 D /dev/sda5 4.9G 139M 4.5G 3% /tmp* w( z% I+ ]7 T: m0 g+ t
1 ^9 I+ L7 E* H7 T: O5 S1 B
/dev/sda3 9.7G 2.3G 6.9G 26% /usr2 u T5 j6 i" p {" h
. b/ D. x- ?# T( E4 e: O, u0 R /dev/sda2 9.7G 255M 9.0G 3% /var
7 }( T) V- Z* p% l- F! F# }/ j
' `- s5 f( B$ R+ v; w6 [1 @6 W+ C$ I tmpfs 2.0G 0 2.0G 0% /dev/shm0 \6 O6 h/ w, f
, s& |; o F' o: X' ]$ I8 t% u //user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
% b. {, V& }9 Q& c7 d
. @. @6 s! B+ A6 {0 g. P[Troubleshooting]
# |/ N& G- R9 V+ T( {從client連到server端時出現error: $ F8 V( i" r% E6 M
samba mount error(110): Connection timed out
; l1 x% W2 W+ k: Y3 J `一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
. l' r' b. \' P% L0 A$ t& y7 ?* w" z( x7 X
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
. I! m! N0 [/ n1 ^$ ?
6 F$ I. e5 E) o5 I: h! J9 r. x' t! X用 yum 查一下有什麼 sshfs 相關的套件:* s" l4 Q( S* }* y0 P2 ?8 E
# yum search sshfs
0 Z0 t, N R2 A' f# Z8 p: H=====================================================================# L) [) E( o/ ]5 J6 s Q
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH3 Z" j! u( N- R4 m9 d- Q6 e7 e
安裝sshfs:
: b9 c6 c# c* t( E3 r8 i" Z#yum install fuse-sshfs % ?% K" N! { K, ` o
建立掛載目錄:
7 r/ H, e: f! M#mkdir /mnt/temp) r! u8 n8 R' s$ m7 x/ O7 q9 B
用sshfs 掛載遠端的目錄:& ^5 t2 v% ^! C& I. m
#sshfs -p 22 [email protected]:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄$ D7 V( d# S% w
[email protected]'s password: //接著要你輸入遠端ssh root密碼! L1 q* G! s7 d" {' [- f6 N
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
7 a4 {6 _+ k, j" I6 p如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便% Q' H5 `5 d; L, Q8 ^
( [) e7 M0 I5 n4 t帶上密碼而不用手動輸入密碼
, I' s4 G9 [ }! V* ~8 ?4 s#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp
) k+ w% p2 C' L1 d, g1 b. N註: 如果掛載有問題,可以開啟 debug mode 觀察過程:/ ~7 { }# }5 o4 j( H
sshfs -p 10022 -o sshfs_debug -o debug [email protected]:/ /mnt/temp# b" d' ^# A6 }
8 i* f. x: D& m% k- Q' d [/ q" l# l' ~
以一般帳號(非root)掛載時,出現error :" f6 x0 U- b) n5 K4 j4 d% ]4 m
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
# V, R$ v6 ?4 Y* Dls -l /bin/fusermount; A# m8 t" |/ k+ `; y% B9 G; _2 U8 u
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount, k8 V' \3 e4 s
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
% N0 |8 ] ^, C
% T. w+ f% n9 q# @, m5 z可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
1 `/ P" E2 e/ K
$ {7 O! o* I5 ~: C/ j4 [0 ]( D
|
|