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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定7 l/ N0 k( V8 q! A
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
. e2 ^* f$ W. p- r8 C. R/ O5 Q6 c) u5 [: `5 M' z% A" Q! C
2、Samba Server
4 D1 d& F- A% _+ u3 p步驟1.安裝 samba 套件: \$ V0 D5 b! G0 [, y

) U% g) w& ^8 v6 ~3 H; c5 J7 O利用 yum 指令來安裝 samba 套件。
. l! g# x- ?# K1 e" s#yum -y install samba    //安裝 samba 套件9 ^' J1 Y7 m) F5 t
2 g, n; [" t$ z! e
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: % W$ u, A% g2 G5 E1 g6 v- H
#yum install samba-client samba-common cifs-utils2 Y: x- m4 M  Q( e

) T& I, V" p+ {5 \2 A2 F步驟2.修改 samba 設定檔 (smb.conf)
9 Y' _9 |3 i9 Z3 t' Q- C: u2 D
' |7 \, J& i, F8 K* V  o修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
0 i% k% O: S5 y$ @8 ], ?#vi /etc/samba/smb.conf  //修改 samba 設定檔3 H* s/ z- c3 D0 [! }. G2 o
4 T- \( D0 x, n
global                                 //通用設定
% N7 P$ @- P' y
8 A% K9 M# m8 q netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
) T: A9 V* X: o. D+ k* n4 n- p
/ s8 P8 [3 o# X7 F# n4 R5 v workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱) y& G+ e* ^3 E2 g7 ^. b* S2 \6 |

4 c5 g, g7 u* ?! A+ a% A hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源
3 z/ l1 M! R# P3 i% Q! ]: c. O  K
, C* N: i% ~! J2 t' d' N8 O4 Q9 ] hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
' C( ~! Y, {( I9 B0 J, x, \; _3 R6 c: O
security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入
8 v' i# U% ^; M" c( F$ }! U; H: R& S  g
encrypt passwords = yes                //是否對密碼部份進行加密
3 y, b0 y# }) @8 v4 X; E* k" p; M. l
display charset = utf8                 //Samba 上所顯示的編碼1 L2 `% l0 b" Z- [( P

; D* n) Y6 o* d) O0 P8 W, B unix charset = utf8                    //Linux 上所顯示的編碼. W. _) U. W. U

( t" \+ I; F  G" o9 c+ o8 P/ { dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)' S: s6 S8 l# j9 ^1 E5 T

, v0 ~; l: p6 z0 @ home                                   //分享設定,屆時顯示分享資料夾的名稱
6 L# I+ z' m/ `6 D: N2 F& ?( J9 E0 G/ H& f4 z& g
comment = Weithenn Samba Files Shares  //分享資料夾的註解5 M! R+ o- ?( t! ~8 l1 a9 H
' `' c8 f+ n) f' B: d- L1 n+ N3 @
path = /home                           //分享路徑% I0 l- b; P: k$ Z

& ~. `1 s0 ~' f9 I' _* q valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源
1 _% ]2 j5 j; d2 _6 M
# T3 z' A& _& C. y* ~. P public = yes                           //允許使用者登入後可看到此分享資料夾2 ]& Q/ P0 ]4 k( C9 X: V6 F" R- s
% T# z$ j4 |8 R8 |& c
writable = yes                         //允許寫入  r( V9 i1 k2 T4 b/ H
( p+ i1 ^. P$ J- k8 L. Q+ F
create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)
* F0 N) |  j9 M8 }% j' _, w& z& m, b+ |
directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
2 _% Y( b# r2 V9 b
2 l: _" D/ ~1 C" {) F  F8 ?* _; S6 J9 G* o/ W1 v' [4 Z
步驟3.建立 samba 帳號
; b+ C0 d. N; ]) z4 M
4 P8 E" o+ D7 {5 L. |設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
- }, P1 P1 y) D0 ^/ J6 p, |) v4 ~#smbpasswd -a user1  //建立 samba 使用者帳號 user1
( ?) l. J0 q% I$ S, T$ }# F
! Y9 n4 \! l; ?! n" s; z, Y+ _ New SMB password:        //輸入使用者帳號 user1 的 samba 密碼
/ {) t1 g4 J) W# }
! S! B0 N& C6 {1 d3 K6 c- ~ Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
6 W6 {+ b# `" [- F6 ?4 T5 ~: P+ [
; d* d! \& a6 N# d% Q' {* ] Added user user1.     //新增 samba 使用者帳號 user1 成功% ]1 E, a$ I3 B) }; j) a0 Y! e5 |  Y
6 }1 H6 O' y, x) C9 e% K
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
. g* E+ ], a* w/ l8 n. {#cat /etc/samba/smbpasswd  或者
$ u( ^" B8 N* v/ v: J#cat /var/lib/samba/private/smbpasswd
3 b7 B: |5 m* G$ s& f5 k' M' _) s user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :
# ~5 W5 V& ~  S9 I1 O" U9 D7 `, I
8 z8 o. E' e0 e. [4 m8 L步驟4.啟動 samba 服務
( \' r1 q$ n# K1 S. }/ s2 `1 L/ [2 n8 n) X$ e
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
! N7 v+ U8 ~% o, T#chkconfig smb on
* T3 H: Y( q2 W
; Z7 a; ]& v" a- ~! k. z1 L使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。$ L5 ?; m4 ~/ Z$ U
#chkconfig --list |grep smb
: A* q/ r" \$ W& ^6 L# J" k! n  u6 e  F& X+ W
smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off
) M8 h) h# |& g) @$ W
/ P9 L* n0 `# q$ K/ k完成上述設定後便可以啟動 smb 服務2 z5 q+ k( R* w! ~- _
#/etc/rc.d/init.d/smb start2 A3 |. D$ r4 y& ]; g4 `

( M( {1 n! z# T( f: f& r Starting SMB services:                        [OK]
. z& t  k$ v& o* A
5 w9 A- o9 J6 t( ^ Starting NMB services:                        [OK]  
/ H5 g. i& U6 K- z
& E8 b# g$ W# W$ R5 V檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
+ x' n# K* _( E5 O: U6 q" z#netstat -tnl
4 f, l2 p% v; Z1 j, J  I0 b& M- `2 n/ C
Active Internet connections (only servers)
' `2 w1 R6 |% ^$ _0 e5 h8 I% ?* D' H6 x
& f/ e! i) ]0 w4 C. T2 w  @ Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
. Y, V6 L4 `0 d6 [. k0 ^0 N; E7 R6 g
tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
# p0 P' F( Q7 n  n2 Z: I- X# A9 w3 s0 V4 |
tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN
& `- J) L! o# ?+ ]" T+ T
5 o9 @: l/ E& p0 Y) a9 A5 l3、Samba Client  ~1 ?& e0 s. M( `6 K
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
8 d7 ~3 W6 ]9 I: @$ V0 U! \! d" Y: f+ P2 C( Q
Windows Client, `  V# N. s2 l9 s& I5 D8 \
8 q5 |% e- r  ?# K% e
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
" l2 _4 A, L+ z$ J* N5 S檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
/ N, A* f' ^: a8 Y. c9 L4 `9 b; I驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
! |& Q+ [& u1 |) ]8 L. S- N" R3 ^* \/ U) _
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
7 v1 L% j, F4 ]& W; I; |9 a2 i9 }: i# X& j) q
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
  v- o0 N& j% f! Y6 |! E- d' F net use w: \\Samba_Server_IP\home& g' E2 B" F2 C8 k

$ ^, u2 f2 t1 E) Y" \7 S方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
- K" [0 A1 T% @' `% R. g net use w: \\Samba_Server_IP\home /user:user1 1234567 |6 l/ H0 T; `* i

& o! m+ G7 n; {CentOS Client* b" Z3 ^+ s9 `3 O0 J% u" B3 n

9 |% {8 A# V% t1 V( N若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。4 C3 v, a% p* j9 I/ }' _: h( E
+ ]. T0 i) A" I. r9 T" N
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
+ d9 o9 q5 ^2 m6 R& W9 L" |4 Tmount.cifs //Samba_Server_IP/home /mnt/home -o
" ?, e& Y2 J$ J- a
+ V. j! P: E: k6 `& [0 E方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)* r: b6 d6 C7 v, |8 ~: [
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
& ]2 ?: {- I; d3 N* G2 O: b9 X8 ~. P# @$ i3 J/ h3 ?. s0 c) s# X6 y
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
0 F9 ~7 U0 p) h% X" aumount.cifs /mnt/home
5 I( Q8 O5 o( O; O; {
umount /mnt/home& b8 B2 V' p. n- d3 N! c1 K! e- V. z  D
2 R# C' j! }5 q1 e* @
4、CentOS 存取 Windows 分享資源
- M4 M0 `9 P) X% s6 k  e0 xSamba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:" K0 g) d% }0 I7 w9 U% s
( S: T5 Y/ @# [
Windows 電腦名稱: user1-XP. a8 I' R# W0 n2 P7 a/ [9 S
分享資料夾名稱: Shares( z8 i5 R7 P! t: R7 Y6 G* @
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
$ K- u2 G* v" L; r. a+ \, @可存取 Windows 分享資料夾的使用者密碼: 123456
# [0 P1 _0 {  J$ k7 I% M9 u" I: ]
8 ^5 m- j" M0 U# `CentOS 掛載至本地端檔案系統: /mnt/shares
& L$ d! x: V) K/ |+ TCentOS 帳號密碼檔: /home/user1/secret.txt' v# M! J/ b8 `% \
安全性權限設定: chmod 600 secret.txt
. ]6 g% M  ], h0 N1 [7 A- ~" V1 z2 Y  c, P4 ]
了解後我們修改檔案系統設定檔 /etc/fstab。8 y) j. f( ^* e& ^! q
#vi /etc/fstab. B- f# c& ~' K/ `' {2 b  n
: M$ M7 o1 ?  U% Y! K
LABEL=/1           /        ext3    defaults        1 1
, b6 k$ S0 |1 O0 K7 A$ {
9 v! ~& c8 D( ]) J7 i, d LABEL=/home1      /home     ext3    defaults        1 21 V. O' @/ U9 g. y
# K4 m0 c- m1 @! \
LABEL=/tmp1       /tmp      ext3    defaults        1 2
- L* l9 l) T" \/ D; E" ~( k" N+ |3 o8 O+ G$ K
LABEL=/usr1       /usr      ext3    defaults        1 2
3 R( _! z+ V' G0 ~: h( R5 B$ T1 u3 Z
LABEL=/var1       /var      ext3    defaults        1 29 l+ \# `5 s( ~% S2 I- B$ t$ J3 ^6 d# z; L
/ P, I# l3 [. @! U3 j' M
tmpfs             /dev/shm  tmpfs   defaults        0 0
2 i* F! e5 K- {7 `
6 b; O; K# S2 g% n( T1 y devpts            /dev/pts  devpts  gid=5,mode=620  0 0. D) z& ]  S; p, O5 V. o9 `5 J& o

& g1 A2 F1 L. e& r: ~6 @, y sysfs             /sys      sysfs   defaults        0 0
8 Q# D0 M4 Z) N+ H  s3 L! x$ r9 o  }+ W5 |  x7 `
proc              /proc     proc    defaults        0 0/ C( j0 p" J% Z5 U  m/ O" `4 h

7 P& A6 l& h+ y% Y6 Z- Y* ]- x LABEL=SWAP-sda6   swap      swap    defaults        0 0
  I6 Q; R$ F& W1 W' k7 {. ]
- L4 u" f) d7 d7 X. k9 P //user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行0 B4 g# G1 Y" |5 ?% Q* W

7 c, d$ q  E# m) d1 y* o' }建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
# m" B! Z# `. K" S#vi /home/user1/secret.txt$ M1 U) {0 e9 B
/ Z# K9 f- @! s* ]' I6 W$ g
username=user1
% t* f- m& E: y+ G8 A- Y* t' ]$ o! ~4 @0 x( X. o0 Z9 [* C+ K
password=123456
- {/ X' Y6 `) l# O. c( ?& [1 o6 U( W
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
6 d* |) R% P5 W5 A#mount -a     //讀取 /etc/fstab 更新9 M+ D; ^4 Q7 X: G+ ^9 t0 y
0 E' Q2 J' b4 ?. t& X1 P
#df -h        //檢查是否成功存取 Windows 資源" ^; v& B3 `" I+ Z9 B6 u/ K

1 p4 E% _' t' p8 r. ] Filesystem            Size  Used Avail Use% Mounted on
2 v) C0 ^# Q& _( Z; {
6 ^, S& L4 @3 ^% m1 @/ t4 O% W /dev/sda1             9.7G  2.3G  6.9G  25% /9 z- g3 M# N7 }9 t! y' J
4 b& l. ~3 G7 H6 z6 J7 k) v) g7 i3 V
/dev/sda7             414G  211G  183G  54% /home
9 w0 L0 o- ?* d. m) a9 ~: Y0 d* [* H. X0 d( i5 h" y) X9 P2 Q) b3 t! W
/dev/sda5             4.9G  139M  4.5G   3% /tmp9 n# \( z6 ^8 V) [9 K1 j; p

* q! A) m& T: ^! W. J0 | /dev/sda3             9.7G  2.3G  6.9G  26% /usr
# Z6 O1 s7 _% w' A3 |5 [* y1 a1 {( z7 l2 c) s
/dev/sda2             9.7G  255M  9.0G   3% /var
. ~' j: F7 _. G) x) L
4 k3 a+ Q6 c2 m! z2 |7 R5 [ tmpfs                 2.0G     0  2.0G   0% /dev/shm9 [, O' R3 |9 e: U7 k, L
7 l$ k/ S- ~2 x. Y' K+ [
//user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功

3 k! l; D/ h3 d% C2 Y% o9 k
$ l6 n* K7 s9 S, ^
[Troubleshooting]
8 n! E8 I/ w, Y) G) |從client連到server端時出現error:  + x3 K3 ]5 a9 D6 ^5 l4 c2 C: w
samba mount error(110): Connection timed out7 J5 P1 b7 c# ]. V* w
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
) V1 t1 b1 L: `7 l: ?
% u/ N! H5 j2 {/ F7 q0 m
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
# w  K  s5 i: o; `% z; _

. G8 r. n. I: L, w' [5 y( g$ l9 f
用 yum 查一下有什麼 sshfs 相關的套件:
% V* h) Z, }' d% K$ U# yum search sshfs6 U' W0 j1 X, M: t& d
=====================================================================9 k# h) M$ D0 j8 @$ r( J1 Z# r. n& D
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
/ m( q( Q1 M; T3 U3 M; G# ?; j安裝sshfs:0 }% X7 }8 S  F( k" R
#yum install fuse-sshfs
" Z" Z+ g" u. v6 d建立掛載目錄:
4 P( U3 K% u. ~#mkdir /mnt/temp$ i) M* h+ B& Q% L/ |
用sshfs 掛載遠端的目錄:
. p' I( f" a  s7 ~#sshfs -p 22 root@192.168.1.2:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄! F9 J' R, P. B; l/ Q- D5 ?
root@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼
& H6 j. C" O$ Q8 ~; w+ i' ]0 {正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的& r; W# F; b" C
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
! A- w5 @. ~# y( q1 Z: D! u. C  Y9 ]/ j5 m( [' z
帶上密碼而不用手動輸入密碼# i- i) \  |. S/ z2 N
#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp6 C2 ?5 _& `( Y- R' _6 G
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:, \0 k/ |: q2 B& Z  Q
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/  /mnt/temp- A! s; g" e% u9 c8 T
% Y; }) |* a, J* D' [$ `
以一般帳號(非root)掛載時,出現error :
; k. k7 v& {5 W0 Z$ ?fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限( Q9 m! H* e/ k
ls -l /bin/fusermount
1 F1 |  z6 \% m5 P; k. j8 Q- E. a-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount
$ B. `! z9 @1 X4 n( f$ F" e故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse  K* x( K) s6 ~/ `2 P' i7 X( a1 x
7 z: K" i- L9 K& p% q+ K
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)" T  v  t0 Q5 ^% U- `# O; U& V
* _7 {+ w% T  x$ i" I8 \& {6 y. I

3 L0 P  A1 J4 E( T, c! R/ k5 ]
作者: 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