1、安裝及設定
, [: ~8 s0 L6 C5 G8 p$ A分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。( Z) Z8 ^7 p( Y: D7 f y
$ G4 I8 Z$ Z: Y0 d( k
2、Samba Server
" I/ |3 S8 @2 @: h6 T' ?3 O: F步驟1.安裝 samba 套件
8 {8 `$ P- t ?- B- f0 k: t1 W' H, G6 F9 r& Z! d* m
利用 yum 指令來安裝 samba 套件。- M/ i3 }) p4 X# j4 Y
#yum -y install samba //安裝 samba 套件8 r: N9 u5 m/ m4 u9 R% j
1 J* a4 v% N$ d
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
& f/ I- Q) B& h+ Z/ B/ Z#yum install samba-client samba-common cifs-utils
4 j4 Z" P! v: Z! [3 w. B$ V( v6 ?$ @$ M" l& I: H: [1 P
步驟2.修改 samba 設定檔 (smb.conf)
|/ }1 b% K% D
0 U. g8 H( B( h/ x修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
; N+ x8 ]4 P9 X/ L' Z#vi /etc/samba/smb.conf //修改 samba 設定檔
( F+ y9 y: G* D/ T) C! t6 y% r- Q6 ^6 l& F: D" K! b0 t
global //通用設定) |& b+ T& \$ O8 C, h2 I2 [
$ I s; E9 U+ ?$ x: z' D9 Q netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
# F/ B7 {0 [9 p, |2 Z/ J3 o& B( L; \- }; J, j# B* N P
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱+ K; B) i$ }( _; ?
`3 R1 a$ X6 A" _. L4 C- q
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源- M2 f: q6 Q3 A8 j7 g) Q0 V
+ _2 Y6 J9 M' _9 ~3 B hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
, D$ o1 f9 Y2 ] M5 m; y7 v, h; s+ m) ?3 e; q. t5 u
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
4 v1 W7 u1 j" d8 |* O* g* E4 F2 u- F, Y) j
encrypt passwords = yes //是否對密碼部份進行加密 S7 @) {+ P; }. }( }
/ }# L* s3 c [3 I# ? display charset = utf8 //Samba 上所顯示的編碼( ~6 V* M7 {: K/ `- m+ K
/ Z! i& {) b+ U7 E! j) L unix charset = utf8 //Linux 上所顯示的編碼" L, j9 [8 u: Z1 W
# G# Q0 T; A& d0 ?- E dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)5 B/ R) Z" L: X( G2 S2 S
7 w# f) v. p# H$ S& y home //分享設定,屆時顯示分享資料夾的名稱
4 k& C/ Z+ l1 }3 ?- `7 R' @; }5 \. }0 ^3 m, g& `
comment = Weithenn Samba Files Shares //分享資料夾的註解' A6 O/ ^$ z4 M& j/ ?- L6 i7 A
% s& m8 e4 Z! `1 Z- I. l path = /home //分享路徑/ g2 A) y* w A: L% w# E+ u
" C" l8 m/ |" a9 m' G valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源: H" S6 s/ w) E4 R8 L4 B
+ ?* C2 G# S5 p, {+ S; _( p public = yes //允許使用者登入後可看到此分享資料夾
& C7 i2 i6 w' C, X5 k. G! X
9 B7 ^3 L" q7 H( |/ [ writable = yes //允許寫入
# X0 p1 L6 } @: {3 z2 ^* E$ d$ Y/ _& V; q% _1 Q9 ~
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
6 q3 V! g: e: ]$ J* a' m" a2 g9 |, p9 u' ~. ]8 Z2 w; M
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
: e% z1 j, h2 H& i3 _. {6 j$ j( R4 N1 B6 D! O% }4 \
8 ~. [5 c! F+ G( b, o- |
步驟3.建立 samba 帳號
8 Z2 t g/ q9 S1 l. b0 I, y6 S/ u, n9 w
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
& P* `" D( P" q4 c( j7 r#smbpasswd -a user1 //建立 samba 使用者帳號 user1
* F* }" Z! r4 F& f$ \0 H+ n5 V' H3 M6 i
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
( D6 E' o5 ^; [9 g. _: |5 b* T. M& K9 k7 h9 i' |
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
- B, S! j5 z. G
: i' W# G/ S5 J& b Added user user1. //新增 samba 使用者帳號 user1 成功
y0 z9 I8 q; `$ b( P' d2 |. N5 G5 l7 m4 w$ u2 `+ F
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
% r( P w# R% n4 O#cat /etc/samba/smbpasswd 或者+ J/ `# i6 c8 F) c. S+ e
#cat /var/lib/samba/private/smbpasswd$ ^3 H* X* c) d [
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :8 p3 o% T0 Q, J& a, y
: ~ w: W2 v2 L) n8 D/ Z+ W9 k
步驟4.啟動 samba 服務
3 V2 A9 X1 Z5 C- x( a3 v: O# n( O) j$ S3 r, k- L4 P8 s+ c4 k5 L8 F
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
' O1 P* s4 Q. g" ]+ O2 A2 \% D#chkconfig smb on5 F. T" w8 u! Y, Y
_! B# d) L# L7 K使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
+ J, z, r; J$ q" J% N#chkconfig --list |grep smb; i# u8 T l0 [1 @' c
) s5 _+ x% r7 I' {7 P6 B; R smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
' [% n5 |' m" g/ j& E) k: R$ n: M- s W5 w6 ]% h9 l5 m
完成上述設定後便可以啟動 smb 服務
: k5 J& I* K& D4 ]#/etc/rc.d/init.d/smb start0 E( E* T' I' @: j3 V6 L
7 u% J9 O. j: g9 o) C
Starting SMB services: [OK]
' i0 O R6 H2 m9 n5 J5 w6 _% ]4 w; e! L3 F$ J6 j( A: i
Starting NMB services: [OK] 4 v3 |: e [4 _' Z" i
' T" Z1 B& L% Y! m$ d7 ~
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。* o- @4 T8 v+ o! X8 H
#netstat -tnl9 t. I; x C4 E( s4 f6 G' `
& ^/ W! w x7 j Active Internet connections (only servers)
' R7 H9 k) I; t9 S3 N2 n# ~6 c; d5 ?& Y6 M J, t6 r6 d8 H
Proto Recv-Q Send-Q Local Address Foreign Address State
* d% a4 c* B# H% J, U* i1 N
\6 Y5 ?$ _. D( p" |. k: s8 Y tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN' t8 F5 S/ n& L N5 W0 K: \( ]- T$ z
4 |* s/ H7 T) n
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN/ t% g+ N) H! }7 B' I
Y3 d j+ d! t# r
3、Samba Client3 z/ g+ Y0 n$ h9 {" r
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。; ?" R1 y) H7 f$ C
5 C; N9 V9 k k0 }Windows Client
1 \( |; v5 w0 s: N- j" r, j) ]7 `
' ]9 F- ^, D: X5 s' e! j: r上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:3 O _; N T# {& a4 `3 l4 r9 T ~2 x
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
6 j- A, l/ P5 @7 u! a. ]驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。' m* {6 a" Z9 u
; M6 n6 K- j0 ]+ h. v* F
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
- I0 z( y6 X! P! [ {7 n$ @! s* o9 m% T- ?1 c: N# P# o( ]4 k
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
% r* k! B0 M" u9 J6 y net use w: \\Samba_Server_IP\home$ Z# m; U- v: ?- E+ E. Q
& o) y) y0 R' S8 u+ A7 r
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
* w0 k# H% }8 g% A0 v7 r7 ` net use w: \\Samba_Server_IP\home /user:user1 123456% A' r( R2 i$ y. B4 |1 j
& g9 n' o+ U2 ~( e) j# G/ ?CentOS Client5 T' |! w6 \( V+ T' o& g( z/ ]. c
# s" @ e" \6 y) p0 Q3 T
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
0 {8 y% h- w. Q6 G
# F1 q, b6 j2 l方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
" P, _2 l9 {$ W! g; ~4 C4 Nmount.cifs //Samba_Server_IP/home /mnt/home -o
0 A! E f* t+ x
! v/ s; o- \3 x& X9 Q方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)3 ` G, V- T- d* r1 m
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=1234564 b4 L0 j. r& L
1 N, m, u% v( \$ e% k: u( c若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。' J$ @7 W% u$ U$ l' }% F$ v
umount.cifs /mnt/home或* [$ Q" x, n% x) t
umount /mnt/home
& r4 e$ Z1 C+ J$ F; K1 S
& |. m1 p) @7 {" N8 b5 t) a' f3 V4、CentOS 存取 Windows 分享資源
! h k) P/ d* V7 T0 BSamba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
+ K5 d, n- I7 {5 q6 o$ Z! I4 I8 Q \2 v0 D* a1 k% }) j. T
Windows 電腦名稱: user1-XP
4 H/ z7 h+ g4 w6 s分享資料夾名稱: Shares! {* j* E1 E b5 r4 J4 E
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)+ v0 q& u: f; X' g% e! b: w8 t0 o* t1 ]
可存取 Windows 分享資料夾的使用者密碼: 123456
0 Z7 Y9 h/ q3 f6 Y
# `: s$ [' B4 M Y* qCentOS 掛載至本地端檔案系統: /mnt/shares/ J) T x$ z- F5 C% u9 }$ x( o
CentOS 帳號密碼檔: /home/user1/secret.txt
$ n' R5 Q1 n: ^/ g- d8 K, L安全性權限設定: chmod 600 secret.txt
7 g5 O: [9 y, ?3 X+ J
1 w% A4 w; U1 `了解後我們修改檔案系統設定檔 /etc/fstab。0 a/ {8 l+ S9 @+ i$ Q
#vi /etc/fstab
% g. e, o+ d& G0 x# L4 [& o$ R6 D4 O( B* }
LABEL=/1 / ext3 defaults 1 1% k9 Y3 S7 M9 ?' S
1 c& {/ U V1 B
LABEL=/home1 /home ext3 defaults 1 2, L Y: J# q; {: A
. ], g% Y2 }- r( t, J
LABEL=/tmp1 /tmp ext3 defaults 1 2/ z& ^, U1 `' g
5 S Y( ~& |) j4 M4 ^# {, A LABEL=/usr1 /usr ext3 defaults 1 2
9 l9 y' y' K! P+ i% j8 U% o/ B6 V* a
LABEL=/var1 /var ext3 defaults 1 2) W# I1 g# N" @/ T2 R+ h. k
7 M0 ^& \* R! U tmpfs /dev/shm tmpfs defaults 0 0
7 F) ]4 i) h3 N9 H! C0 P" ~# C7 W9 H3 L% ?0 P3 X
devpts /dev/pts devpts gid=5,mode=620 0 07 g+ i9 Z; E% C5 I
; V, n" _6 j# ^
sysfs /sys sysfs defaults 0 04 q: r0 \* P" ^
! o5 P! p+ n$ e9 z8 U
proc /proc proc defaults 0 0
# b5 Z, w9 ]8 K5 ?1 n( W9 q- E' C* }$ G: ^; V: A
LABEL=SWAP-sda6 swap swap defaults 0 0
: O8 Q5 @$ _7 f. X; o
. r" W+ @5 W9 i5 Z3 v! d //user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
' J6 T3 J3 p! P- X) J
; b4 F) {0 N9 g5 ?建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:& \) K! e! n+ `- W0 Z2 f/ ^
#vi /home/user1/secret.txt9 @* m% P/ m y5 ]& e
6 g" j6 R( S; G9 h
username=user1* o. ]# l4 v p0 V
! ?( D ]. g! N2 h0 j password=123456
' `7 O" Y# u' ]" r2 {, u" O1 L3 D1 F# O/ M% q1 t6 K5 n& ~$ N7 u4 |
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。% H1 ?& U7 B9 k+ b$ E9 X
#mount -a //讀取 /etc/fstab 更新& M; |$ g' c% K; S1 n: x* B
- l. X8 z A8 E#df -h //檢查是否成功存取 Windows 資源
7 [$ h# F1 V; y
6 \- u+ S" S5 M/ Y9 q- A Filesystem Size Used Avail Use% Mounted on
V6 X) H8 ]* ^6 [
0 n7 r/ h2 p D' e /dev/sda1 9.7G 2.3G 6.9G 25% /
: q7 }+ e2 n" Z/ q4 U Y1 S0 N q; [. r" Z4 n0 }! I
/dev/sda7 414G 211G 183G 54% /home- _& }" y. S$ z& J* Y2 I# z
8 ^: g2 ~ T) [6 b; u* r
/dev/sda5 4.9G 139M 4.5G 3% /tmp: J9 k: f2 w" }$ r* Y$ G
! z9 ^1 S3 y& x) R+ ]7 n* I7 ~5 B /dev/sda3 9.7G 2.3G 6.9G 26% /usr
) M; D1 A' z/ G; m7 Z$ [: v2 c4 y0 ?# B& r9 c! s* n5 _# ?% z# i1 f
/dev/sda2 9.7G 255M 9.0G 3% /var4 m" `+ K3 k( c% r3 L9 ?9 d4 @
% z2 U% c4 |+ n' v% v. v5 B tmpfs 2.0G 0 2.0G 0% /dev/shm
2 k! T/ u! q1 ?# b$ P; F2 w% n) q
) S8 P% L" E O1 ^ //user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
% Q) g; s7 i1 T, a# y, w" @" S* `4 s) [" `
[Troubleshooting]# } f4 c/ n8 k/ U4 ~4 T' B8 }) {: Z
從client連到server端時出現error: , F0 w5 v4 @4 O% B
samba mount error(110): Connection timed out7 t. C) f% w- ]% b/ t: s; y
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
( R! f+ P6 x# Z( B) ~1 F/ c6 e
$ ?8 M8 d6 k0 Y D至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
+ t: n+ i* V$ i4 L' }, B' i/ A" x
/ r# R4 @$ h* M- n- \0 K3 u; ^用 yum 查一下有什麼 sshfs 相關的套件:0 Z h$ \% q( k3 ~ f9 @8 y' {* u' R
# yum search sshfs
8 f6 |; U4 [6 e: B7 G& `0 C=====================================================================
# ]- u! l, H$ `- rfuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH: P) t# o! J) ?$ O! N
安裝sshfs:' S* u! M. q1 H/ w d
#yum install fuse-sshfs
# O/ k! j: f, w/ _建立掛載目錄:: y/ l7 Q) T. F2 W) P* i" C
#mkdir /mnt/temp
& ^! x5 Z7 O( {* \+ t7 b用sshfs 掛載遠端的目錄:
& b( b; n. Y7 [5 C/ }% g' L% s#sshfs -p 22 [email protected]:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
. Y6 C' E i: h+ i[email protected]'s password: //接著要你輸入遠端ssh root密碼( S9 u5 C; e7 I7 I2 e& k* ~
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
- d4 B2 S; s% w# b3 v如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
u9 i" ?" u; v( [6 _0 B% C+ O' b% L
1 P9 F& `+ X6 g% h! y& J帶上密碼而不用手動輸入密碼9 h, h. c7 M! N7 X h8 d
#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp+ s& K3 ^- p4 @6 }' b' r
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:% Q8 O; A. m9 I
sshfs -p 10022 -o sshfs_debug -o debug [email protected]:/ /mnt/temp& }( x/ B4 H2 v9 \( D8 j3 [
+ K. o/ ?( B6 P5 J: X
以一般帳號(非root)掛載時,出現error :: I, i9 }( I% D4 ] S8 L0 R6 E4 x
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
. F% H/ N; u* W2 z+ dls -l /bin/fusermount
3 G2 o' \1 e& X. R- b* ?-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
1 _4 c: O2 B( T; F. m故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
* {8 n# G( Q6 \/ e! s4 B: G
5 \, W/ F* Z5 ?$ s ^7 o" W7 V- r可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)$ @: x$ E% H6 S/ v% ~9 [2 P R, y
7 b( B( q5 ?" R; a8 Q" N* |$ m# \" P- L/ Y& S+ Q0 R
|
|