52AV手機A片王|52AV.ONE

標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs) [打印本頁]

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定! s) a" S: E% O% H- @
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。) J5 N$ T- a9 i. b

8 n$ B# Z0 f, s/ S1 @) n  r& I1 D# A) \2、Samba Server
- G* e! x/ \6 R6 i步驟1.安裝 samba 套件
* F$ }1 L1 k- f
( a. w; p1 v" y3 M! w  X- n利用 yum 指令來安裝 samba 套件。
/ Y6 R/ k4 Z" \! t. [" z5 h5 `2 V#yum -y install samba    //安裝 samba 套件- j: \# g) k0 W3 s; I
3 w3 j" u8 v) ?3 L! k% _
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: 1 a1 |9 f  D' P
#yum install samba-client samba-common cifs-utils. v; u- e2 a1 P7 c+ k0 m
( {0 x5 G; I; {# q; [% O  @" l8 Q
步驟2.修改 samba 設定檔 (smb.conf)
! G( V3 l% F" d) P. [! r# G8 J# C$ c7 g! E: N6 i
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
# S1 C, K7 c+ Z" [' y& f$ c#vi /etc/samba/smb.conf  //修改 samba 設定檔8 L! r: @6 z. B, y$ c

, D2 h- y7 q4 R1 f3 {' ]0 J0 a global                                 //通用設定! J: ~/ t$ C! x$ {$ i, g8 z& p
' G' U% |) c% ^9 U
netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
# L& F  u% [7 ?0 Z) Z
! X7 J- x5 C- S2 j workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱3 Q% H: R$ m" Y( @

! l5 {* j+ ^6 ]3 S# Q hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源' t# l' H: \1 z" j* f
3 `( S, q; Q# l0 l: R' {$ X1 X
hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
% g- N. ?( f+ J- }7 ~" d& m1 y! i# c$ Q+ \0 O
security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入: N- B9 h' U' {% x
5 C; A/ H. T+ g! X
encrypt passwords = yes                //是否對密碼部份進行加密# Z+ P8 n; V. T9 ~! A1 U2 G' I, s+ o% U/ \

- w# [# ^" `, d5 A8 c display charset = utf8                 //Samba 上所顯示的編碼; t1 x( [6 a' Q/ B6 {' |
8 g) j- v5 |3 ?$ K/ F8 Z9 T
unix charset = utf8                    //Linux 上所顯示的編碼8 O. M( l. G% O

# T! h" i( M" _  K3 g dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)
2 W4 t- ~' \. g5 @1 k6 v1 }$ k* F; G9 c$ p, m- ^
home                                   //分享設定,屆時顯示分享資料夾的名稱* h5 \/ d2 M2 V. \
0 a! g$ N' a4 o. y) G
comment = Weithenn Samba Files Shares  //分享資料夾的註解
  [" F9 X7 G& m8 \& W8 p) G, p
/ _4 {1 w0 J; W1 E' M8 u path = /home                           //分享路徑: T4 ?7 ]! Q% X' M7 a
5 V) u% i7 d5 j- e0 r0 ?: x
valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源
7 _, @, k, O# M# j0 T
; A/ s- E" H! K; n0 e public = yes                           //允許使用者登入後可看到此分享資料夾
. [4 l# L' _9 \
& B9 a5 `6 ^; i1 z+ U8 X' O writable = yes                         //允許寫入
1 n8 i2 ?$ w- E. m6 h: m4 t9 U
+ Z" F' K  i* v) l2 U- J- W create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)
. t+ ?, k+ k4 u
: k! }" A* {( o0 x directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)# L5 w& y# W# ?8 }  \  n3 u

' q1 U  i6 W( b
% a$ y4 W  t0 }, k步驟3.建立 samba 帳號" x( |5 H; t2 d8 R
3 \! J9 _' i) Q" {/ P* M7 s
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。: V8 r, Z* H8 L5 a
#smbpasswd -a user1  //建立 samba 使用者帳號 user1
6 t5 [. L. t" }2 H! u1 I. q
# {8 K7 I  i3 B& |& \9 G1 G New SMB password:        //輸入使用者帳號 user1 的 samba 密碼
6 d' a- l. h0 Z; j0 d' r, m- c  }0 O* H5 [
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
  U; `4 i: M! C8 z2 ]: T9 ]; f! P( T+ U4 @$ z( g  H5 t
Added user user1.     //新增 samba 使用者帳號 user1 成功
* N4 i7 X+ t/ L7 N  J; S
# g! y& q( e6 a9 B5 K新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過  B9 J( ^+ ?6 \0 X
#cat /etc/samba/smbpasswd  或者
" g3 R. {" K1 r" O7 q#cat /var/lib/samba/private/smbpasswd
3 H/ w8 W+ x# K# u9 F1 O7 g user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :
8 L# p/ Z$ C" K, M6 U" Q8 c& a2 r2 p+ X9 L& b+ v* v/ Y( S
步驟4.啟動 samba 服務# l) I! d( J% C: K; s: Z
' q. \5 o. |- l# W
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。6 I  f6 v" y7 @7 s- [
#chkconfig smb on. R2 W! A( ^( D0 n0 F1 p
; H1 S# B5 m$ s1 `+ M% [- `
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
6 }7 \& j! c: }: E, X6 q#chkconfig --list |grep smb
2 K, ]0 l& y- y3 C
% d9 W# J  A# r, c' h- A4 r smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off$ G& T6 N/ [/ {; e6 N9 S
) H2 m! ?, H3 m4 D1 w
完成上述設定後便可以啟動 smb 服務
1 \5 n) x, K3 F5 j( p#/etc/rc.d/init.d/smb start. A3 K% C, t7 @& ~3 ^) P1 x# D& {& U/ ^
: T+ S, @+ ]% ~5 s
Starting SMB services:                        [OK] 1 ~' E$ B8 V4 _# a
# O) p8 w6 z2 k2 B1 z) f8 o
Starting NMB services:                        [OK]  
! l8 Q" _7 Y8 t3 ?7 O) H4 I# N) v* Q' ], z6 d. \$ y
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。1 h! A& a) v) Y! z3 P  Q  _" A; A
#netstat -tnl. {: x. Q  L1 r0 W
8 S- p6 Z8 |  Z! c
Active Internet connections (only servers)
6 t) ]+ G( }, a1 a5 P: x! p
: E1 H# ?( c* S- r! _& m Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
- [2 ~# Q; j" z! X) Y( b/ L. m7 P# c* t8 V5 y
tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
( T" Q" f" N: ~5 {# a2 M  W
+ D4 U" H4 l! N" Q! {+ S tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN
1 k' c! O( S9 [  U5 t9 ^' F1 c
, G$ M( {* y2 [) v4 F+ v3、Samba Client7 Z0 D8 H) N3 C+ f, {$ h
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
1 M5 a8 ]6 x1 u2 \+ ?, F: [, ?% w5 W+ J; B8 U, N/ s
Windows Client0 @/ X9 y, U: P% `, g3 N$ L
) G( B# r  L, E9 ?& m7 Z( B  S
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
3 v- l$ G  [3 {7 M! ?檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
2 H4 W4 g2 y- }  L驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。' z+ B4 A, @! X& g9 T6 z
5 ?: F( b% @9 F2 ]! o
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
# m( \# G# D* K5 N& i
8 J* ]) [) _1 @5 @' ^: V& [方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
( j6 |; p. Q1 n7 x$ g% P net use w: \\Samba_Server_IP\home$ s  b; @8 V! X9 D" {
! U* r* h9 g" Q6 S' J, }- q
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
! |2 |9 l1 j& |8 M* B net use w: \\Samba_Server_IP\home /user:user1 123456. C& R3 z% W+ g: o( J

( O) E0 ]+ s4 }/ mCentOS Client5 {0 d/ B1 ~* V9 E
* ]/ n# G5 L& f* p- c
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。7 r4 O# p" h% N/ }0 s

3 Z8 }5 ~1 G' v0 H! _方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)# ?- O) s9 T4 U( n3 z/ ~5 b3 l+ ^4 S
mount.cifs //Samba_Server_IP/home /mnt/home -o2 w1 z* C  g. f2 y
- C/ T0 a- `# D* a5 z% g  a
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
6 Q" o. ?  s) Y) X; tmount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
6 s# a; m2 ~" e2 V
5 j* x9 y' u+ k6 [; a若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。! T* E+ }" T" ~& }. o5 ]" a8 U
umount.cifs /mnt/home
& w0 }- ^: D+ g" e
umount /mnt/home
) v+ H3 n7 A+ j% A% b" L& d( k
' c( Q8 ^. @. d) v% _4、CentOS 存取 Windows 分享資源, O* K/ k5 g: |
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:& E! b6 _' E$ _* D- p- P: {4 Y
  F# v( p+ K5 u' M5 r# j4 Z5 W( P
Windows 電腦名稱: user1-XP; F3 T7 A8 |/ K8 u/ W& L
分享資料夾名稱: Shares8 o: U' {. `2 D% l) u/ g* `+ q
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
% i& Z$ i) R% U2 U% p: w5 K可存取 Windows 分享資料夾的使用者密碼: 123456
5 f) f) T4 Z6 I/ J* @+ O6 A8 E+ A8 r( E. `7 r; i2 q+ x/ K0 _
CentOS 掛載至本地端檔案系統: /mnt/shares( M) k  E/ b! o, P
CentOS 帳號密碼檔: /home/user1/secret.txt
; Z; X4 M4 g* M; o2 z4 p) m安全性權限設定: chmod 600 secret.txt
+ h4 u/ y) x. c; n  w; b6 U! [. `: B' c
了解後我們修改檔案系統設定檔 /etc/fstab。
/ Q. |  y6 @0 e5 e- ?! l#vi /etc/fstab
/ _% D- [+ `& T0 F0 Q$ z% z  P1 z& i/ u" b4 S+ P2 D0 f
LABEL=/1           /        ext3    defaults        1 1- l& d3 d6 u0 {( V# C9 J

' H+ y. C2 L+ p: I/ V9 C LABEL=/home1      /home     ext3    defaults        1 26 S6 Z7 m% g; n2 g& ]( p' \  R

- [7 p" {2 R6 h7 p. s LABEL=/tmp1       /tmp      ext3    defaults        1 2
) m. _# w/ Q6 g3 N0 i" N2 R1 X9 n! |- N9 k3 X0 s& r
LABEL=/usr1       /usr      ext3    defaults        1 23 ?9 c! V# ]# A6 g

( }5 \& S- V6 R! q0 s) k8 h# ~ LABEL=/var1       /var      ext3    defaults        1 2
. M7 i3 x9 j5 u5 z) Z0 d
0 M% t6 k% X* u tmpfs             /dev/shm  tmpfs   defaults        0 0
. r2 V9 F+ ^; [$ O( X
! w! F9 f# c- O! j: h0 I% ^ devpts            /dev/pts  devpts  gid=5,mode=620  0 0
4 \1 }% u2 Q7 f4 c7 E7 o& r
2 k8 _7 M0 Z, e sysfs             /sys      sysfs   defaults        0 0
' g1 ]/ T2 @3 l- ]
$ w$ y: e6 S6 n9 T proc              /proc     proc    defaults        0 0& Y. [/ j8 Z4 ^8 Q( O+ D' s2 J% G& s! s

, z% _# d! k/ m; ~; Q LABEL=SWAP-sda6   swap      swap    defaults        0 0+ a* s# H8 E* y; M: E
( }* v4 p3 S: B) D! v) j' o9 Y! k
//user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行1 p. I9 S, o3 A$ M* Z- X
2 ^: h2 j" _! C# ~! |
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
3 ^. p' s" L. `& V* Q, F7 d: f% c#vi /home/user1/secret.txt
4 w% E" C) K9 }" v* |, z9 r: m) @' T9 A
username=user11 a0 m6 X  ~) l0 a# o7 k: A

, L8 x/ v6 c4 O- A password=123456
1 C1 `$ F' c4 d- W" W& V4 P- d& c3 @! j0 S) l
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。. c" t9 Y4 p- I* s! H
#mount -a     //讀取 /etc/fstab 更新) s) O; y& w) r/ z
" @" w& ~- {3 ]* m: K9 X
#df -h        //檢查是否成功存取 Windows 資源  T  E8 x, \. o5 [
9 B* l5 P) _" k2 w. C8 G
Filesystem            Size  Used Avail Use% Mounted on
# y; d8 T* I' V4 j* A4 ?
; _/ x. ^7 H5 u: p. ^ /dev/sda1             9.7G  2.3G  6.9G  25% /
# }( @0 C8 q* F
0 Z# D! O. k3 g, X+ G! z+ M /dev/sda7             414G  211G  183G  54% /home
1 \# ?+ J" S- j: `! a# D; @+ g- C
- B, a% c4 F# R6 n  d: M /dev/sda5             4.9G  139M  4.5G   3% /tmp
; w* R1 [1 P% K% D+ U* ^' D/ [* p
/dev/sda3             9.7G  2.3G  6.9G  26% /usr5 L& ?' ^6 F) A* _# G, l, C
: q. G) m2 ?/ s- I; ]
/dev/sda2             9.7G  255M  9.0G   3% /var
% O7 }! q, L! L( w1 v+ A# T9 M1 _# ]& A" l$ e2 V, j- P
tmpfs                 2.0G     0  2.0G   0% /dev/shm
  m" X0 Z+ w4 N( d7 E% K$ `& c# M5 E+ ]* j. z% c  G( r( w& x
//user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功

/ I! f" w& U; s+ p

8 P( u0 S5 B' }! t, K2 \" v. x7 Y[Troubleshooting]
- l! A' s' k4 Y從client連到server端時出現error:  
. ]0 y# S& }6 {# {0 N4 nsamba mount error(110): Connection timed out
' w7 }9 q1 J. Z/ U/ M# k* m$ t一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
5 G3 I# Q' U" ~
+ L' C- w% P: m, F
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:' p" T- K/ }7 |0 l% d. y' I

& m6 O' O) J6 W1 s
用 yum 查一下有什麼 sshfs 相關的套件:4 Q! O4 ~7 x, x6 y( J0 e
# yum search sshfs
# m$ I, E" C2 o  M. M=====================================================================/ q0 p- T& M; V2 n9 Y
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
) R: |8 w9 z7 X2 M& Y: k安裝sshfs:
4 k9 E& I9 v5 P" I#yum install fuse-sshfs
0 ~& Y/ o+ B- C3 u1 o建立掛載目錄:9 ]4 |' M5 P2 U
#mkdir /mnt/temp
7 T: }! s. b. B$ q用sshfs 掛載遠端的目錄:3 {0 b$ {" d' L4 F5 y
#sshfs -p 22 root@192.168.1.2:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄1 ?! ^- l5 C* E5 s2 w7 r. p8 b
root@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼$ a+ M, s3 a: G5 v# B8 H# S
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的5 e% Q0 L" c/ j+ H+ M6 W
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
6 V; [3 U5 p' U) J7 s% v" q7 I
% }  u1 Q4 Z# S2 Z3 @% Y帶上密碼而不用手動輸入密碼0 A# m7 P* |) 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. ~' K) F2 r( q0 Y5 ?
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:6 K" y6 {/ ?; O6 L$ e" w8 {/ ?
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/  /mnt/temp, o7 g  D* @+ m/ t

% X- _/ S/ }( y+ J$ v3 _以一般帳號(非root)掛載時,出現error :  d  Q5 x9 D$ k- t2 q
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
# u4 _% }' y+ kls -l /bin/fusermount3 l6 M$ i& u7 s% F- b& [! Y! Z
-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount
" O7 D8 L/ f/ K故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse: z. j# S% l! c6 \8 F  W
- X6 P+ X# o9 [: p5 V: \4 j0 [1 z
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
- ?6 Q  b% A% z4 ~( c) D3 d' A5 r8 _
0 l! p) r6 _5 L

作者: king383    時間: 2021-3-10 21:39
now the best way is to use WSL (Windows Subsystem for Linux)
作者: hoteddy0507    時間: 2022-3-18 16:28
原來如此




歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) Powered by Discuz! X3.2