tid=66566&1、安裝及設定2 w# h1 o; C7 \! h- s& i
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
7 c; i$ U% D2 z9 @' y( Z9 K
5 _' h% n0 o( K5 a$ U! K x" H a2、Samba Server0 R% i c, x3 P% D. f
步驟1.安裝 samba 套件
0 ~" `" c' j+ e4 o) }& H
! y; v+ J2 y/ t+ P利用 yum 指令來安裝 samba 套件。" D7 M+ Z. j! O* b M- W: U
#yum -y install samba //安裝 samba 套件3 D7 h# x. z v" m* M* b* }8 g9 _) Y" j
/ Z: m% h* p6 L G5 A: y8 h1 W
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: : B* f' u! I, h
#yum install samba-client samba-common cifs-utils7 t" i1 C( D1 L# P D
, S) R$ b0 N3 C2 G7 F/ A步驟2.修改 samba 設定檔 (smb.conf)
1 }% M a2 c& N+ \0 D( `/ j4 W Z
0 v( f- v0 p, W' ?0 I2 @修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。, e. f' h( u9 p; _) F2 A, _/ H
#vi /etc/samba/smb.conf //修改 samba 設定檔
/ _1 Y* I, T1 T1 [1 p8 {5 F. f5 g* x* V
global //通用設定1 ?8 G$ v4 z$ ~; h# L4 J8 k
B: O' k. I) p" [4 V netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱. a( q J* h/ I$ [/ g& w
# x( ]5 V0 L" T1 y( K' H
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱6 Q( S' F! R7 r6 ]' K
; r- M3 k- F$ e' f2 y n$ F% {2 x
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
) Q0 [; Y+ b; O. S/ ^" ~
5 [$ H( n( \1 S- J* B4 p hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
9 j, T0 b" O) O+ U7 D
( s% ^/ f0 N2 e& i& p0 n/ E security = user //安全等級user需在Samba主機上擁有帳號者才可登入
; m7 X/ v( F2 q7 K9 ?! ?: Y) p# h4 N, h! D3 f' p) O
encrypt passwords = yes //是否對密碼部份進行加密
* P5 i6 w* W3 I9 i! z5 }. p" ?9 }8 Y) Y; u# `
display charset = utf8 //Samba 上所顯示的編碼
; W& A4 e* W1 A" z
- q+ C! E* W; } unix charset = utf8 //Linux 上所顯示的編碼
& q6 z; G" J s1 c
( ^5 m. Y* h5 h. C& d9 k: m dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)+ |# L0 d# W' i) t9 [2 V9 k9 Y
- I. Q) L8 n. T# j home //分享設定,屆時顯示分享資料夾的名稱
0 {( ^1 V5 {& i/ P' B- C, ^' L' i3 l$ Z+ Z6 o1 d- Y; _
comment = Weithenn Samba Files Shares //分享資料夾的註解" ]! q8 w. z8 B- ]$ t2 \0 \
9 e$ y* p& h% E; d
path = /home //分享路徑) q4 h) n6 S7 ]# S& ^( {- ~
1 w1 T2 |# l! g) L1 o( I% U
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源$ Q }4 \! B2 t0 x, z' s: U! E
+ J# B5 m/ }5 D* v7 t+ U, D public = yes //允許使用者登入後可看到此分享資料夾
' Z7 S8 g4 j- Q
7 R7 d8 |8 Q" x2 V3 ]6 ~ writable = yes //允許寫入
$ K# V# {& ~. e e6 F$ I
( ~2 f0 _1 F3 U7 h create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
( x/ h9 ~( G) S$ {& l+ N
0 q$ U; _* Y' `5 d/ T directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
- D% {8 S' Q9 x. p4 i" V
- y! r. o8 _4 e/ _$ r0 z6 E
7 @8 ?! W; W2 M, z步驟3.建立 samba 帳號
# o9 Q5 `! n9 I; G* q
* K5 s) Y" O+ X# F設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
% p( }( F9 A' U#smbpasswd -a user1 //建立 samba 使用者帳號 user18 j7 ~# d2 e5 A
- r% |3 O1 z% E* l New SMB password: //輸入使用者帳號 user1 的 samba 密碼3 @1 M6 ^6 \2 S7 u) b" ?1 s0 v
/ z9 W3 Z0 }9 c/ |( H Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼; Z' d2 U/ ^9 t! D5 R
7 P+ o' h9 K, d- Q* L) K Added user user1. //新增 samba 使用者帳號 user1 成功. L1 f. s5 ~% U4 x- U% x' A- G$ H
1 h7 x, s2 H0 o v" c' ^
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
x0 E% g3 L" V& j#cat /etc/samba/smbpasswd 或者1 D& L% p( J1 X2 i
#cat /var/lib/samba/private/smbpasswd! @0 w3 G, ?( ~1 Y6 g- X
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :# l9 i9 U+ z5 ?! Y# }
3 o; u8 `0 e8 D6 P7 e
步驟4.啟動 samba 服務' `* J+ J" j( b3 W0 u0 o
- i$ T, A+ ^' F M+ E
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。& r9 V6 O. H: I% b
#chkconfig smb on
* V! F. h3 j; L! S2 F: i9 p6 ~3 }2 H
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。+ A: S9 h4 K5 |6 K" ?2 e2 O9 p
#chkconfig --list |grep smb
4 s: O( e4 O0 p* S; M
% \$ f9 m0 `+ B/ V) m! f' ~ smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off" g; \& j7 F/ e# R3 Q5 i; Q; k& q2 @0 |
( F. q- k& [; \完成上述設定後便可以啟動 smb 服務
+ U2 H9 t+ G2 r9 |#/etc/rc.d/init.d/smb start
! v Z2 B9 l9 e+ g8 A, T
+ x0 b5 X: w" Y6 E" e) L b Starting SMB services: [OK]
# U g5 R. E9 m+ Q6 n: I' v7 n0 q0 V! N$ i
Starting NMB services: [OK] + K* l9 w3 `* i; P
( m5 K* B4 v8 D# G3 c
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。0 ]# x( p, @* }' t; a* T
#netstat -tnl [. I! s! O. P1 S# H/ x
, K7 H! s2 x$ X6 m) S Active Internet connections (only servers)
3 m/ t; B" D1 U8 c9 i7 X
6 K$ V" L: b6 E& F+ v! T Proto Recv-Q Send-Q Local Address Foreign Address State+ l9 |) Q# F: i7 d6 D
% m4 w6 g2 ]# w0 D5 Y# p2 O1 a: k
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
$ k4 ]- D: Y# d* B) C7 g/ c& w4 x" f- i
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN) k& [; n/ `# `7 e$ t t. K1 S
) g/ s( W5 ?% }) G2 e
3、Samba Client, ~6 R" B: s2 c
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
& \3 T" @0 Y: u! g/ h7 T0 K% @7 F W* {3 i! u' v! M, S5 d
Windows Client
2 O& ^0 h( d3 n: ~9 V& o7 ]0 r/ `9 { T' R( ^0 B3 V) C& ?3 K
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:& m4 n$ S" q2 C: W
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。7 p) g6 @" e7 x# K7 l
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
- V' ?. Q+ Y" o. t; B& E
2 p# R7 r% f8 M. U. J% J0 g若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
; }' d/ @* \ ]( H; D0 h- w F R2 X
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)' A* ^% _1 e; p0 p. o9 b' t
net use w: \\Samba_Server_IP\home% u% x& `1 p8 v6 g# k
; r0 `6 i7 `. x, k1 {9 R; k方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料). ~7 w, F; U3 S( o2 M' T
net use w: \\Samba_Server_IP\home /user:user1 123456, u9 `: t. @) |4 s. Z4 y
5 ?8 r! l6 \' W) x8 d. L
CentOS Client6 M% y; ?7 T6 ^! T( {+ S. ^- U7 b
+ S; t# n$ i. [2 C. T" l8 V0 W- B% V
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。. w |& L) a3 S9 S. a- J
2 J$ t( f! E5 l+ x9 s3 K0 s
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
4 |0 }% Y- |7 n7 H1 l" x( Nmount.cifs //Samba_Server_IP/home /mnt/home -o+ i# \9 R7 n7 @) J' `- p
4 F( @7 y4 Y4 y8 X
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
c; A6 V6 A: Pmount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
) l, e, C+ D s8 } E% \( U4 K2 q. l
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
7 \" f; \9 \( M2 x0 Y" [umount.cifs /mnt/home或6 j; a+ f9 P" M* D7 W
umount /mnt/home( s" W$ r4 R5 ?, P
) T* G5 T! M& w( Z: V" e
4、CentOS 存取 Windows 分享資源9 T. a3 l/ c/ q
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
% D. W5 I* n0 q; `1 E3 l: A; p
8 t1 g: i9 {# ^0 N' y8 c' FWindows 電腦名稱: user1-XP% y3 f8 a; U* l! I$ o I
分享資料夾名稱: Shares
# T! y$ l+ U+ Q _2 w可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)) `7 ^+ u5 i% d1 K6 ?
可存取 Windows 分享資料夾的使用者密碼: 1234563 ? q3 d9 q4 x& \( _: Z
' T6 ]9 d- ?, @" l. a
CentOS 掛載至本地端檔案系統: /mnt/shares* I: |& O' v: o, y3 H
CentOS 帳號密碼檔: /home/user1/secret.txt
/ J" ]: X/ ^4 t# o! e$ [安全性權限設定: chmod 600 secret.txt
8 E, b6 X g5 b+ c1 [
' p1 x! x3 N4 m# x+ }6 l/ f' d. c了解後我們修改檔案系統設定檔 /etc/fstab。
. h% @/ O7 g) c#vi /etc/fstab+ R, n7 l3 |8 q' Q2 X# l
T; w M7 H( Y2 Q4 M! R LABEL=/1 / ext3 defaults 1 1
6 T4 Z' K9 B( } s1 S3 g" V- ]8 V, ~
LABEL=/home1 /home ext3 defaults 1 2, F0 v% Z3 d F. u5 ^# A
& B @' z$ e# P* n$ C# `
LABEL=/tmp1 /tmp ext3 defaults 1 2
. O# _! e' E0 _
( |- F+ R5 ]7 h. V3 l9 y# b LABEL=/usr1 /usr ext3 defaults 1 2* U: ?( b, w2 [
% i1 j2 b3 ^, v
LABEL=/var1 /var ext3 defaults 1 2
8 L; u) o3 p$ r' t# A5 |: W Q) E7 W' w N, _
tmpfs /dev/shm tmpfs defaults 0 08 b/ ~. ^9 s& H S* K6 A6 L
, |/ f6 \% w( l/ k3 I( N0 P* t devpts /dev/pts devpts gid=5,mode=620 0 0
% D/ O8 M5 \+ Z5 a5 \: Q6 I; X, |6 N8 ^9 ?" a
sysfs /sys sysfs defaults 0 09 b* K9 y, \$ Z8 l% ]4 n0 x6 L0 c
# |$ y' x. d6 e* c, B2 E5 v: T) M" |
proc /proc proc defaults 0 0
$ p6 Z3 J* C$ H; i: y6 o
2 \+ o% |" ]. r" q; f$ o LABEL=SWAP-sda6 swap swap defaults 0 0
& E+ q! q. U, M2 M, S4 C P! t
( }# A- C% l, T //user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
- x! J6 T0 \" ^( k( }$ @. u. L8 H: ]. i$ |- O% q
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
( |& t4 W% {+ q#vi /home/user1/secret.txt# u; P+ p# l: H( x
- }) y, u- u ]1 w- ]6 s3 W
username=user1) T' J2 p! X$ `( t, I) K' \3 t6 B
9 C5 s( n" R# Z; M6 T1 l/ s password=123456
- w) L. i" y5 {' q8 x6 q6 c7 D4 F% j. |9 k( M
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。- ?8 ~- d, D$ V; R( O
#mount -a //讀取 /etc/fstab 更新
( [ x- T, b+ X( U' n
& U4 S4 S9 \1 L2 W#df -h //檢查是否成功存取 Windows 資源6 b, O0 B( Z4 ?: A& j( O6 |; }
5 w+ d9 k$ ^0 D- P0 c/ V+ e
Filesystem Size Used Avail Use% Mounted on6 |# U. G1 ]/ u2 ?: F* Y/ C
% A- i9 @+ i/ X2 i* k1 F. P$ _ /dev/sda1 9.7G 2.3G 6.9G 25% /
3 W9 l' I! Q& y. |5 T( l7 y, r- d$ D
7 F3 s3 J1 e! n8 _% a$ ]" [ /dev/sda7 414G 211G 183G 54% /home+ j; K& g0 m; ? Z3 T7 ]
+ L8 f2 f: k0 Z( l2 [, _
/dev/sda5 4.9G 139M 4.5G 3% /tmp
( @1 \$ y5 y+ u( m4 a7 i4 K' q5 ]) w! S. h
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
( E4 x T8 i4 t" _1 Z- i
0 S4 e9 d7 p' y& h" N /dev/sda2 9.7G 255M 9.0G 3% /var) O# z f" F* x n0 O+ \3 O
, A, F- O6 B9 L C! M M
tmpfs 2.0G 0 2.0G 0% /dev/shm1 S8 h ?% D" H0 g: s. m; o
# B* u' ^2 ?3 K* @
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
( A) {$ f9 b! l2 c7 G/ ]8 u+ J/ h% ~& [# l7 _, ]. C9 e
[Troubleshooting]5 t5 Y* x: x- ?" D
從client連到server端時出現error: : S) L& j0 p( e0 T# ^3 r0 h
samba mount error(110): Connection timed out; E1 h7 F; Z1 J/ q7 q1 N# K
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445: @- L3 n$ N2 q/ a
6 G6 z L9 d9 G至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:" {' \& L3 q1 L6 J
. i2 u, f7 {8 t# r
用 yum 查一下有什麼 sshfs 相關的套件:
2 a4 Y4 \: B/ Y* j5 [8 z$ v# yum search sshfs& j! d( V: E2 [8 h( E
=====================================================================2 _: V ?* H. J p B% K& S9 j
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
( T5 C$ c5 Y' V" U7 k4 ?3 k9 M" d6 m安裝sshfs:) }$ d5 t: g1 i& y/ h; U
#yum install fuse-sshfs ! T9 N$ Q/ q+ ~% U# b% {* |$ _. V
建立掛載目錄:
$ U. h- u. R. b#mkdir /mnt/temp
$ M! r, M# Q% t" S0 d5 i用sshfs 掛載遠端的目錄:
5 b' s- j' y3 c+ D/ a; Y#sshfs -p 22 root@192.168.1.2:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄) i$ h: J- n0 e
root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼; Z0 _: d( o" Y. W$ v
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
( W4 `' F% E3 d# L如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
3 ?! N. V% x! Y+ l
1 V5 w% F0 M2 g) S" n$ |帶上密碼而不用手動輸入密碼* @0 ?5 m+ ^, y8 U- C
#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp
8 `) S' c, v' w( a4 l5 d1 N註: 如果掛載有問題,可以開啟 debug mode 觀察過程:, f a. w1 P2 w+ F% q- X& T
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/ /mnt/temp
& f# F5 {: F) g& S; w" z" A6 r
. Y2 _$ ^0 J; l* w& \以一般帳號(非root)掛載時,出現error :( i9 c I$ B8 [' _2 d- g V+ c
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限+ [! e1 Q: u2 w4 q
ls -l /bin/fusermount
0 h2 @$ h. Y4 q- e. B. l- t9 u6 r-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
. t# Y7 N. U+ [4 _, W2 ^' i X: q故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse$ S$ Q0 Q9 `3 C4 n. S' h
+ N d' p" c7 B# W6 o可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)% g* K& x3 b. P b W
, `4 _' J+ ?) T+ D; P
- Y2 V' H5 }+ g; N: H1 R/ \0 H4 I |