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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定  R* E! o# |$ |
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
/ \6 @4 ~) g. r3 A! g. ]4 [3 q6 j# n" o( r" r$ X# F- m% l
2、Samba Server9 f7 Z! [8 G9 r
步驟1.安裝 samba 套件$ ~( M5 B% n% A. ^# I& O

8 L9 g9 L9 g# }% W4 d利用 yum 指令來安裝 samba 套件。
5 B7 m6 j8 w; a, }8 u3 C& T9 g! o0 v! i#yum -y install samba    //安裝 samba 套件
) `0 t* t! M" @' a2 I* a- F6 M- t; q# G% X& r
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: & J4 Z2 o7 Q: C
#yum install samba-client samba-common cifs-utils( ^6 K  j! D) t! p! S7 d; r) r' p
% C5 d! [* Y  H( A
步驟2.修改 samba 設定檔 (smb.conf)
1 ~2 _2 a7 o- ^+ w+ Q0 {. ]
* N* q7 Z: J& U# Z; V, B修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
5 w) Y- [& P  M  H#vi /etc/samba/smb.conf  //修改 samba 設定檔4 k3 Q; X! T5 o% F: c0 \* g
. J6 |3 C1 r: u3 U9 c: M; J
global                                 //通用設定% Z* K- s  B' s1 j

' f1 a, _: i  K netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
2 W1 B8 Z: `$ H8 k/ h* l# l4 M8 s1 E, r
workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱
' i, D. Z+ r, o6 ^4 q1 W; [% L7 a; L/ s. P
hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源  k+ ^2 @+ x# d; b
5 O0 S6 A% ~3 P
hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
' y/ ^  i/ f: d% T( l
; D7 Q( @( \' P% K security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入9 q/ ^9 \. V) t6 P$ ^, N
) g4 A: j/ M( S# O; H
encrypt passwords = yes                //是否對密碼部份進行加密, {( ]+ x2 h7 F2 h; I) X! M

. b3 o4 n* {4 B) b4 }4 i2 \ display charset = utf8                 //Samba 上所顯示的編碼
3 G6 T! n1 x& ~7 {
6 V) L. B4 J5 t& S' [ unix charset = utf8                    //Linux 上所顯示的編碼* w- H% n6 w6 K! U9 V: E' Q5 |& q
  R5 u8 E' U# M$ r- \' T& t7 h% v$ I
dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文): \/ N7 e4 T" F: d, {% H9 t
: t* A( K' d* P0 a
home                                   //分享設定,屆時顯示分享資料夾的名稱
$ B3 c- F# A( l+ u  y4 Q/ ?5 R: J0 W+ l+ J2 w
comment = Weithenn Samba Files Shares  //分享資料夾的註解: t$ Z# Z- c8 U% z6 U* J- \

  J) Y, ^7 L6 O* r) @ path = /home                           //分享路徑
- H2 |" D' f# M7 r. E2 d7 N+ G4 w. _: Q5 Q
valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源
. r) g9 R5 W5 M7 J, O% e5 _; e4 G) L. R" u% t
public = yes                           //允許使用者登入後可看到此分享資料夾: e5 v* J" Q% B, s) u
. D. S: l! ]* g5 s; E! a# y
writable = yes                         //允許寫入2 i) x  Y% W( p

/ U* }; n( A) x) O2 N8 z- g; z+ O create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)
$ x$ J+ }1 a  a# _5 Y3 k; k9 S
/ d  g) S7 q# t% C* S) i. f+ @2 B4 p/ e directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)' k6 W6 a. a+ `$ y
  _  g2 U- x; i8 O, I- g! |
% @* n$ u/ `6 ?5 V5 |# v/ @
步驟3.建立 samba 帳號4 \. M. A1 K2 b
3 }' @' L; C  k1 n- r3 M; Z
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
& x' j! Z- M; W3 X8 {6 W: @9 Q; E+ ]7 ~#smbpasswd -a user1  //建立 samba 使用者帳號 user1
( F9 D& J7 K; {- F$ h  O3 k% l. z+ i' i( z
New SMB password:        //輸入使用者帳號 user1 的 samba 密碼
3 `( v' C2 z2 a* _5 h2 [/ l0 w5 W7 L1 i+ w& r
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼' q6 j" N- j, u' F8 @3 C9 ~) u7 b
* a3 q2 N; X, k- k
Added user user1.     //新增 samba 使用者帳號 user1 成功$ z+ g  L* x0 d2 Q! T- ~$ s+ O

- ]5 S5 X! t% K1 t( F新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
6 ]$ W0 \6 Y; t6 ]  i# f#cat /etc/samba/smbpasswd  或者" E) L4 Y6 L5 O6 b& Q
#cat /var/lib/samba/private/smbpasswd
: ]( _2 r6 l  k% \. |9 T user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :& Q+ w( x$ v7 F& M

9 v2 Y; i8 ?* V# G5 M步驟4.啟動 samba 服務
+ J" \1 A% h1 R6 N/ Y( i5 g
$ n( o4 R' ?$ E# C  i( M在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。5 X) z" u  \8 h
#chkconfig smb on$ P5 L: \* w# x5 w0 b; u. V3 f

; z, l, ^- N$ _; l! j" r0 G使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。- q' X! b0 e& h% j5 j: n3 ^% a
#chkconfig --list |grep smb
1 h/ N: }- b3 s4 _: ~9 m9 ~( g* P' @5 w# b6 B: e, F
smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off
3 M; Z) ]8 d: f* P; @( O6 T
& n: C$ i' Z+ \9 F: G% D完成上述設定後便可以啟動 smb 服務: X3 X% A$ r( C% g/ J- w9 z. B# B
#/etc/rc.d/init.d/smb start
6 m% v* S/ j$ E4 J7 b5 X( y. J, Z1 l+ z2 u! E
Starting SMB services:                        [OK]
- `1 n9 N; |3 L' p7 u
' x) O1 n" J, w4 _3 x Starting NMB services:                        [OK]  8 N% ^' B' Y. c" _" }

' i2 m& C3 `/ C' c檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
$ v; W( h- s1 c4 Q+ ?1 J# F#netstat -tnl
6 H: C" z0 _/ h( Y6 P( f
4 [& s* ?$ Q0 c, h Active Internet connections (only servers)
- C8 \: a% H2 ~* g" l- R" M6 @, t8 K
8 r2 o6 S9 a8 N" R' e, n" T) Y0 O Proto Recv-Q   Send-Q   Local Address    Foreign Address    State6 s+ l) z( F4 G

" K5 ~7 {5 i" ]9 _7 @; a tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
  ?. j: t% w) U4 S; g5 `# L' s8 {
tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN/ O1 B, l# O  T- ^6 c2 u
% c$ N8 @" I# d( Y4 c" }4 o
3、Samba Client( y" t/ P: ?5 y, @7 e
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。6 M0 r- }& h1 O6 I8 h3 Q. F

* D/ B/ E6 |0 K1 _8 ]3 vWindows Client( a9 J% _4 X1 O( v! y8 a2 ^
. p& t- v: u+ w$ ?1 `
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:2 T8 P7 P& f3 s* ?; Q
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
8 E" a6 @! w- j. J1 r' D驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
" R- V0 Y, L9 @# W* i3 _5 H6 O3 S
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
" ~+ z0 u9 L/ h
$ R0 o, x+ ?" J+ R方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)+ Q" ]1 L9 @1 }9 b5 O- p
net use w: \\Samba_Server_IP\home
6 i" O8 A5 Y/ v1 M$ ^2 Q6 k  e2 |+ P5 ?! Y# a# T
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
# `2 s, U1 m% A net use w: \\Samba_Server_IP\home /user:user1 123456& c. X9 f7 @, z3 M+ y/ f, d
$ z) K4 C, X3 a
CentOS Client
9 ~, g6 x9 a& p0 }; c6 l: {7 d* Q+ ?; ?- L% e
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
  D- K' B/ u% M+ }. j' O+ F6 D- T3 d+ C* g' N8 x) v% S
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)% P, p/ c* H. u+ S' S7 u
mount.cifs //Samba_Server_IP/home /mnt/home -o+ Y4 S& W/ j4 [# b

6 D1 U  e9 C$ [/ w方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
- E* I0 r( ?4 v+ ?7 Mmount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456# W3 S. {/ x8 F, W0 |

! I' P+ I/ T0 x: i* X$ U# N% t4 z若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。; I, _8 Q+ d+ O% F9 X5 f. S
umount.cifs /mnt/home
" u7 D/ v! V1 f# o; c
umount /mnt/home  m6 n, b9 `: B! ?, O- F( r
0 [, _# h$ u- Q( h
4、CentOS 存取 Windows 分享資源, l+ Y' N) c( c' p
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:3 Z, z! l5 H+ E& u' {# h$ j+ n

- E, g: B4 a/ LWindows 電腦名稱: user1-XP
! i# z0 G. B( ~1 C7 [+ C7 P8 b3 h分享資料夾名稱: Shares
! h' K" T' D  R' Z7 ?# O可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
+ o; d- L# T7 ~可存取 Windows 分享資料夾的使用者密碼: 1234565 V9 `) {4 z' y; m
, B: X" ^9 S/ V' b
CentOS 掛載至本地端檔案系統: /mnt/shares" }+ j$ B& J" C" I! n7 {* S$ a! S1 A/ U
CentOS 帳號密碼檔: /home/user1/secret.txt' d. B0 g3 d/ d
安全性權限設定: chmod 600 secret.txt9 ?+ B* x& G  j
( j  T7 E; D3 A! d
了解後我們修改檔案系統設定檔 /etc/fstab。- e" Q1 N( i5 G) y7 U2 i8 E# X
#vi /etc/fstab
) |; Y' I# r" r9 f9 b, i2 W2 s+ U, u4 Z
LABEL=/1           /        ext3    defaults        1 1
# k  C" g" K! K. x' N1 H& K
# u* H/ F: e) Y* \& B3 A3 ~ LABEL=/home1      /home     ext3    defaults        1 2
! ?* Q, W2 J7 L
" m' a4 g8 m: `$ M8 Q LABEL=/tmp1       /tmp      ext3    defaults        1 2
4 n. _) f& D- m- p& J- g/ L$ L
/ a1 ?9 ~# o( U/ I LABEL=/usr1       /usr      ext3    defaults        1 2' w) j' U+ j# D* V  |0 p

- Z; |2 o& i+ `/ x) J LABEL=/var1       /var      ext3    defaults        1 2( q( q1 ~. \+ e" s8 F5 p
1 _- J% r5 W5 A* e( a! @% u  f
tmpfs             /dev/shm  tmpfs   defaults        0 0
4 c0 t0 C2 K/ x/ o4 D6 m3 {4 f% I# r8 ]; ?. r
devpts            /dev/pts  devpts  gid=5,mode=620  0 0. g% N  d) G$ M: Y8 J

% u; B( K, R; [! V$ m' U sysfs             /sys      sysfs   defaults        0 0' b- z% O+ Q; _
$ h1 j) H) z" v+ p+ `  b9 J9 `1 P
proc              /proc     proc    defaults        0 0: h  m5 x, u% a2 W) z9 c3 {7 w' |

+ [% g! I1 @4 `& h  d LABEL=SWAP-sda6   swap      swap    defaults        0 0
. I  V. A, C* P( m( y) p/ X' k/ U
& N  \' j3 [1 t1 g6 G //user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
9 V1 m+ k3 d4 l. N- V4 r# S/ z4 y# Q
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:8 k: Q6 K5 }/ W
#vi /home/user1/secret.txt: \2 w5 d& z5 _* [% C

/ h/ A3 u8 t+ H/ s( Z" `' n! i username=user1  a- x# b( f: u0 p8 P5 l: N; E

! j5 q0 |  d: [. @7 [ password=123456# `) q  l2 L$ Q. z
$ \& c. k8 @' h9 @: N
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
5 n; ]# S- x' c, P& |( j/ ?! t#mount -a     //讀取 /etc/fstab 更新9 P1 s6 G0 ^2 x, \* J

0 V0 y2 P' z  ]+ _/ g#df -h        //檢查是否成功存取 Windows 資源
4 S2 U* f, Q; z8 j$ o% d2 M$ j+ x3 V
Filesystem            Size  Used Avail Use% Mounted on' V- P$ S4 a0 t/ v' _$ e  _

, L' N- b  `  D6 c) u/ U% R /dev/sda1             9.7G  2.3G  6.9G  25% /* v8 o4 W/ G- L; G0 Z" Q

# L% V* ^. Y' }) A- `6 U  _3 K- e' r/ R /dev/sda7             414G  211G  183G  54% /home
! j7 q6 D& I1 f/ b' l8 J- y
8 r/ t6 O1 v9 b1 C+ S /dev/sda5             4.9G  139M  4.5G   3% /tmp& @3 a7 d2 {( j; s9 L) H( J& p8 Q
1 D; ~' h3 E8 I: K
/dev/sda3             9.7G  2.3G  6.9G  26% /usr! {% H7 y  |4 j0 y% N) A6 h2 }$ i& {+ T

7 @& K# T. i, ~# z* r9 C6 ]$ @ /dev/sda2             9.7G  255M  9.0G   3% /var
  Q/ P) N) Y& N# v  X  e
4 r& K8 D( c' r- b tmpfs                 2.0G     0  2.0G   0% /dev/shm" B& i1 i* y& N. D
3 E' m* I6 R) n% j3 T7 e8 \  G1 O
//user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功

2 N3 {5 S2 V' m$ ^7 y
+ R: ^7 M/ N; q# {
[Troubleshooting]
8 j7 }1 y. G) |& P- P" N從client連到server端時出現error:  
; W( A( T: j/ X6 E3 {+ }+ d2 Tsamba mount error(110): Connection timed out
" S, e) P8 M& ?3 a& B8 |一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
5 N- f9 U" _' C" G  c
+ Z+ Y2 i; e& C3 n2 o
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:$ D- T2 B% c- U

0 ~! a  [4 D. {) Y, _8 R1 N
用 yum 查一下有什麼 sshfs 相關的套件:7 W6 U- b( o  i' \. d. d5 A! w
# yum search sshfs/ w& X: T  U9 E( l1 J
=====================================================================! K2 n3 E& ?) r
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
# V5 {% D7 X7 F* l9 A% D$ o/ |安裝sshfs:
" d" A/ B7 j# y! m) l#yum install fuse-sshfs ! u9 E4 r9 e+ }6 O" C
建立掛載目錄:4 u9 }# S( t4 W0 y1 g
#mkdir /mnt/temp
! T2 Y' x2 @' F* n+ q用sshfs 掛載遠端的目錄:4 ?# Y5 x9 m- I- P- v' q) ]
#sshfs -p 22 [email protected]:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
( n0 p9 a+ U# K5 m: u. ]6 M. o[email protected]'s password:    //接著要你輸入遠端ssh root密碼. y4 X% _; ?/ r3 e
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
5 E' ]% I2 M- _8 Q3 s- I# ?如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
' j* x8 h8 k- y. ^0 V4 d, y7 T" C: u7 [. D- z8 n! g
帶上密碼而不用手動輸入密碼( b; m2 E8 x8 l7 J1 z6 D* }; \
#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp& s+ B% D0 y/ L' @2 P2 R/ m
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
( ^7 T2 Q! A: k: K( Z& m0 xsshfs -p 10022 -o sshfs_debug -o debug [email protected]:/  /mnt/temp
) R, E" {3 L# @, b0 z1 A
  B5 R/ ^7 f8 Z) l2 ]
以一般帳號(非root)掛載時,出現error :- `! l" T/ u8 r1 }, `
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限$ P5 A. x" r0 _: T, F2 s# B- G3 v
ls -l /bin/fusermount
3 I# x7 ?, x. a; j-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount6 `/ C! Q3 L: g$ g
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse0 A( c/ y/ G# D7 |

/ S9 A# U  s4 `5 j2 a" R可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
2 Z' r. R7 b; T- S. G, `$ ~5 R9 F3 @  @5 G, |5 q" _

# \% ^1 p5 M/ O
作者: 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://nhkie.com/) Powered by Discuz! X3.2