tid=66566&1、安裝及設定
]7 V) W# h1 x7 b9 T3 K分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。0 ^( p. m7 r9 ^0 o& m
8 c# p& N6 M) C8 f6 L
2、Samba Server' E3 n' W& |7 X$ j8 R1 V. l- ?7 c
步驟1.安裝 samba 套件
8 c( r9 p: U/ {" C- o7 L7 M4 M5 n1 X
9 p% u1 E! a& H5 O利用 yum 指令來安裝 samba 套件。
7 O' m; g7 ?) N# d" J1 B#yum -y install samba //安裝 samba 套件
! `% p" p% D) Y: w" t2 w8 @* l
/ O1 w8 ~5 j: k+ q***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
- F& a3 M O" o1 L#yum install samba-client samba-common cifs-utils( M% m9 [7 E& j: z, U5 Z
3 k+ S2 t$ I% ?, l! v& [# ~
步驟2.修改 samba 設定檔 (smb.conf)" k$ Z; a4 `2 J4 w8 J0 L8 x
7 M- r9 r$ J1 |. {3 D- x
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。1 E2 Y: O* M! P& C& D' y7 a) t" M1 l
#vi /etc/samba/smb.conf //修改 samba 設定檔
8 h9 J+ J6 P s s9 H% i% ?/ s! A. `1 \1 j' m7 W
global //通用設定7 H4 V5 M0 D( V$ @" q5 S
. K% f$ m+ W0 l$ B7 k netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
) A0 [, i# T$ W- _+ f7 C
; c6 a ?1 y$ |' Z# i* h- M: _ P workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
Z- M" [' Q1 I3 L/ b* h& z. F: m2 T" y5 `
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
3 x! w" `6 z7 w8 |8 [% y
5 f% m/ ?- H4 I- }3 A! G! Z( E hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
% A r: W9 G- v4 p, L
" e" S# T# J# M* ]( V security = user //安全等級user需在Samba主機上擁有帳號者才可登入' `9 l3 t& X) W0 o6 _4 I# Z
2 V0 x( M d* E- w# S% k2 K encrypt passwords = yes //是否對密碼部份進行加密# ?% ^/ I; ]# p+ D
% q" k. g% a% N! b1 r. S; h display charset = utf8 //Samba 上所顯示的編碼! K# k9 Q" K8 S0 T- j6 V0 o
$ F# u. l) T0 W% ~+ q
unix charset = utf8 //Linux 上所顯示的編碼
2 ?: L: q! s: i2 ?2 x+ k9 ?8 I6 f, x( Y9 D! H
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
K1 Q* q' Q; L$ K9 }% C: ]! z7 v
home //分享設定,屆時顯示分享資料夾的名稱) T8 ^ O5 U' S+ z; V
, b% r; p/ p; y comment = Weithenn Samba Files Shares //分享資料夾的註解* Y6 T6 `2 B% O7 i6 u) Z) A! O
6 K, @2 x8 {6 U0 U/ }% k
path = /home //分享路徑, {1 B3 I" l+ E0 @8 M% X" e
8 s: n7 X+ C6 p+ ^" K% i valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
; i* U1 @5 L1 p& T" g6 y; a" X7 u! h! P c( d! S! h% j
public = yes //允許使用者登入後可看到此分享資料夾* x3 j/ r- [6 X r D4 K2 Z$ G ~
) f2 C- U2 O+ {' X; p5 U5 }* c writable = yes //允許寫入
& \+ m4 d! {! b2 Z! o# n4 A* f- r3 V' R5 r3 L
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
# i: \: c F; W/ I% p1 |& N% y, {5 g+ G) ~ ^; M' ^. U' W
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
" R5 C" N% z4 j: L$ k m% D, o9 }3 w! p
" G/ o1 D- a/ @ i. G步驟3.建立 samba 帳號2 C- `* T2 F6 l; C+ V* P
( n' _5 a; V4 O; f H& u
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
1 S' V) h2 p" A/ Y/ O) `#smbpasswd -a user1 //建立 samba 使用者帳號 user1+ H7 p+ ]7 |( F& G$ r) r
- r8 w8 T! Z9 V
New SMB password: //輸入使用者帳號 user1 的 samba 密碼9 P0 ^# H0 O, E+ F+ _, |8 k
% q' ~+ Z. x' h% l$ W8 Q; b( @/ n
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
, L" Y* M* t9 ~9 k; n' B, C1 S9 B/ P: R
Added user user1. //新增 samba 使用者帳號 user1 成功
7 H8 U3 `3 O* b! V( ~& X# F# {* }9 u
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
5 N& t5 j7 e' Z1 t" m#cat /etc/samba/smbpasswd 或者
+ D& ~) a# O6 B% u, V* }0 J, I$ G% a, m#cat /var/lib/samba/private/smbpasswd9 H; {) ?7 j2 C
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
* b' g! z4 t( d
. b& q& q$ r; [* v$ I% ^& r- D步驟4.啟動 samba 服務
+ i6 D, B3 a+ P9 v% f: p" Y+ I- ]: W& W, N
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
" t/ t: G% t$ x; l: x- P#chkconfig smb on r6 @0 q0 W6 V" {6 y4 N+ w& B
+ b0 Z1 _- L4 B9 k+ a# |
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。5 ?: g r$ J- b3 |; X
#chkconfig --list |grep smb
# p/ h) _* V) ~& U5 m! P/ w" r% {: r1 K
- w4 ~2 J+ v* |4 o* p* g% d smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off2 m, c/ w7 e3 b. ^* J' I8 U& d
3 }. b. p3 d! l4 y& A, i完成上述設定後便可以啟動 smb 服務/ {. w8 h5 F& K# M9 s
#/etc/rc.d/init.d/smb start$ [( C; d0 _7 m
2 V$ t. H, l+ p! h+ p. P Starting SMB services: [OK]
9 f9 M% m" ]: \( v3 {+ s8 C9 m/ X, B4 I; ]2 v* i
Starting NMB services: [OK] + @% f9 s; b4 O5 q
2 D6 ]5 g, s& m& J! m! n, L8 A檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。; n1 f5 r6 p! e2 r
#netstat -tnl
# R. N* F7 A0 p& n& \# W
- r, s: M" N* i) J& Z Active Internet connections (only servers)3 D2 I/ g" b D& U, x
! q; N# i- F2 I2 @& u0 U5 h Proto Recv-Q Send-Q Local Address Foreign Address State3 u" b3 R0 h Y/ m( m! D; P$ G
( |7 G5 E, R o; \& N- M
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN- E9 s3 f+ G$ v4 P4 W; Z
% d4 y7 s/ P1 A( v! F
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
, ?! f4 l: X+ x/ P: e: p" a* v
- k0 S0 a1 s; |, U0 K3、Samba Client
( W& F t- ~" d. m% ^# w以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
1 O# M i% X0 q3 \: @
! |3 @ V* J) GWindows Client! b/ `+ E1 [ Y# w- P7 u z
( j! G ? x* j0 N0 T上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:6 \2 D' `7 j Q- I) n+ B& i
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。( J) k8 I! Y9 Z7 ~/ n6 B
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。$ U' Z! l& D1 X r
, K+ X' \' H- n# O
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):7 g# r% P& X$ Q
- N0 v8 I6 Y2 S. @- e1 L7 t
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
5 ], \: I& k, o U. V7 ^1 q& X net use w: \\Samba_Server_IP\home
$ u0 G: @ d9 U6 W0 A8 c( m# g& c8 R( O0 X2 ]2 o6 ~: { o2 P. b
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
9 j6 F8 l* _/ u1 k# _+ j net use w: \\Samba_Server_IP\home /user:user1 123456
. f. f$ f' }5 k8 n3 e$ K, R4 h
CentOS Client
- w% S' q6 d- K7 A8 Z5 U* v* l6 s! N2 v2 O! {& i
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
+ r$ x( z% g" S5 E0 O. g
9 |0 C4 _2 |1 T& w" q0 ^方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
/ {! @" Z+ A: v+ R4 l P0 vmount.cifs //Samba_Server_IP/home /mnt/home -o* j( n; n( I+ [0 b( O; D
P" V: Y- D5 f! k4 ^) t# @方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
' S4 e D9 T" {8 I% r% qmount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=1234568 ~6 F* N' b: W; Z/ a
1 U, C1 ?% n5 d0 ?
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。# V/ x: w x4 r
umount.cifs /mnt/home或
; \6 d* X& M8 {umount /mnt/home
5 d1 k* Z9 k# F9 `# ^8 K
o' C i( M, n4、CentOS 存取 Windows 分享資源
3 r1 w9 ]/ y! o. |Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:8 B+ H; c# z- d' y
; _+ u2 I- B& }' t7 R; U
Windows 電腦名稱: user1-XP
& j% T0 O3 i; D分享資料夾名稱: Shares
' s* f' a# D/ q1 c) M. X可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)& Z# I0 `5 L, I6 c) D
可存取 Windows 分享資料夾的使用者密碼: 123456" |: A1 H5 r. R; _7 Z, t
3 o* [5 B" v3 J; z! t; o# w5 k
CentOS 掛載至本地端檔案系統: /mnt/shares
. A; D! R- C$ X+ [) f! \CentOS 帳號密碼檔: /home/user1/secret.txt
* J" ^7 w$ g! O7 A; _安全性權限設定: chmod 600 secret.txt
}9 _8 G7 G* G0 ?5 \" m6 F. b7 N. y- l2 R" |
了解後我們修改檔案系統設定檔 /etc/fstab。
# c0 O' I8 A( Z& p2 C1 F#vi /etc/fstab1 q; x( o* s9 \. Y! m- q$ n5 V
8 E1 c: t1 V3 x2 A: d: Q: Q
LABEL=/1 / ext3 defaults 1 1, P# N- m$ g% U- L5 W
+ \ t& U7 _ W. V7 f LABEL=/home1 /home ext3 defaults 1 2
# X* j, ]8 `6 A( k
. r ?4 ?2 U, [& O: Z; B# | LABEL=/tmp1 /tmp ext3 defaults 1 2
9 x2 ?; ~. X- R. {. ^3 H {7 p2 P
5 k+ C8 ] }; A3 Y$ l9 [ LABEL=/usr1 /usr ext3 defaults 1 2
/ j% o$ M8 c# L: W2 v4 i" D$ e! G4 \2 g: l/ s
LABEL=/var1 /var ext3 defaults 1 2# t7 e/ o; s! F3 b1 Z
0 ]6 v: G, u1 N9 h1 A! B0 F4 |2 u
tmpfs /dev/shm tmpfs defaults 0 0
: e& l- `+ x' B' P$ v9 a" o, D
6 h1 L' ~* U: r+ R* m u/ w6 v devpts /dev/pts devpts gid=5,mode=620 0 0
& z7 k0 Y: P) T& u+ h$ ~
$ l* u% ]1 C5 B+ Y3 H; |4 {' h' ] [ sysfs /sys sysfs defaults 0 0
. j* @( N" I5 g. s Q" w5 |$ g0 r4 t0 i
proc /proc proc defaults 0 0
' p. {) y& }9 a9 @# z/ h0 W/ h$ k# L. d" f
LABEL=SWAP-sda6 swap swap defaults 0 0% f. a6 h1 d. [
- V7 I/ Q& ?" v
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行3 r+ \6 g0 M. R& t( K3 n% j
" Z- k0 l+ p- a; A建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:' `6 j8 X' S# N1 r# `' P
#vi /home/user1/secret.txt
2 _3 D0 z* R' _! j0 }
: n% i! v: D/ U& O username=user1
& i3 W0 c |9 R$ M! u# z6 j6 D
/ P. D0 z5 M. s password=123456$ b0 ~, l; P. R* E
) q y8 Z8 |( s& B( X1 j d設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。6 F% ?" [: o8 o
#mount -a //讀取 /etc/fstab 更新
3 A. m0 i a' c" C4 J3 }
9 n* a; {. s7 _#df -h //檢查是否成功存取 Windows 資源8 h# s( k) J, I
3 Q7 ~2 B/ [4 A X Q Filesystem Size Used Avail Use% Mounted on
% r, _3 o* {' P3 J
# t* J) V1 h# X8 ^: { /dev/sda1 9.7G 2.3G 6.9G 25% /; H& L$ Z% L. g
+ b& j: D" S% V7 \( _6 J* l /dev/sda7 414G 211G 183G 54% /home
* q2 ], W3 c' M" G8 `) }& e& w1 B6 ^4 s
/dev/sda5 4.9G 139M 4.5G 3% /tmp" b: r' h1 k4 O7 M' s1 v
" a; t% F) `- g% N) B0 b1 U8 U4 `' q+ y /dev/sda3 9.7G 2.3G 6.9G 26% /usr9 a* J3 t: [' W) P2 E4 g
2 m6 r& g1 |8 f3 L1 j
/dev/sda2 9.7G 255M 9.0G 3% /var- D+ M+ _6 l; E* O& f8 z( P; H
6 T' K `' d( u$ X
tmpfs 2.0G 0 2.0G 0% /dev/shm
' N8 a( e# |; r) S" `# N" E# n) B; x
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
2 W2 S7 B- m/ Q8 P# {' L$ D4 b/ @# y9 X3 _. } ?$ l; E1 D7 R
[Troubleshooting]+ J+ K$ O a& e% T, k6 v
從client連到server端時出現error:
" `+ z+ j' N8 H9 W. C+ esamba mount error(110): Connection timed out
( \: a" z B- p" g一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445* X7 p' @# |! ~4 C5 {& x
2 U; \- ]. P3 `
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
) ^/ v. k& x9 Z% @/ L4 t) l- f' A! d2 z
用 yum 查一下有什麼 sshfs 相關的套件:
- I% S& e, l" }6 o# Z$ j3 u0 h/ d# yum search sshfs; v8 t/ t8 o( b) F
=====================================================================/ I0 G& f& {' K; ~" I
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
. Y% i" {; h% @" b! M; i! S# F& |安裝sshfs:4 d# z% l, D* K7 ?1 Y/ r$ g
#yum install fuse-sshfs
0 h4 x) Z: }* g* o$ f. X' I7 f建立掛載目錄:" N# t# J' @7 o# Q' w9 X+ B
#mkdir /mnt/temp# q% X9 ^2 a6 i' @" L
用sshfs 掛載遠端的目錄:
8 E$ d% g7 h1 k0 F- j4 P7 f#sshfs -p 22 root@192.168.1.2:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄4 F# M' U& r: l- `; P7 M
root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼0 y7 `2 `; k7 v: n2 r9 l
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
& S2 K- Z, |" M, u2 k如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
; R- @9 d- ]4 g( j# k% F+ W- U9 U; Y$ E/ R8 N0 J+ [
帶上密碼而不用手動輸入密碼& G6 o7 p- A' y: s! O
#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp
% Y& g% C0 U$ e/ I1 s註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
& J3 u# H+ X/ o; ?" g' {, j5 Q4 P& m6 C& ksshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/ /mnt/temp
O. `0 A: X+ k4 K. a& r6 E! ^7 I" Q4 r8 @: _$ y; g
以一般帳號(非root)掛載時,出現error : S, q9 E' k8 Z4 N! ?
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限1 H; x; Y( k( B/ d. `
ls -l /bin/fusermount
/ Y2 F o3 E% ~: v5 p- b-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
9 [! `, c* i9 a0 x+ j/ p故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse1 ~! s$ O* g M# L7 y: A ]* \; u4 `
x# I0 j0 U4 X+ j( b% M可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
& o) ~+ C9 K9 B8 x& C7 d Z. d& j! n4 u3 y3 B+ w( V) p. X) S" L8 f
- t8 _& V2 K5 G' U: A8 e- B9 d
|