tid=66566&1、安裝及設定8 @( ?7 N" \. A2 M9 r5 I, |
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
4 h0 ?, h1 L! L8 |' Y& ^8 [
6 D* n9 d! q. J' A1 C: b2、Samba Server
: x' S& B+ P' l5 f$ I! ~步驟1.安裝 samba 套件
. G7 n. \/ q" W# D! k# A7 Z2 D T o) }0 Q6 g V
利用 yum 指令來安裝 samba 套件。& G- a5 s0 [9 {* X: S% C
#yum -y install samba //安裝 samba 套件& M6 n/ ~! l: j) r' [: |
; U* Q I. y. D% {7 m4 E* [1 K***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: 7 c4 m( g5 q" k5 k# [# {8 y
#yum install samba-client samba-common cifs-utils
- |7 a8 E9 u: b' q6 r& s6 K
6 O; \: T8 d9 t: n: l- y) i9 G步驟2.修改 samba 設定檔 (smb.conf); w# A1 R* q6 `" `% d
& c5 \9 [# C3 s, W0 c" a) }修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。) g* D$ j& Z, _+ j. H9 Y3 ~6 X; A
#vi /etc/samba/smb.conf //修改 samba 設定檔% `; Q9 H6 x9 g* i
0 s4 w/ J& y Q) ?
global //通用設定
- a/ g' K$ w! F1 i- P7 b2 h f6 ]. S$ F2 M$ G2 ]
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱- L" t6 H/ l5 J" J5 ?) I5 h7 A
: P: N5 O9 {. S
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱) [( d; Y2 N/ k+ U8 T* p$ @
7 N n3 V! R2 ]5 i% N) F# y& Z hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
: l8 N% J# v1 w% _, ]$ _& z* o, P! P. `6 E; W: d5 C# B) d
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
+ a( O) `, t" n; l( R& o, S: I# y7 e# N4 D/ Z
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
* e- Y7 ?6 M0 b1 t1 a$ j
3 g- e5 \& d( R* }1 [0 E9 V encrypt passwords = yes //是否對密碼部份進行加密5 P3 Q1 {4 a; g' o. e: n- {
! O3 ]1 \5 y6 j4 f
display charset = utf8 //Samba 上所顯示的編碼
% S% P) a( q2 u" q ]0 S4 n+ f: V% R) R0 c. [8 u% W. J$ N8 _
unix charset = utf8 //Linux 上所顯示的編碼
6 ~% |! f7 [! B, @/ |0 \% U( t. o. N
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
7 v( s& l, a9 F: x! \1 e
# A5 F' W: P6 ` w0 Q home //分享設定,屆時顯示分享資料夾的名稱
' ^/ s0 H, C0 A7 R7 I6 [8 {# Y- e( O1 j* d
comment = Weithenn Samba Files Shares //分享資料夾的註解/ x+ m( |, W) M; C
% K8 |4 [/ K! J7 o. v7 f3 L path = /home //分享路徑8 H% P3 q5 h$ ]- s: J3 N0 d
0 e; _- g9 D' k4 `% [! r
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
/ V# k: [% R) m/ @3 q5 O2 V! z( K. i( q' p2 I
public = yes //允許使用者登入後可看到此分享資料夾6 L. t [1 T" N1 E. ]( C" c
( E3 N! a. K2 X; l: @ D* k writable = yes //允許寫入
+ x! K. E5 W8 N
8 T/ J- {2 {) T: e( Z- o6 ` create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
9 q, o4 M, Z5 L4 Y
5 F5 B! T9 }, y2 r& B- s directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)7 F5 _. p3 K+ f. d7 f/ ]
5 c# j) Y9 ^: C4 \
. Q: f; a) ~3 |; R0 N( K: J步驟3.建立 samba 帳號% ?/ u K5 \5 m2 B3 e
* S5 v6 a* N5 s) j" p設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。0 Y% i+ g( n; y( \. H: V
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
0 L! l( V- l6 a' N' ]3 [5 r
' q! I4 {' l: X2 I. ` New SMB password: //輸入使用者帳號 user1 的 samba 密碼0 z, ]. ?4 S: M( x2 B. b
: P9 M3 j5 N9 `; r% D. E- m Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼" v' F* @3 q: N2 A
1 w) ?& q2 N7 r* A& p; I7 l Added user user1. //新增 samba 使用者帳號 user1 成功* s6 {( @& v. P
! P- f3 K" u1 S9 ]+ d; R9 O& H- g9 n
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過3 _0 l' ]4 K" m6 f/ k8 u) ^# {
#cat /etc/samba/smbpasswd 或者* h( W. \; S# l
#cat /var/lib/samba/private/smbpasswd* T( `* K$ ]9 n4 K6 |. u
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :6 m# k- K, Q! M: f
$ A I h+ W3 ?: O( N
步驟4.啟動 samba 服務
( `) h7 G+ V/ Q V
7 M# B' z1 R H0 Y4 Z; D) R在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。( V7 x; F9 `6 X" C2 C
#chkconfig smb on4 i' g2 d+ k9 o2 {4 k- b% t
- n3 r% ~$ N# @: F: t6 U' O
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
! h, G; i$ x8 _$ l/ y5 M#chkconfig --list |grep smb
4 @8 @/ r2 w$ q5 x) G" X7 I# R% O' F9 {$ n5 ?
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off: }0 P5 D5 P* [0 D. m
6 g1 Z$ Q7 S' }( q& _0 }完成上述設定後便可以啟動 smb 服務 W" B. n2 P0 }; D3 K: `. [
#/etc/rc.d/init.d/smb start
[8 D% ^* H% B5 x3 ?2 C
8 a5 T- i/ ]5 v9 L% o# F* p R Starting SMB services: [OK] ~4 n$ O4 h% E% e
; z* p7 L$ O, ^4 U C! K
Starting NMB services: [OK] 6 n( a/ f5 j% ~( {" a9 J
. A" U( w: j) I- b8 o
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。6 ^; a g1 u% `" K2 F3 a
#netstat -tnl7 V9 j; A9 ?" q
1 V# |, Y* h3 q/ {) K4 g
Active Internet connections (only servers); ?8 {" ^& V! {) f% V
3 b$ p( G9 k1 D1 |6 n, @) ~
Proto Recv-Q Send-Q Local Address Foreign Address State
2 x2 t6 q3 @& s: f6 ^0 l
( y* O9 }& e1 R' x9 X( b tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
. V, M: B2 P) U! L3 _+ l' x
) o& B% a6 I' C X tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
. |/ b1 i: w& X: ~8 ]
; ]' P; E, z# y- b+ t. s6 z3、Samba Client0 D+ W5 L; a) v% v$ y5 `
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。& Y: z: v+ X. _3 w" _. e
/ `2 i* y$ {2 L/ _8 w9 ?: F
Windows Client/ W* I3 V% P, I9 Y
7 X* i5 L; A3 t4 J/ U
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:4 r$ G0 h k4 ^! X; B
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。9 h; _7 y# |: D* E( Y
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。5 o; K+ R& f& S Y. Q
0 h& c, k% z- N2 u9 Q' r% ~若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
/ H( U4 Z- w& U5 p# E% R2 f) X2 Y- o5 }% ~0 O A1 f& C
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
$ I I0 C% b, f% I# E) C9 y net use w: \\Samba_Server_IP\home* |* R O9 }, ?9 e. z
; n% M) @0 K% S& A+ L+ G0 g方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)# J( }) g) w' J* A" x4 _2 z2 j# P
net use w: \\Samba_Server_IP\home /user:user1 123456
( i2 R, s; C% p3 E1 q
1 E5 }8 Z: u6 ~CentOS Client
6 P; Z1 q5 ?+ _/ ^7 ]' r" L
8 Q$ U" p/ Y1 W若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。8 w4 p9 ^9 @0 ~9 F
% L9 I: L( C5 J; R方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)1 R0 p* V1 v( h! T. ~% j8 O
mount.cifs //Samba_Server_IP/home /mnt/home -o: F. ^: r! |) w; }9 m' a) j+ w4 l- o
4 J: m$ p3 i2 o& K7 y' t
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)( O: f% g( w( ~; i% B. |' F% C
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456 E/ r. V/ e" s7 M$ k, `
, A" p' _* L. S' A0 m7 g! Z Y
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。3 _! v/ t4 b+ u" o; ~, y9 N
umount.cifs /mnt/home或
# E" Z4 J: a O3 {umount /mnt/home. `) s0 ~2 B" x# G+ @7 g0 Y
" j1 l' Q4 w/ F7 D+ J
4、CentOS 存取 Windows 分享資源: ~ N, g+ e1 b( }7 x! x {2 {
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
5 V j. H6 i: L+ L0 S) |9 m; M v# G( m) F) ?, m( F
Windows 電腦名稱: user1-XP( ]( J8 e, N$ l
分享資料夾名稱: Shares3 L8 H+ G. x @6 f8 f+ F" Y
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
) h* X* i, Z( D# R: a4 q2 i可存取 Windows 分享資料夾的使用者密碼: 123456. g' Y. |! k* w5 q, c; s' p$ F
2 {2 ?4 S' M- k+ H% J
CentOS 掛載至本地端檔案系統: /mnt/shares2 ?" U. h1 B% I1 D
CentOS 帳號密碼檔: /home/user1/secret.txt A: E D2 ^3 u
安全性權限設定: chmod 600 secret.txt0 q3 M! {$ }# h" y/ D8 p' g) D3 e
! n8 G" d4 H Z了解後我們修改檔案系統設定檔 /etc/fstab。6 H& s4 N3 Q3 a' R9 u
#vi /etc/fstab
5 [6 M3 `% F' F" L
3 J$ c- I; H' M; R% l9 g LABEL=/1 / ext3 defaults 1 1
$ W3 y! y! e2 E3 b7 n) n7 {( Y: y5 z* s* F
LABEL=/home1 /home ext3 defaults 1 2
4 W; c. S2 \9 J' `% {: C/ N* k6 w. r. T6 C
LABEL=/tmp1 /tmp ext3 defaults 1 2
# ^5 i* u) J9 R1 [8 d9 ]2 B5 }9 w! e& o' \; o) f5 I6 T9 O" m; V* P
LABEL=/usr1 /usr ext3 defaults 1 23 `% w/ M1 y* |0 a( `1 @ O
$ l0 z% u# {( }( I- q" F
LABEL=/var1 /var ext3 defaults 1 25 e! K# ^( J/ S( i
6 n( T/ K$ w* v' Z1 t A5 |, Q tmpfs /dev/shm tmpfs defaults 0 0. r8 z2 r) N5 O+ |. D
" i |, ~0 I( R2 k: ^
devpts /dev/pts devpts gid=5,mode=620 0 0( I% S0 A+ g7 a( r: e
2 i; l$ p! ^9 f8 _) i8 |
sysfs /sys sysfs defaults 0 0
/ a4 m) N- V/ {$ U8 ^$ u& v2 H& U5 f3 |$ y* F3 K7 C
proc /proc proc defaults 0 0. k8 r/ n+ i* P: z# J
1 Q7 i- O4 s& r4 M2 ^1 i* [
LABEL=SWAP-sda6 swap swap defaults 0 0 s& A& L q: x6 U3 h
/ B5 e, L- r4 ?, \& i //user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
( k' x- K! g( M3 a0 B& |/ h( [5 K. W
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
/ u: R5 `3 @* ?( U' U#vi /home/user1/secret.txt
C8 `; j9 k/ T" ^$ z0 y0 U
d7 F# n7 I4 r8 j3 h# Z username=user1
5 e; w- E" O8 t9 Q* y1 I
: _/ \( j( j8 t( ` password=123456% }0 V- K! v4 `6 Y+ F
0 g- A; B9 q3 h. x. v. z
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。, q1 E' G- F3 A) j4 D: p
#mount -a //讀取 /etc/fstab 更新
" p1 e! J) r. R% p' t/ i
% y( `$ r! z! j0 V! Z# v#df -h //檢查是否成功存取 Windows 資源# v- s# t5 P- P# K9 _
' q, [2 l' |6 y Filesystem Size Used Avail Use% Mounted on
$ J; M" B& f+ ~0 m* D3 l. E4 S }% X" L; L$ T4 j c
/dev/sda1 9.7G 2.3G 6.9G 25% /0 p: R$ t2 P2 ` f
5 k0 O' W+ \* i5 j
/dev/sda7 414G 211G 183G 54% /home; \ x" k1 U* p& f: b: b c
/ v8 X- c6 B) b* G9 O( H" A
/dev/sda5 4.9G 139M 4.5G 3% /tmp
5 K, V1 l: C2 T: q- l: p: t& C+ r- R( |) V8 J- P, y
/dev/sda3 9.7G 2.3G 6.9G 26% /usr( v. A# [$ `! C0 `" Q$ Z' _( J
& M- G3 O$ K7 F/ P) W$ h
/dev/sda2 9.7G 255M 9.0G 3% /var
/ ^. u- N- v0 r0 n- p: C( _+ h7 W5 L f5 q5 I# P5 K
tmpfs 2.0G 0 2.0G 0% /dev/shm/ r1 U W! v' i' ?
% e8 _% b- c" y
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功3 _1 N, ^9 a! V, J) x. g3 v8 ]
& n4 _2 F' Q, m! R5 e# ~, z# D b[Troubleshooting]
2 h* c3 S2 e) I7 r$ I* K- q. D從client連到server端時出現error: % h; N8 P! V/ |9 e
samba mount error(110): Connection timed out( u0 \8 k2 |+ O- e( J
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 4454 e6 W: ?6 m% _6 p4 J) T
* H$ f& O( O) H
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:( ~+ p9 T' {* ^- c, R( K
& o3 q" O! P% n2 x$ ~; G' N
用 yum 查一下有什麼 sshfs 相關的套件:
( [9 o, H8 u6 F8 g" M" y/ X# yum search sshfs) X5 c/ Y* z U# P0 H$ E8 w! q/ _
=====================================================================
! J. w a5 m4 i% S% X1 pfuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH' c8 q% O3 i; ^" ?0 X- Z
安裝sshfs:
% M* M# p- I& f* L#yum install fuse-sshfs # o1 a6 e! m% _% A# W
建立掛載目錄:
' ~% y8 h4 i) F6 }+ n/ ]1 z, N#mkdir /mnt/temp
& @* b: k' ]7 h4 _" V+ d用sshfs 掛載遠端的目錄:
# o# P, e; m7 C7 d. i#sshfs -p 22 root@192.168.1.2:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
! X1 f9 ]7 _2 h. R9 O* Eroot@192.168.1.2's password: //接著要你輸入遠端ssh root密碼
8 W7 f& j- e9 M. g" K正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的" y6 Y( G7 A1 Q% h# A
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便) K9 m2 s7 v- _9 ]( h
. S& R8 D" W( P1 {* b
帶上密碼而不用手動輸入密碼
4 J, a4 w! i4 J H( L#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp F0 |7 l% j" a" E, j" e4 \
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:, ^6 q8 f5 z# I* r* x O
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/ /mnt/temp
1 N: X5 m2 ~ e* F# N. B' h% r5 q6 X/ m5 _9 o
以一般帳號(非root)掛載時,出現error :
|1 J/ l7 S. P }0 qfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限0 \: B: m7 `: A6 ]* w7 ^- D+ U% {
ls -l /bin/fusermount, K; [7 o& u; R& O
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount+ t5 j; w+ V+ g- T3 l$ V
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
/ f2 P; V7 f' F1 {! @: B3 X# s! G" O9 F% ?1 I2 _3 H4 j
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux): v" ^* T5 [: a
/ l6 {* g0 H, H/ o9 @
1 w2 O3 U8 k% n$ D+ f- e0 H
|