tid=66566&1、安裝及設定
6 T6 v. o1 C+ f) h分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
6 [& [$ u: ]3 a, q+ \1 t2 ?/ c- y. [- R6 c! g9 p5 v0 V$ W
2、Samba Server
: O3 a4 o( ~3 K8 G' z9 ~; ^' q4 ]9 `步驟1.安裝 samba 套件2 a" ~! M+ y8 N; [4 J8 g9 I
. L! z4 a8 `1 I% w0 [. |1 p利用 yum 指令來安裝 samba 套件。* k9 f1 w% [4 C( X; N$ H1 L; g& |
#yum -y install samba //安裝 samba 套件
1 U, t; F* J7 B& o% A }5 _+ ?: t, h ]/ k, I; {8 O, H
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
1 e e' I& i7 S+ ^0 g& \#yum install samba-client samba-common cifs-utils
( j. V) X7 w7 u9 x! {. R; |3 T! z/ [1 T8 c5 {; I) I+ |5 J# N
步驟2.修改 samba 設定檔 (smb.conf)& B, [% i( {* s
5 w' y4 ]$ o" e& M8 u修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。' C& T. M5 X1 `, L; j) V5 H
#vi /etc/samba/smb.conf //修改 samba 設定檔1 k% G' f! d# q
& Z6 }9 a) ^& v5 D9 ? global //通用設定
4 }& s* b3 ^* E0 q2 k" A6 v9 ~+ T8 o3 l. t% J1 @2 b
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
7 B: j0 o/ p- K- k! `; t' M; J3 j
+ q* z$ l6 i: k2 e9 n: U3 u% z workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱. w) i V' P* Y4 u- u$ }: m0 ~
: c4 Q. U" W0 |) j8 H* v* l* W
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源3 b8 ^ J# m5 u$ Y7 F! L1 c
2 ~# m. @8 O5 _$ D8 r5 p
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源8 ~$ Q0 y9 v! ~: N! M5 Y% L1 Y
( k, W* w/ O$ L' E8 S. b0 v3 Y
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
: J$ }0 i' U! O/ y. V6 K( @+ i. `8 p
6 Y2 ]1 V t' I encrypt passwords = yes //是否對密碼部份進行加密
|- w$ ^: X0 ?6 a6 a. g* O0 u* z- N' Z( x& }: } L! [3 n
display charset = utf8 //Samba 上所顯示的編碼
S3 E% Y1 I* z9 E9 X c
) p; Z0 C2 X% a$ s: M$ M. N unix charset = utf8 //Linux 上所顯示的編碼, T- w1 z' x+ S; s, |6 f m& E7 f5 M
- x/ f/ U6 |; k2 w% ^0 z. @
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)0 @% \1 i/ Q L% p
5 n( o6 s& g, X# X, X
home //分享設定,屆時顯示分享資料夾的名稱
5 m( _: }: i+ V( A$ K* y: q
: g" @" ^3 b) o+ G4 F9 E comment = Weithenn Samba Files Shares //分享資料夾的註解 i3 b1 T/ [$ f2 \/ f5 k/ t" v) J
3 V6 P6 |. }9 `) g6 D path = /home //分享路徑
! Z) ?2 C2 P: b
% A' w5 g. g0 P: |/ Q) H valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源1 }9 W6 `2 y7 V( g2 x1 A% `# B
" o& A0 y8 r- i: }$ {
public = yes //允許使用者登入後可看到此分享資料夾0 |& m: A: Y" h0 M0 f# j
5 a( L9 ~# o y: g
writable = yes //允許寫入8 X: {" Y- f) a2 j8 X# K; j$ w
0 F! l' _7 Y3 f
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
; F; |$ S9 k/ g* C7 n4 _ t7 ?4 A/ Z
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)0 ?4 O6 ]* t3 g ~& G
. b/ U: Y- H* E- f, ~0 v7 f( a
( f1 _, P( Y. I# b7 j! S" G. e! x5 ~
步驟3.建立 samba 帳號
' {4 A- i+ M9 C1 I3 S! L1 a% i s# {) M. V7 z |( `( O. K6 x# p
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。' c' }; I6 c/ e
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
v# R% P M. b- O& A. v
$ L$ v. M8 h5 ?. c# W$ v) A New SMB password: //輸入使用者帳號 user1 的 samba 密碼/ a& x% L/ s- M4 o: W9 N
8 Q9 ~. D8 |! q& ]0 ?9 t9 q8 o" ?
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼& W2 X. g* \: g4 g
0 d, f( |2 l ^# K0 N4 X
Added user user1. //新增 samba 使用者帳號 user1 成功
* ?! `% U! a7 S1 m- `
* T! d5 q/ {2 g# i! p; }7 q. W; s新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
& z6 \6 P ~5 E0 A# r7 R- K, u7 {#cat /etc/samba/smbpasswd 或者" s8 n% r# F: Z0 D
#cat /var/lib/samba/private/smbpasswd
2 T! y6 ^7 T2 d" E user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :9 L% o0 O5 Z; |4 p+ I! X# I
; K) l$ r6 o+ g" p+ J1 t
步驟4.啟動 samba 服務
# Z$ D# K& Y+ X
" c' `$ X" z, F# d3 {; e8 \! N: ^在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。. X! v* X. [( f7 F7 F4 a" ^2 W/ J
#chkconfig smb on V7 _+ V* ~! r7 N
1 ^0 l7 h+ e, E. V
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。- i8 r8 @% V2 q! a1 d! ?
#chkconfig --list |grep smb
2 r9 G: o" X, \; f% E1 a
4 m, w7 ^4 J; f$ Z# e, X7 W smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off) e+ y# b$ M2 j( w( R' t5 M2 x
! g' h" _7 e, c# O d$ e- R完成上述設定後便可以啟動 smb 服務/ f* h6 `7 x1 O
#/etc/rc.d/init.d/smb start) f( \ |7 r1 u3 J5 P) p J: p' N
; V; m7 A$ L, [4 {0 Y, v Starting SMB services: [OK]
$ G' z' j0 @; ^7 ?6 r8 L
, z8 S! `' @) `) M3 L Starting NMB services: [OK]
4 S4 [/ X: J! y, X
7 i( j: y2 ?1 t3 J. h4 Y; {! }0 _檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
S4 a$ S: T% `& m8 E- q#netstat -tnl: h7 G0 `7 U1 T, ]
- J D5 ?; ]+ c$ J; w Active Internet connections (only servers); x: v# V6 E# D& a, K9 [
* B8 k( R. k( s" X2 u, e8 G
Proto Recv-Q Send-Q Local Address Foreign Address State: _3 K' j0 B& ]7 V8 `+ K7 I3 ^1 X
: W; R% ~( {* M: V1 w7 v tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
8 E# Y/ G( p4 b1 N3 ^7 b* @# b9 q
* q% C9 `( ?) P+ x tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN7 E$ l+ q3 [# F) O, ^' v
8 u1 n& M# L1 W: F A3、Samba Client
- N5 s& P( f0 ^9 @4 C以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。2 M; D+ n1 I3 O" W
8 P( Y7 y6 U' x- _' x( k dWindows Client8 F6 a; F, H, Z0 ^/ {: {% a- X
: K% x3 W0 u/ w. `! Z3 ? @. P8 D上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:. a$ k) S3 u" Y' K9 x
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。4 R% ^ f" c& N; g" w2 }; B
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。! m7 ~* ^4 y& X) a
/ H- }3 R3 C- |若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):; ]( ~+ n6 x5 u- p
% H- @0 ^: c6 L
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
! _# X: p9 Y( w0 Z h' z: T! S net use w: \\Samba_Server_IP\home* k# J! T4 D0 k6 z: }
& R, W8 [5 ^' l1 z; T方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)' }$ g$ Q2 W* p
net use w: \\Samba_Server_IP\home /user:user1 123456& e2 w/ p' m& }: n/ H
0 q' P& P, B9 f9 u
CentOS Client3 B. K* L4 Q, ^' g- r0 m
4 Y1 |$ |6 X2 t8 r
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。' T# O. c2 h/ w6 m
3 Z& P* V6 s" \方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
% d- Z3 ~3 O' y% Q6 T3 j0 J, d- w9 i) nmount.cifs //Samba_Server_IP/home /mnt/home -o
$ @+ d/ o1 r* V E+ i
# m2 q( F- a+ T1 @7 c方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
* V& a9 z& P' ^1 `1 i; `mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
6 i/ N2 A# R7 u- ?" p( t: U7 L8 F& R- v
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
: @9 K3 A1 q1 q# s& I3 ~umount.cifs /mnt/home或2 \: a& ~6 F/ C& z: [
umount /mnt/home
2 F- k1 t* r, C/ k/ E2 h0 `: A3 ^. @; P2 R! g$ C
4、CentOS 存取 Windows 分享資源/ [5 H2 R- P3 o1 x
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
& m# M5 o! f4 H& c: r8 B
( {) N: ]( I9 F; TWindows 電腦名稱: user1-XP3 Z* w) t" X6 }6 g) f$ q
分享資料夾名稱: Shares
; I6 ~! T1 @# x" i可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)! h; [' ]8 G9 w* ^; t' f! }5 t
可存取 Windows 分享資料夾的使用者密碼: 123456
7 I3 L- Z3 h& q, O2 {* P
: y3 t; R: p! Y e/ KCentOS 掛載至本地端檔案系統: /mnt/shares* t! F6 i% U i, O Y& o6 O
CentOS 帳號密碼檔: /home/user1/secret.txt
3 D0 u1 M: @2 i+ d& k安全性權限設定: chmod 600 secret.txt7 J3 O8 X& u6 ]9 {
, J5 m, h- m3 ]1 r了解後我們修改檔案系統設定檔 /etc/fstab。
: x7 o( H% h" w. W$ Z#vi /etc/fstab
& ^, a* ?! N* B1 k+ `! x, ~, F# c9 R* f+ P5 i
LABEL=/1 / ext3 defaults 1 1
7 l5 ~6 U: P/ S+ F4 F* d- W2 s) ]0 ?8 g
LABEL=/home1 /home ext3 defaults 1 2; k$ ^! n" @" l/ y3 m* Z
0 ^5 N( `7 O/ _% |3 t2 j: L. a LABEL=/tmp1 /tmp ext3 defaults 1 2
& u* O$ c; Y" ?, x/ Z; `3 L
- _2 N, \' Y+ |1 j% C( } LABEL=/usr1 /usr ext3 defaults 1 2
0 m( m6 O3 p# b7 }1 c }4 o/ x, b. l2 Y' n+ {6 @5 d) O$ s4 x
LABEL=/var1 /var ext3 defaults 1 2
. w7 d) S8 [! \7 n. K/ P! [2 U- G" a8 p5 n7 e2 A
tmpfs /dev/shm tmpfs defaults 0 0
* @) v; M$ w0 X- v: v* u* J( g7 v6 }. I
devpts /dev/pts devpts gid=5,mode=620 0 03 V# x# j3 o4 z" ?
( O" ]% I# R3 s- J
sysfs /sys sysfs defaults 0 0' s/ V4 _6 _7 J- L' w2 U9 a
" g8 ^# N: E. F
proc /proc proc defaults 0 0# V0 L' f2 U+ }% b
% Q4 R8 u( \' H( b2 B. o LABEL=SWAP-sda6 swap swap defaults 0 0
7 r$ y3 r8 K/ Y( E+ U5 F% P. P/ K3 u( Y! T+ ?6 H; d: ?" H: F. A
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
# k9 X2 T J3 e9 t2 {, Q4 G( c v$ B1 N& B+ f$ K
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
8 Q# q' n6 Y4 u, w9 U#vi /home/user1/secret.txt8 U1 e4 X- {! [
& j" G o0 ^0 C9 y- D8 t+ [ username=user1' J, x/ j9 _4 X7 l/ `
6 M+ t( D8 X; ]$ J6 Q' }
password=123456
3 s7 d9 k) x, e0 N9 q$ `' h# O
5 N2 X* U) L6 r1 y/ }2 R+ E設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。% \0 k: M7 N9 P; j* ?. r0 {
#mount -a //讀取 /etc/fstab 更新2 P: f8 o; X/ [* w$ b
5 G$ R' T9 m0 q
#df -h //檢查是否成功存取 Windows 資源* ?' S4 U' z* v. D% y6 A( x
, g ?( Q! G# _6 {4 X: Y! f Filesystem Size Used Avail Use% Mounted on; o0 W/ R$ G) M' R/ F" z: S5 Z3 a
; Y( m$ X! c1 Z1 Q' i
/dev/sda1 9.7G 2.3G 6.9G 25% /# H7 m z; i- ?/ m m' f4 S
) a3 R) j6 L# a8 \& S/ u+ g
/dev/sda7 414G 211G 183G 54% /home2 p$ Y5 J% X. d& p" p/ W4 W* \( l
# W; \ x( @) S- g- [" U& w /dev/sda5 4.9G 139M 4.5G 3% /tmp
4 p- h3 P) [" O6 X& l; K
4 l5 u# V2 m" f+ H /dev/sda3 9.7G 2.3G 6.9G 26% /usr
; Y: B+ Q* B) T7 d: E) s ^4 s1 q) E% j8 G. T1 {9 q% y
/dev/sda2 9.7G 255M 9.0G 3% /var
1 w: ]9 M) M# Y3 |3 ~2 s) B; J5 T% E1 x1 i: }4 p
tmpfs 2.0G 0 2.0G 0% /dev/shm6 k& \/ ]6 b) p9 S" l5 L4 E# i/ I
7 B3 S" Q4 m3 u- G W
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功# f' n9 L9 X8 B2 G& u
. E- x7 }+ L Z0 F; b( F- V" e[Troubleshooting]
% [. o) ]9 X O0 E9 D) O從client連到server端時出現error:
( Z7 y- @. I/ D1 u" y" Msamba mount error(110): Connection timed out
) |$ N# }% V" B: Q# C2 g一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 4452 B3 J1 S [$ q- ?- s7 U
" z) s2 y# E& j8 c3 w5 F; ^# {. B
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:! _% U) W. \! _, W7 Z
2 i6 L$ A6 A1 T2 m: h9 J6 U/ m- X
用 yum 查一下有什麼 sshfs 相關的套件:
. P5 R' N. I8 j% `8 J# yum search sshfs
) I D# G5 [7 y=====================================================================) O; O- C8 X$ B& a, _% T: p
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH' s: `' {) m2 y/ r5 ^: y* n
安裝sshfs:% B4 Q4 e7 ]4 ?+ A5 p3 I
#yum install fuse-sshfs
% @5 |3 S& ^$ |3 r0 P6 U建立掛載目錄:4 e' B3 K B& k3 r* ~( ~& B
#mkdir /mnt/temp
; }5 e! [4 a9 q' N- v9 t$ Y: I用sshfs 掛載遠端的目錄:
* N% t3 k3 g7 L C C#sshfs -p 22 root@192.168.1.2:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
( z1 N6 A/ {8 F/ x8 E: \root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼
) Z) w7 u- }# G, {$ {$ ]. ^正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的2 V# h: P( S/ J
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
; z6 A7 R# q+ }# G5 l8 t% x3 B3 l& W
帶上密碼而不用手動輸入密碼
2 C$ y1 q9 l" |6 A: T( s#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp
. B/ g6 N5 w- a. E1 ~6 h h註: 如果掛載有問題,可以開啟 debug mode 觀察過程:" \2 \+ C2 |+ h
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/ /mnt/temp2 O6 S4 z! m8 \% h
- [! s1 g9 P$ `- ?- V6 b
以一般帳號(非root)掛載時,出現error :) V6 J% C0 }( G( n) X
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
6 b( V7 [8 A# D9 _. I' r' ~9 Ols -l /bin/fusermount( q' q" j; G9 P4 c1 d `0 k
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount+ X7 `& i7 x% o- R
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse8 Z# X5 x% u" J, R
. K3 Z- M* o( i9 Q! D4 {! U# Y! P$ {4 r可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)7 \7 ?% V! `4 w' u* w$ P9 E
5 q+ R3 H8 `+ \# J' |) m& ^/ G
2 T7 }. J4 d: m& t( z# @* }
|