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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定3 u5 C* W$ T8 z  c! |* E6 U
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。$ J8 k9 _- S- }. C! j) t6 @8 i4 b+ Y" T! h
. [# N4 c( H1 \1 I  C
2、Samba Server
# X; @1 u% p9 y4 f步驟1.安裝 samba 套件
) n1 |1 R/ {& K: U
+ U3 y: B6 p, I" R1 {/ h利用 yum 指令來安裝 samba 套件。
4 _  I' }! u  t' Q5 E. J+ q#yum -y install samba    //安裝 samba 套件
" D8 [2 }2 F, A1 l% s% Z1 m3 u* M- Z  L/ g$ M
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
* ]8 o' ?' F+ ~5 I) k8 }/ v  U: U#yum install samba-client samba-common cifs-utils( W  h; v6 J) u( b' c+ B
; {4 q- S' J& K8 B; ^" |8 f" T
步驟2.修改 samba 設定檔 (smb.conf)
% x! T5 _, C3 {* [# T9 i! v  l% n4 O- u2 l3 @& E
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。/ S4 m- f" A# j7 J+ f+ n# J8 y: B
#vi /etc/samba/smb.conf  //修改 samba 設定檔
8 e# T4 T' @  j6 S, D- k/ c6 _; ]0 K( r, A. k# ~
global                                 //通用設定. S6 \1 L; ^; J$ J; K

2 Q) J4 M& i" M% C9 m# m$ x netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
  \* R, O3 ]4 J2 f. a
$ V# q' D: P. D+ ?+ M4 E! X workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱
( Z: @' W- {5 ?; X7 ^6 F/ H! ~+ c# g# |' k, u6 R
hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源# t# r$ z% @7 X# I  T! h* W' d2 t
, P  N8 I9 h+ P- t# n' a
hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源2 U$ E, z( M' G) n
- _1 H+ j9 c9 c. P2 {
security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入3 J' ?5 D; ~' u6 ^: s* z

  Z8 s. C0 E5 F  C  q4 V  _ encrypt passwords = yes                //是否對密碼部份進行加密  |  G3 |8 q/ j

" a4 b2 f' r7 ] display charset = utf8                 //Samba 上所顯示的編碼
( C4 }+ M3 E( A, a/ z
; W$ [9 K% A/ x9 A unix charset = utf8                    //Linux 上所顯示的編碼
- G; x4 B  u- s" T( o
4 A& K5 B+ S! g& N0 L5 X( V. M dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)
/ u; T( x$ g3 A5 y! v9 e4 N8 h: t0 X1 X0 f. g7 @9 Y9 `
home                                   //分享設定,屆時顯示分享資料夾的名稱- L  w- e$ V, t) C" ~, q
; L+ o  h6 k' w# g+ p% a
comment = Weithenn Samba Files Shares  //分享資料夾的註解) p. O% Z3 \( K5 e

: U; g+ \6 r5 O5 F* S" s0 p5 q8 S, ~1 I path = /home                           //分享路徑( o0 G/ F5 E1 w9 K' H% F0 p% a
$ O7 F2 H2 N& z7 B1 _
valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源% M& P; O* M# w2 U1 i

$ x, y- n9 t6 u+ C; E public = yes                           //允許使用者登入後可看到此分享資料夾
5 ^: H  r) t1 l
$ i& U+ P1 w4 c& f5 h# u% p writable = yes                         //允許寫入/ o. |; Q! R% X$ q+ \$ k

5 y- r3 e& o4 u$ m% g1 n create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)
+ V( X3 [8 |/ b3 Q7 R0 e# v- M2 \, W/ V" G- y( R( l2 M
directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
! D+ q5 D- i  \% B6 J7 }$ [* x; U7 C" y6 Q9 i; V. E8 B4 H8 z

; x# Q9 T$ R8 @0 Z步驟3.建立 samba 帳號
5 B  \1 x7 Z# _2 a; q- Z. Z8 i/ x+ ^" p0 }/ x4 V- w
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。& y2 w# R* L# Z  b( r: |
#smbpasswd -a user1  //建立 samba 使用者帳號 user1
2 H- _8 y- G' y7 L4 I! D
; p# W" n/ V; K" }$ X New SMB password:        //輸入使用者帳號 user1 的 samba 密碼
. W0 ?% W0 Y7 w/ F) R. r6 p) t! e6 R) m! E6 x% q6 K' l4 x# ^; c. D2 C
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
4 \, }6 H) s! m1 l3 ~! Y7 Q0 K& p2 J3 E  ]: k3 v( Y( }# w
Added user user1.     //新增 samba 使用者帳號 user1 成功
; Z( ~: e: r, A+ ^; k
0 Q+ \6 ^6 Y( `" g) c新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
9 g  q) F5 g  b# R* _3 E#cat /etc/samba/smbpasswd  或者+ G' E1 E, D, P9 Y- t
#cat /var/lib/samba/private/smbpasswd
3 E* l: b! Y8 |/ W3 S$ b4 S user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :2 I$ J& \9 r0 E3 I$ p1 X. }  P

& t  E) B3 y0 I7 |步驟4.啟動 samba 服務, E9 C* M+ _# y

# Z! G5 s" I/ A! P( I. F* P在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。. W! M" O: \0 x! s  l: n. t
#chkconfig smb on  H0 \+ L* a  q- n9 W* G
3 H& |4 z4 Z) g4 n# E! C
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
% b9 l9 K4 H) o1 z0 P#chkconfig --list |grep smb
# K" o- J1 }/ G& i! L9 P3 i
  B  f6 m. [9 d, f! k& J* @ smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off
4 W6 \) [& P) O9 S; O: e* N2 m
: l3 N  Q: E" h9 J+ W完成上述設定後便可以啟動 smb 服務
. W1 w/ Y' V. V0 A#/etc/rc.d/init.d/smb start
7 J: s1 u) [% Z* c( y% P4 }) W" c9 j* ?, I7 Q8 _, |, I, _
Starting SMB services:                        [OK]
7 J7 w. F8 P  }5 [
$ `5 ?" v' Y; `8 V$ {& S1 T1 _ Starting NMB services:                        [OK]  7 p1 x8 ~% G: A

. ^* J2 Z+ ?8 O* K! M( t9 C0 t3 Y檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。# H' K, F" Y* e6 _# ?( Y
#netstat -tnl3 w& H! U% n4 I
4 E3 D# V/ `8 \6 D8 u
Active Internet connections (only servers)( M% ]5 c1 p) W$ S7 y

6 F/ v) ]0 Z' G! ]( X) X0 \ Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
* T; Z) G+ b6 i9 x4 l" N4 s
+ J- u% E1 J( D- N3 Z& Y tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN! s/ y" k' Q/ P* n( i! p

+ ?) f, ~) G$ I* g tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN
7 ^: H3 _8 N4 T1 c6 ^, x- s9 y+ s$ c" j! g
3、Samba Client8 H; Y! O( x% a. B8 b' J8 O) w
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
8 \. [; ~5 d$ Q* J; C: [2 _+ f1 H$ K: t8 F. n2 k; q7 N
Windows Client
: P6 I. X) h$ ^* G" @; m4 s
- N% T# B* s% U- _  G* U* E' o$ D* G! ?上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:7 D; I! e" ~( S- _5 o% `" s6 y  ]
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。! t8 l+ G! h8 P5 D1 u$ [( `
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。+ d* G0 O) ~( M# `: \
* q$ R6 g; Z5 r9 u4 P, l5 W
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
' U  J% M1 {" P' z) D* j! w8 |& x5 z" j$ W: m5 [; B( X
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
7 ^- c  s6 q3 a8 l) G  B; ^9 [ net use w: \\Samba_Server_IP\home" p$ ^$ K; ~: T

* F" B: Y9 w7 I: G3 E- d方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
8 {! q- Y  u9 I. m: _( I net use w: \\Samba_Server_IP\home /user:user1 123456
- m0 R2 f  N: c# z& R9 I4 P5 M# M+ N" Z! a9 d8 j
CentOS Client
8 E9 g5 r$ i+ {
* g6 r5 f- e2 \1 \' i7 Z& F* s8 g若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
7 p0 J6 c( m5 n: O3 U, Q# @2 Z
; [, |9 l+ Z8 A2 }& g' c+ X方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
7 y! r3 x7 G$ W. g1 }! Smount.cifs //Samba_Server_IP/home /mnt/home -o
; j* o; y* i" n5 E, h9 z. [) F5 j+ M
' u5 d. ^" B9 j% R1 s  H7 n方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)2 M8 G! O' A4 Q: V" ?
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456% F8 Y+ v+ |: M8 K/ Z1 }

4 e: L1 {& q% R; D& n  W( v) v) i. v若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。! H4 q- }5 T+ J6 E
umount.cifs /mnt/home
, @, _5 a1 `- f
umount /mnt/home
3 j  J( w; U1 ]. X$ q) w. i( N: }+ O
4、CentOS 存取 Windows 分享資源; T) J4 y; I5 Q% N; H% R
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:7 v3 Y9 v% }1 @) C& ~  ^% x3 T. O

4 T' n2 E0 g1 R; g. IWindows 電腦名稱: user1-XP
5 J1 [; S2 U0 d% V7 S+ W# h分享資料夾名稱: Shares
: W1 [7 l0 G$ b9 j  O可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
3 Q/ Z( R" y9 ^% w+ H可存取 Windows 分享資料夾的使用者密碼: 123456: J' E6 O4 m0 @/ K7 N2 b

$ X9 N% h4 ^7 ECentOS 掛載至本地端檔案系統: /mnt/shares
; k6 m! r: n7 u" H& T6 |CentOS 帳號密碼檔: /home/user1/secret.txt
9 }7 n' P) E7 ~  d/ E' X% k" [安全性權限設定: chmod 600 secret.txt
' j2 t1 K( z2 W- M7 ^: A& |- ]) C% j  L& ~7 c: c. s
了解後我們修改檔案系統設定檔 /etc/fstab。
7 v4 S# e/ l( T! ?! j#vi /etc/fstab
4 I0 `3 g& j3 P3 o# _0 ~: k, o+ y& I7 O! ]+ i
LABEL=/1           /        ext3    defaults        1 1
! |, b: w7 C$ Y0 T
! F! n% Q, l$ F  X4 ?5 V$ m LABEL=/home1      /home     ext3    defaults        1 2
8 N8 o, D  d- J, `4 b. d( ^
1 F4 L% J. n5 H9 g+ B8 Q8 m LABEL=/tmp1       /tmp      ext3    defaults        1 25 t3 n* W! r3 J

6 a* S" N% p0 U2 O) }" C; s. w. d LABEL=/usr1       /usr      ext3    defaults        1 23 j% ^& Y! b* X0 Z. P- y
( Y2 r  N$ v, M; k
LABEL=/var1       /var      ext3    defaults        1 2
' _! C6 n8 U: W2 Q3 w
# ^6 K* S- n4 m2 V/ ~ tmpfs             /dev/shm  tmpfs   defaults        0 04 p! J! p3 B  {5 v

6 W- f1 i; H4 K/ O devpts            /dev/pts  devpts  gid=5,mode=620  0 0
; @0 X+ H4 G6 r  \  t4 w1 A" r2 O1 |! r# R4 h( D' M
sysfs             /sys      sysfs   defaults        0 0
, o; i4 M3 V3 W  \+ i4 R5 p5 v0 d* v4 \+ k$ s+ S. t8 p0 h3 Y
proc              /proc     proc    defaults        0 0
& T; p, t; O5 |, i3 N3 E1 M+ `% U( e& Q( o; R5 m# G2 B  O
LABEL=SWAP-sda6   swap      swap    defaults        0 0
6 Z# D/ @  ?: H
0 |1 ^3 p" ~; e: V, |. o8 @" e //user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
' A" w) y$ ~9 g; a0 X. `! ]# ]2 J  W+ J/ c/ j7 M
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
: \, G# J( p6 S: L6 c6 ^- L- v#vi /home/user1/secret.txt% `5 B/ c. S- k) a6 ^1 N; c9 U" H
; E, Y7 N. N. }# A3 q2 J2 S5 F3 V
username=user1
; a) A" C: S, Q5 k
8 n& j  y. R& E" ^$ k password=123456/ ?+ z" t/ U6 ?& ]! g( Z. J. h, i

4 ?" Q' C9 M  v設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。2 Q- L. C3 p' Y" m  E% E
#mount -a     //讀取 /etc/fstab 更新+ k3 Q9 D5 f% t1 x5 i
3 h7 P. F3 `" @/ @
#df -h        //檢查是否成功存取 Windows 資源
- f& ~: f1 v: D8 u' D/ O4 ~! m+ x9 G# h
Filesystem            Size  Used Avail Use% Mounted on
. e$ A7 C  |) l7 P7 t' n$ S3 X7 \4 g: t* x  Q( C
/dev/sda1             9.7G  2.3G  6.9G  25% /3 \: M+ e4 J6 D+ @- {3 `5 c

( r& W' g0 _& E) D& p# a5 m /dev/sda7             414G  211G  183G  54% /home  d% m/ X3 \6 T

: _7 [7 n+ j; ^& z- u: X /dev/sda5             4.9G  139M  4.5G   3% /tmp1 B( I/ S( M4 e* z0 ?
$ D( h0 E! d7 _. N; ^" \
/dev/sda3             9.7G  2.3G  6.9G  26% /usr! M& C; R! i& q1 ~; F+ P

4 V& j0 z+ S  X( M, ^ /dev/sda2             9.7G  255M  9.0G   3% /var( j- i; p, A, d5 i+ x6 X
) T9 x3 b9 z0 B4 ]0 A8 W
tmpfs                 2.0G     0  2.0G   0% /dev/shm/ q# H) z5 X( G3 ], A# w& I

9 j5 F- x  P! {! c9 d //user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功
) t. A! l+ U0 j( N. \

* p0 L0 n9 Z7 }7 R[Troubleshooting]
8 D" E0 s2 s/ e: Z3 E2 [從client連到server端時出現error:  4 R) M) Y5 j: `" _8 \
samba mount error(110): Connection timed out
5 U& H- C5 W5 |: M一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
- z; r8 R- m9 _: ~% x
! D  M4 [( `& @! Z5 H1 v
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:3 N. ^  C0 z' C% g: A/ B, w
$ F0 @! V; p5 z/ \# k- p2 R
用 yum 查一下有什麼 sshfs 相關的套件:
7 j8 @* f$ i3 h& Q7 A! d( X6 Q# yum search sshfs
1 I# W& \1 i, y, k8 R/ m# E=====================================================================
, ^7 D' a7 [" B8 Mfuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
1 l0 {+ S) j8 \安裝sshfs:
% ]8 P' C  H& G# w0 a#yum install fuse-sshfs
- |& j: |7 m5 t; J2 C建立掛載目錄:
7 R( ~$ M# e$ }* v9 x#mkdir /mnt/temp
* ]5 L+ X5 e, l3 L用sshfs 掛載遠端的目錄:# e9 H8 e9 b/ J$ ~8 Y3 F
#sshfs -p 22 [email protected]:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄+ L+ R$ h" \9 W
[email protected]'s password:    //接著要你輸入遠端ssh root密碼
, Z  m" Q& I. b8 f) Z% `正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的8 |5 [, B; P: k" {. Q# i
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
5 e, V/ N% a  V0 R7 L! q0 i# ~# V5 o
帶上密碼而不用手動輸入密碼
, ~; z9 T' F$ C$ ]0 h6 k#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp
. J& ?# W1 v! @4 I1 y註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
! ~; p: k  @, \. ~. q; ysshfs -p 10022 -o sshfs_debug -o debug [email protected]:/  /mnt/temp
+ d& n1 R! c, a" n0 x3 y

, O, j; Y; k) U+ ~9 c以一般帳號(非root)掛載時,出現error :
$ ~) q2 C2 j/ c* q# Wfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限! D; V. d' |5 t  O; p% m
ls -l /bin/fusermount8 H" ?- I5 r5 `5 g$ A
-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount$ O6 g1 f) i& J9 o
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse) n2 \4 _8 Y2 @8 W* b* |. H
) M# b4 U: u  R
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)% Y$ }6 Z7 \9 _) y
' n: p$ ?$ b- d1 m% I- J, p

. ^4 \1 ~7 e% o9 f/ M
作者: 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.itech.casa/) Powered by Discuz! X3.2