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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定* e  F; |' G9 o  \9 k+ Y' m
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。4 N2 K  o6 a/ W  A

5 b+ l  Q5 B) J$ T2、Samba Server
+ S$ ^' ~1 c4 r: W% c步驟1.安裝 samba 套件' u3 u1 K8 J0 L: w0 F! B1 i) \
; w1 k3 g( Y: t( T% W
利用 yum 指令來安裝 samba 套件。
' k6 K0 l; R* {% z3 x1 P0 O#yum -y install samba    //安裝 samba 套件
2 A$ R. j+ e) Y& l
0 \% g& P+ P/ T  M  s' p9 b***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
* e/ m* F2 o5 |$ Y+ n#yum install samba-client samba-common cifs-utils% V6 Q$ i9 \$ j- V; ]1 ]# |* I7 F

4 v# @6 h1 J# c' ~$ f* H" `; ~步驟2.修改 samba 設定檔 (smb.conf)9 }/ R* C% A( M/ Y. {% {# E! K$ e

& _' z1 Z- a5 U, p& y3 T" X, ~修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。/ W& L5 ?8 |* K8 p" I
#vi /etc/samba/smb.conf  //修改 samba 設定檔, ]% y* e- c; `& e' C
( K" Y7 v, T% z* H% a* e
global                                 //通用設定
9 [/ l4 h7 i' y! \4 _6 a  s8 O( }4 }3 p, S: V
netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
, q" E7 l; W! }4 e
+ q: h1 M; ^- I$ z' T' g workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱
( y4 k' q$ u0 O3 M2 Y& X8 Z' E" |- l# }* J7 d6 O: \- z
hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源
" G+ j! v, w, i* O' n  O
8 G5 G  I% y  B  Q hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
/ k7 P6 I" |; V
) |  X4 h/ d' |5 R/ k security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入0 ~6 Y2 G' B) e+ ]8 R' k$ K# H

/ M, t$ X$ g/ w+ e0 `  K; f7 S encrypt passwords = yes                //是否對密碼部份進行加密3 [+ {% g( j! _# B' P, z) c
+ v3 S: Y" r; j! W, X
display charset = utf8                 //Samba 上所顯示的編碼) y  O7 {9 @& ]; m- V8 }

* c6 ~1 V) R% L$ Q unix charset = utf8                    //Linux 上所顯示的編碼
& I5 d9 x: ^! B9 ?5 O7 Y% x
* ~+ L5 ]' L/ l: V dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)
. j# d# F) d" k1 F  q2 ]8 O+ }2 [+ r
home                                   //分享設定,屆時顯示分享資料夾的名稱& C) p& S; ]. E
3 G) ], |5 T  J# @* e* j( j
comment = Weithenn Samba Files Shares  //分享資料夾的註解6 D1 e- T! S, I% f7 x  J
. Z8 D7 D6 r" ~
path = /home                           //分享路徑$ _+ }, d' }  _$ }1 v8 b& e$ n
- ?( v6 d) z: B9 j. V
valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源
! {  r$ |) m$ f! ~! m3 S9 d, P) V  L4 I! X, C, O( P
public = yes                           //允許使用者登入後可看到此分享資料夾- Z' J% M& N1 `8 P" R( N& D8 ?1 b6 h
4 F. g6 x. T/ ~. z* ?
writable = yes                         //允許寫入
( H- P, N% R. d- q- P8 D3 s9 R
3 w+ q" J7 y/ t% a) X9 c create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)
3 e: J# O2 r' D9 O1 i/ w' T6 k4 ?8 w  \9 D' Q: P
directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
7 s* \+ E; Z$ A4 I' v4 O: p, L5 n, o' O' N2 s/ {* {, C7 e

9 E6 g8 ~' I5 n* O/ y步驟3.建立 samba 帳號' D4 y: m9 I% Y5 q4 n, J# c' g! t; P1 _

) @( w: @; X4 c) i* `設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
8 M% d# Z6 B1 s/ T5 _/ I  I7 C#smbpasswd -a user1  //建立 samba 使用者帳號 user13 w, L1 }6 Z2 ^. @
8 Y% S1 u. E4 [7 c  V
New SMB password:        //輸入使用者帳號 user1 的 samba 密碼
) b3 f5 R- n" u
4 J. k- c9 E! |2 ^* | Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼( z5 j6 @* V4 I! T. y! @5 p+ W
6 i3 O" K1 d5 P! M! _% @
Added user user1.     //新增 samba 使用者帳號 user1 成功
. d/ i" }' B3 z7 @7 v8 t2 V- D& M4 ^& i2 Q, c
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
9 @  }, u) W9 ?5 d2 q5 M, i3 ?#cat /etc/samba/smbpasswd  或者
- I( b! a  @0 B. }6 o#cat /var/lib/samba/private/smbpasswd
: ~4 @) ~4 b) V user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :
! R2 I9 \7 c. t6 c; ^) h, h% ]- P2 I- Y
步驟4.啟動 samba 服務
) {9 v% P$ s2 r- a1 P. }# n. j5 ^8 {# [+ R" ]0 K) @( {* p: w
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
: H2 a4 u* S/ K#chkconfig smb on$ w' h6 B6 G& G1 _5 {
! @3 h+ H7 L5 e' c
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
, @. P6 `5 G) P9 J* {8 y# O#chkconfig --list |grep smb: t6 `/ M% O% L+ L
$ p% j: S$ l' }8 G
smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off9 g8 a( G3 d. b! k

" ^: W+ X( S( ~4 x7 U- ~( c) }4 W完成上述設定後便可以啟動 smb 服務( U" L* F: v- x9 c
#/etc/rc.d/init.d/smb start
' V; d1 m7 H" A$ n% V% F
- }9 H4 d' \, U- w Starting SMB services:                        [OK]
7 E% {9 l7 i, q* H3 X8 J2 ~/ x, I, _- R: v+ z9 R
Starting NMB services:                        [OK]  
  T' o' v5 R, H6 t9 m( n; k1 t  ^6 {2 B8 G7 H, W
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
" Z' c6 s/ [7 n, Y/ Z#netstat -tnl
# U4 M+ F0 v$ S6 g3 O1 z. o7 ~
- e5 T" B# p& {3 J* R  X0 M0 ] Active Internet connections (only servers)
6 p6 d# V; d7 h0 S) Y" I
2 g- U- |7 E5 _4 @5 Y  b Proto Recv-Q   Send-Q   Local Address    Foreign Address    State6 t, Z! B; U3 o  i& G

; ?+ X4 z7 A' P8 I* t% W9 `( s tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN1 E8 _- E% l7 o/ O8 a- O' p

! M; C6 W0 T' @6 W+ I- b) m4 \ tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN
' x2 r/ T6 u5 n- o, Y+ @/ g
; A+ }& ^  i1 g1 h! d% J3、Samba Client
; m9 s. Y. A) Q7 ?1 [) G以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。2 J! Q0 G/ b% p4 I! e
; W5 H, Z* s' T! B9 `+ L
Windows Client
: Z+ e1 G5 r' m& `- B4 ]  _9 J# U9 M( t6 a! |; I
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:, C* X9 X/ [5 U0 V
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。9 @+ P% }8 ~* ~8 T
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。, r) _+ k. l* R/ J

+ X, y% M7 F8 U2 C* l0 g- ~若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):0 I) q; |9 h9 {) \7 b6 I

' ^; ^  d+ O# {( {' M7 \$ ?方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)) y+ Y$ n7 [9 G/ K0 Z
net use w: \\Samba_Server_IP\home
8 r% n. J+ ^1 b. n. L3 e
; x6 C: M8 I+ E& ?6 u方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
4 R( y7 L+ t" L net use w: \\Samba_Server_IP\home /user:user1 1234567 S; H: j' l! M4 b+ N. h# s
! _( Q0 H/ ]: s' k
CentOS Client
" t: a$ H, T0 I: x' G0 Q* M, i# R+ C1 a, ~7 S% z# j) ~  h1 `
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
8 v7 j- X% y+ u" |/ B9 T& T2 e5 p0 C. @& s2 ^
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)+ J0 k% o; N; M8 X
mount.cifs //Samba_Server_IP/home /mnt/home -o
. i4 \& Z- Y* {2 ?1 t3 r- s8 O2 T' D: T
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
( I/ X! a2 k+ S+ P3 amount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
3 L, o: i9 K4 P" r
- r# n! j# z6 J/ p) N若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
% Q& K. l; v7 P4 Pumount.cifs /mnt/home

2 z" G( {+ n4 w; p- D) T$ E6 |/ ]umount /mnt/home' [7 E9 o7 q: o

  b) E6 d- n; P3 f7 z4、CentOS 存取 Windows 分享資源
' k: c* r0 m$ e4 @' o! K$ T2 MSamba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
/ E  ^* d: K6 Y7 K  V
- X8 h& M) s, a8 ~Windows 電腦名稱: user1-XP! G% E4 {4 F3 Q8 |; i+ l
分享資料夾名稱: Shares
! M2 w5 @& J6 @% Z9 p可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)* R, p( \+ W+ v4 C( @- S
可存取 Windows 分享資料夾的使用者密碼: 123456
6 K8 k; z) T7 h& g  t, C+ g
* h8 S& v2 C$ {1 UCentOS 掛載至本地端檔案系統: /mnt/shares
% v/ A0 S! B% U$ c6 s5 n5 ICentOS 帳號密碼檔: /home/user1/secret.txt
3 ^, q+ A' A" G' A' u  @安全性權限設定: chmod 600 secret.txt
* X8 `& y6 M& E1 s) H& I
: _$ a. T* f, B" _了解後我們修改檔案系統設定檔 /etc/fstab。& |& O* z! O7 e5 _+ n, H) b
#vi /etc/fstab
1 ^( a' R: ~  Y% c7 r" H- v1 _3 ^, G' {
' a; ^  T2 `9 E- A- J; \ LABEL=/1           /        ext3    defaults        1 1
. u0 T' ~4 I0 C( |% Y) e
6 I2 V* F: g! _ LABEL=/home1      /home     ext3    defaults        1 2; P' _! X/ A7 v

$ b) |* D  u9 \( Q. b* G LABEL=/tmp1       /tmp      ext3    defaults        1 2$ L& H  X( e0 f" }' {2 ?
  L. Y1 R7 z5 ]2 Q- k
LABEL=/usr1       /usr      ext3    defaults        1 2
# m% {" W  Q# ?) L# S* [3 I* S8 g6 z; m: `/ u
LABEL=/var1       /var      ext3    defaults        1 22 W  d5 f' M% K6 H' L' l" W" L( C

! R1 [9 A& [* {" i/ i5 n tmpfs             /dev/shm  tmpfs   defaults        0 0! O, ]" t' \' b* t2 F

  h3 H9 c/ }9 E! P3 t* B$ r& s) r devpts            /dev/pts  devpts  gid=5,mode=620  0 0, L2 M; [+ a' R' t

  S2 W5 ?8 t& x) e9 d: a1 D! w4 L4 k sysfs             /sys      sysfs   defaults        0 0$ r  |: _9 S- K7 L# \3 K. n% J5 H
  k" W4 `& a0 g; c* ~, Y  ]
proc              /proc     proc    defaults        0 0! ?! H' r# @$ g( T; ~6 Y7 O
2 O7 F) j1 {- n( ^
LABEL=SWAP-sda6   swap      swap    defaults        0 09 y! w$ E4 L( z1 e* P3 B

& O" n% |$ |' m) c) g; I //user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
& \% ^5 c8 u0 x: ?: ~
( s* _: d# k* v建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
: |. |, d2 R: y#vi /home/user1/secret.txt
( }$ e! G4 t4 X- l
/ N' a  M! @6 z* s3 w3 y username=user1
- P. i8 E+ q: i! s% h4 v* @% s8 M6 Q2 a' L  T* w- P8 V
password=1234561 c+ `5 I4 B) E8 p! E, O( \6 R
+ i: a) z( E+ n/ O& l( }  h: h
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。" ^  `' F- l- F4 S- ^
#mount -a     //讀取 /etc/fstab 更新
: K9 E+ j, c0 k% j( [1 @6 y# Z
: r" B) ^5 P2 B4 e+ N: e#df -h        //檢查是否成功存取 Windows 資源3 r! f$ t3 o, ^
& i3 e$ H; ]6 j% }. k
Filesystem            Size  Used Avail Use% Mounted on
% F% r" ]& a" ~+ @4 w' w1 |
3 v+ c: W% n- n5 g! [, F /dev/sda1             9.7G  2.3G  6.9G  25% /
  T: }7 z, T1 M% o! q2 N4 _9 T5 W3 |% b) b! r
/dev/sda7             414G  211G  183G  54% /home& F  q2 Q. q, q; E9 ?

# d/ F+ d5 l  R! W /dev/sda5             4.9G  139M  4.5G   3% /tmp
7 y7 Q: q6 |+ o6 ^& P' C9 |1 u
  }1 x0 E- E3 P& k5 v% O" ~ /dev/sda3             9.7G  2.3G  6.9G  26% /usr! k  c( `# O( v% W

2 a: Q) S& W4 i) `' z- B" h9 e /dev/sda2             9.7G  255M  9.0G   3% /var& j' [& J) l1 m6 `& q
' q/ ~1 w4 S/ |; ^; A% Z8 H
tmpfs                 2.0G     0  2.0G   0% /dev/shm8 L$ t# u7 e  I& N

# W  T+ Z2 |/ F( a //user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功
5 n6 I( |6 W1 u' T' m

/ M" Z7 r) p* ]: C5 [. W5 D[Troubleshooting]
6 Z! P$ l( K# O1 u從client連到server端時出現error:  4 C+ ~) s. e9 J  G) \
samba mount error(110): Connection timed out
6 N( H2 p: O1 O% B0 ~" e  ?) B一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445& P) Y) l, M; C$ p: o0 s2 Y* j

4 N# C$ A- ~6 m# K至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
9 b  p, ~: V1 q
- x* j4 N$ B; x7 _- Q" H. K8 e
用 yum 查一下有什麼 sshfs 相關的套件:  ]& A, C) {; N0 v) Y) C- h! H1 t
# yum search sshfs
3 M6 b* k' w  |! v+ H; t=====================================================================
4 Z# P) d' r& w( G# U; Ufuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH0 Z8 F: [; r# o4 \8 {) q5 z
安裝sshfs:
' f! g2 U! f3 F4 d#yum install fuse-sshfs
+ i+ i4 r3 J* N建立掛載目錄:
- _( \4 l# I( |9 A; G#mkdir /mnt/temp) j5 ]' ^! x( W' [
用sshfs 掛載遠端的目錄:
) O* h6 @6 ]1 h+ c$ [4 a/ C8 v#sshfs -p 22 root@192.168.1.2:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
& F/ H# ]5 \$ p2 c" Wroot@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼7 f+ D' F; d" f/ p; K! q0 H8 _& U( y* u/ C
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的2 t, V+ ?& {9 e* |6 ?
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
* q/ q# u( C* F
% g; X" \  y; F' R& t9 }9 g5 i# ^- j8 d: c帶上密碼而不用手動輸入密碼
  @$ E) M! `3 p$ @0 }% z+ I#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp
4 j% s* E3 ~* J註: 如果掛載有問題,可以開啟 debug mode 觀察過程:. A# _' c) _7 @! y# ]( z/ u
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/  /mnt/temp
; }6 W: j1 \. v8 P' D2 D

0 U, }& O9 |4 B9 E1 i; i: o: R以一般帳號(非root)掛載時,出現error :
; L3 A4 S: n2 n% d9 }3 p6 Q7 \3 ^+ jfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
  g( _. B& c3 c2 l% Q. Y4 `ls -l /bin/fusermount- P# c- _2 A4 t
-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount3 Y" l! e. F0 J2 _
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse) K1 a  _0 P( S* Z
1 @2 I; x% u5 j
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)4 E" N/ b1 u; O

' U3 E- t; P' D8 R% ^
) t2 s$ I# z$ 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