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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定5 g) B2 h4 M/ z
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
4 ~$ v. S* s3 O' s9 d9 W* Z/ @" J$ h. B! m2 h
2、Samba Server
, _; x% |6 b* \. v, _+ L$ C8 D步驟1.安裝 samba 套件
% V: P$ A# y8 X$ b# I
& ~% q5 X5 G( d' @) B+ }利用 yum 指令來安裝 samba 套件。
2 b* K' C# i+ G2 f: Q#yum -y install samba    //安裝 samba 套件3 \6 Z2 F( Y. |- h: x0 |' |  Z
1 e' ]$ I* e* U. A$ v7 O
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
2 f: `5 k2 _* M/ G#yum install samba-client samba-common cifs-utils
4 O. t  `. {; Y0 u- G  L8 N& e$ J. \) P1 V- @
步驟2.修改 samba 設定檔 (smb.conf)$ L% o* G: B( _; _2 p
0 U4 F. n2 ]+ f/ X, j
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
( r/ I$ Y7 V; j( l4 Q#vi /etc/samba/smb.conf  //修改 samba 設定檔' N6 H2 h: F3 E0 V
4 \5 ?3 {9 Q  V5 a8 B# e
global                                 //通用設定
7 U8 m0 G& x+ h2 y- d
4 b+ n7 y( X. y* m2 C+ T netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
9 ]7 `- @: C5 v
  Q, y: L! y, f* V9 Y workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱
1 v$ @! c6 y3 _' g" o0 t% s# `  c; x) z6 `" o; B
hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源
5 \- d1 K" e8 M- K2 p) ~5 Z# E( M7 Z) l9 m6 d5 r
hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
) ^! K( T2 S1 H" F6 i' W3 H! L9 P5 @+ ?
security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入# Z0 l0 K) o# X' `+ C9 ~4 k
- A4 K6 J9 H2 s; p4 X% s
encrypt passwords = yes                //是否對密碼部份進行加密9 M0 O! U6 `+ c) K
2 }3 Y8 p+ ~% J
display charset = utf8                 //Samba 上所顯示的編碼% u# n- H  f( F/ d
1 u* z7 V% R$ I5 p
unix charset = utf8                    //Linux 上所顯示的編碼* _( _% q1 J0 Q2 X
; Z. S; `) w* ~$ b
dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)  E0 f5 V. o0 Y& Z

& ~; }5 ?3 M+ T; R; \6 }! r1 Z home                                   //分享設定,屆時顯示分享資料夾的名稱
" c  k+ g& e; Y& S2 d" I- @& i/ v- T8 C8 ^! |' T( R# d+ f2 s2 B# b' @- z
comment = Weithenn Samba Files Shares  //分享資料夾的註解+ q) g& a, j1 N- N. S$ o3 U7 r1 K

% N5 a* H: D# D7 l1 W0 A( K8 X7 t+ x path = /home                           //分享路徑7 G+ v6 K! A  v% P8 {, Z' f! p5 d1 U

3 E  [( ~1 U  g valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源
2 v5 F4 L  Y  Z+ E3 E/ s' ~# W4 p: k+ ]9 u5 x- U! n6 {
public = yes                           //允許使用者登入後可看到此分享資料夾6 I' e, T2 ?$ [
# F# I7 B3 w) c7 [( B( q
writable = yes                         //允許寫入- Y0 f7 T* _9 m6 |( s

3 f: }) R9 L2 u( U, S1 r create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)
% ^) Y: \, {. o& l; ]5 d5 e: ^
  v4 n" Z8 K- s0 g' S! K directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)$ Y" b. U( m/ c. G' L  L

# R! \- w. Y; Y8 S% L8 x/ v( d, S) X! I+ b2 r* J0 C- W
步驟3.建立 samba 帳號# p3 x/ ?- H% Y, h' l, {8 |+ ~

) Q; |9 d! K$ j) o/ P' u& R+ y; `( ]設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。9 C3 f  W7 H% k- A& _
#smbpasswd -a user1  //建立 samba 使用者帳號 user1% e* X; Y" m0 a" N' ?* l
  R9 m/ c0 g+ Y' |7 {; {
New SMB password:        //輸入使用者帳號 user1 的 samba 密碼3 a& u1 {8 _, S0 R1 z* G& L! c9 o
9 g; X( j+ N! t6 R3 z" v6 T
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
8 x3 Z$ `8 M' W7 F# g: B8 Z7 F3 O6 a6 A& u
Added user user1.     //新增 samba 使用者帳號 user1 成功
+ z2 C9 [3 E1 g: N. {# U3 r6 O
6 O* B& `+ H9 R+ H5 R, M, z新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過6 s' Q3 z( F( S* W
#cat /etc/samba/smbpasswd  或者
' X$ s% |  p6 v! g5 u+ v9 l  R! ]+ i#cat /var/lib/samba/private/smbpasswd) q/ b/ o+ H0 Z* W$ O# B0 P
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :# s+ |# H9 f# \( R9 J
0 m: T6 {1 K8 {" j2 O1 J" f- h
步驟4.啟動 samba 服務
) I- v  L0 o9 B" h. K  L5 y2 a$ m( }+ R$ B
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
& V9 d* s' G9 a  R. B' V' E' Y9 o#chkconfig smb on+ q0 ]2 f; }& J; {
+ y3 T$ `  A6 f" K
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
  q  p, h0 n7 J  C#chkconfig --list |grep smb
' d7 W' C7 ]1 r% ?9 N8 n$ e5 n* F3 X( H. d
smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off
7 X: D% T; \! S4 F- A+ E& y" l. u4 \$ W$ m9 E& G
完成上述設定後便可以啟動 smb 服務0 D- U; s2 g9 p1 [3 \
#/etc/rc.d/init.d/smb start5 l" s0 X3 _7 e- g  a

" L0 h& x' M6 A. k+ ?9 s Starting SMB services:                        [OK] 2 r) h; ]' v, @! j) u- J

8 [. F1 m& l9 T( O4 m Starting NMB services:                        [OK]  - u/ u/ {* c$ I- L* S
) w! Y* i8 k9 P. q# V3 B) C
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
* Y9 ^" _8 k7 G1 h0 S, N6 n#netstat -tnl
3 H! X  I$ z, Q! b! ?: W% ?3 v& }* v2 m
Active Internet connections (only servers)( Y" G6 G6 K9 W3 o) J( s
! ]. n" |. V! V) I. h1 x4 u
Proto Recv-Q   Send-Q   Local Address    Foreign Address    State9 q/ X# p, l2 q/ A* t) C7 u
$ }! w% ^8 M3 c
tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
3 @6 V- R* r2 }0 S) J' \6 J8 j" Q- F7 _+ t
tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN) Y  P! L0 z, N' x$ Y- b
1 E( U; ]( k" k+ k, e0 `6 q
3、Samba Client
4 F  }4 K1 W3 X/ e/ `3 [( c0 L! Z) w以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
; z6 |9 ?7 ?( t4 `. ?& T
, A' O; {( {% \. y0 kWindows Client
) D' |9 k0 M$ e7 b$ Q- l' A* F" B# I7 X. \2 T
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
" z, E$ C; Q5 |: [1 R8 d2 Y) a檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
' p7 _/ T# V% G# Z驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
& ~0 C& L3 C" T9 `; p
3 c$ C# H8 T8 M1 m' [) f$ F- ]若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
* v8 R* O) g: I5 H5 s! G! a. ?9 ]5 g, z8 u, I& p' g
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
. O9 \: f# q- ~/ }. u net use w: \\Samba_Server_IP\home$ T9 X, _" v, _

! c" A+ U% Z! z3 ?1 m. q方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)$ k3 C! w! b1 G% c% R( S- l
net use w: \\Samba_Server_IP\home /user:user1 123456
6 ^' P- _' v. C! ?4 _
! ~7 h- ?" D$ g# z; A! wCentOS Client- B' d; a: |1 D. r# t" K- P2 W7 R
  V1 F3 d/ M4 ~8 c7 J
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。( @+ }' U4 r( Z8 r$ A# l0 u

1 y0 B, i/ z; U, ?$ _方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
/ m" m+ \5 S! ~. r$ Tmount.cifs //Samba_Server_IP/home /mnt/home -o; D- c0 v3 i5 e6 R( F  I8 I% z
- |. M& s( `+ r! e: o# ]& Z0 |' x
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
8 `9 p  d/ o+ Nmount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456# D/ `  D5 T9 J4 e
# a, [  ~% \3 n! o! S
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
8 r0 h( ]  M1 ~umount.cifs /mnt/home
( e2 U( w% M" h4 F1 o
umount /mnt/home. v/ v8 Y6 ?7 T) o4 Q9 }
/ Y1 Q. }+ R7 L3 q3 \  o. B
4、CentOS 存取 Windows 分享資源& M! t2 q3 B6 o8 l
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
+ j  [% K' i# A' ^6 r, l- |
9 R1 |( ^3 Q# `2 n9 AWindows 電腦名稱: user1-XP1 b. p4 M5 W1 y& @8 b
分享資料夾名稱: Shares
0 P+ }$ H9 C  n! m7 c+ ^$ \* a可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
. u- l1 M+ E2 H  T0 f( F可存取 Windows 分享資料夾的使用者密碼: 123456+ i& b: p2 C) r0 y3 V' J: C

4 Y2 `' a: g' C1 {& G+ o% Q: KCentOS 掛載至本地端檔案系統: /mnt/shares8 k4 I8 V6 s+ d' J
CentOS 帳號密碼檔: /home/user1/secret.txt
  I( v/ }" w8 ?- Z0 q; K; `安全性權限設定: chmod 600 secret.txt* D2 C& ]* I1 z1 g7 E+ c8 n+ N1 \

% u& N! \% ]2 m7 i6 H% l3 @1 m* I了解後我們修改檔案系統設定檔 /etc/fstab。, W' X5 {# U4 b8 y. f
#vi /etc/fstab7 v0 H& x. D! v

0 F& D2 h" S- [$ b LABEL=/1           /        ext3    defaults        1 1
% E& z( n8 x! h7 V* }% M, Q. ^
8 i& N/ ~0 Y/ j0 i0 }( c1 g2 m9 B8 Y LABEL=/home1      /home     ext3    defaults        1 2; z2 a3 J+ ]% T( D- H5 k
; z: O$ e# V  Y% J
LABEL=/tmp1       /tmp      ext3    defaults        1 2
) k% ~0 i# U* z3 J, L" s. p' T4 ?, u2 g( _
LABEL=/usr1       /usr      ext3    defaults        1 2
, S3 Z$ Y7 L- d6 `, N' t% M& L
LABEL=/var1       /var      ext3    defaults        1 2
( a3 \3 }  V- U+ K0 ^$ ^$ m) l
) }  L7 D7 {+ _5 E5 Z tmpfs             /dev/shm  tmpfs   defaults        0 0
$ Y: `4 k6 _/ x7 {% s, i
* H9 l6 }& w4 H: r) g6 u/ I+ @ devpts            /dev/pts  devpts  gid=5,mode=620  0 0* ]5 `! c% P' z4 G

$ ?. o8 H* F* }/ _# J: {, z sysfs             /sys      sysfs   defaults        0 0& ~+ i6 p1 d+ m% k  Q; h/ {, J) i

1 j: d8 |4 Z4 K1 o2 V$ { proc              /proc     proc    defaults        0 08 O1 b9 E: n1 E" p% E) T7 Z

" j9 o$ m/ O$ p7 g LABEL=SWAP-sda6   swap      swap    defaults        0 0
: h6 K: O( U3 g" F1 e1 f0 x6 H" }1 I* _4 ?9 T( J) Y& ^/ c8 q
//user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行3 T6 Y) \  J- n4 Z" q; u
) w" ?4 y& I( Y* x% x
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
, Z+ a# A, c% ^0 ^#vi /home/user1/secret.txt# o; Y1 G+ ]; m5 J' q* B6 z
+ z! c% Z  {% Q$ j& c
username=user1
' k* A1 N/ N7 X$ P6 p" M; c2 D4 M
0 X8 N% Y" D: U6 X password=123456
7 d# Y& L. m3 i% Y' M
6 Y# ?+ d1 J6 T7 T: x, B設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
5 L! `: c6 P8 r#mount -a     //讀取 /etc/fstab 更新' S% p1 ?: a7 z" X$ T6 K& k
* u9 a" |6 A; a' O( Z& r' P
#df -h        //檢查是否成功存取 Windows 資源7 u* N% {+ R) q% p; N9 }6 h: |1 Q
% d7 p2 r4 B( c& I, _6 r5 h
Filesystem            Size  Used Avail Use% Mounted on
2 x% A% K; v# A" |4 L) I
5 w! d% M) z( j9 M, O% N /dev/sda1             9.7G  2.3G  6.9G  25% /
% c) f. T& h; l! S" J7 s0 q6 q# R. n/ `/ ]; ]
/dev/sda7             414G  211G  183G  54% /home
& C# [" Z0 F) m/ N  {. f: R: x. o7 E/ O/ I
/dev/sda5             4.9G  139M  4.5G   3% /tmp" }* Z$ C6 L( T  ]0 T4 c. d+ D+ a$ b( t

& g3 o7 t4 E9 Y2 r0 y /dev/sda3             9.7G  2.3G  6.9G  26% /usr5 N7 b6 F- w, b
3 g3 j4 P# d1 C8 K% e
/dev/sda2             9.7G  255M  9.0G   3% /var
1 a+ a2 x) o7 Y2 \7 Q' g
4 ?' V) o! H2 {2 ^/ L, {+ Y tmpfs                 2.0G     0  2.0G   0% /dev/shm- V* Z1 E2 ~( r% D% @" o, C$ a
  @, W8 C  R; Y- p
//user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功
9 p' D. w+ G7 i. c5 v4 x* {
3 h' V7 t1 K/ p- y# G9 A& L( g# a" p
[Troubleshooting]; X( G2 u" @* L1 E# ~. U
從client連到server端時出現error:  
! j4 r; P( `  u' d1 S8 Usamba mount error(110): Connection timed out; N5 o( f5 a; Y( @+ p8 x1 d
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445, g$ a' p# @! l2 X  a& f
0 A# y8 T! ~- @
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:: f+ ]1 r" x& M# y

' I( N. a/ ~. u4 t) e3 R7 d
用 yum 查一下有什麼 sshfs 相關的套件:
- H, ]' {7 W0 t* R, R# yum search sshfs# A4 O0 U+ h7 `% D$ S4 k% z5 z
=====================================================================  G* `, q( R  {* C+ ?
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
* S) X# M. m% [% {: J% \0 p- X' D) t安裝sshfs:
7 x( d) Q3 K1 s4 H#yum install fuse-sshfs ; p6 v6 [6 H0 m- B: i" V
建立掛載目錄:
  A1 R* d: W! Q# K#mkdir /mnt/temp
' x- L4 }# O/ S9 t用sshfs 掛載遠端的目錄:
  \7 Z$ d: M7 `* D2 E4 Q#sshfs -p 22 root@192.168.1.2:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄2 p6 o" p) g% q
root@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼
- o/ }: P4 ]4 v  z- Y正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的9 ]+ m0 P1 v5 [4 I0 _
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
5 H, d: e* T4 b& H# T; J. z
) Z: g' J1 a- r" T帶上密碼而不用手動輸入密碼4 I( |1 ~# o* `, B' i1 T
#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp
" r: F" w4 v# ~( t# h' M註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
1 Q+ m7 Y$ m8 X/ w* W9 x) fsshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/  /mnt/temp3 l" d" R. c) A1 h! H- I

6 B6 _; O8 z0 M以一般帳號(非root)掛載時,出現error :8 T; |5 E( w" n9 @6 o9 c; S
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限/ J3 V" K3 @4 M4 |: ?
ls -l /bin/fusermount
7 H; K% o+ e+ p8 v9 X8 v& O-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount! w2 M* k4 G7 N; ~
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
( G1 t% N6 g1 T* u1 Q( t0 T
5 `! k, s' a( W" v( v  g% `* i
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
  t. k2 ?( Q0 `! A1 }) F( H6 w# x5 g! d: J$ {3 V

- L/ V" H9 K2 x( t/ w$ W" S1 h
作者: 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