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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
) x$ T2 A% V7 g) R1 P分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
5 O4 y, ]2 [4 s% l% c% m+ }9 Y" Y. ^. Q! V# l
2、Samba Server
4 x5 \+ u% |2 ^" c步驟1.安裝 samba 套件5 {& \+ K* i. u4 s7 ]/ C+ u; h

$ B, j$ O2 H* [3 T3 d' i. S- D, K9 x1 Q利用 yum 指令來安裝 samba 套件。* m6 W9 P8 v# Y3 }' E- m. E
#yum -y install samba    //安裝 samba 套件+ X1 J. ]) W) i9 h( i9 Y

; R+ ]# x+ Z* f, o0 q***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
( I! b" ?* A, P) G, A. V2 }6 r#yum install samba-client samba-common cifs-utils; g5 A) E1 _7 R( @6 x
' r! i7 w( A1 |' u9 y' h7 a' f
步驟2.修改 samba 設定檔 (smb.conf)
) I( q1 b/ s+ z1 x, [) u: W7 s$ U! i* r1 h- w4 m. @
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。" q2 }* X! ?2 J, c: R& X, g
#vi /etc/samba/smb.conf  //修改 samba 設定檔8 R$ _2 s* I6 r% e# r0 o
  T: h2 G* C1 F' ^1 j: s7 z! I7 n
global                                 //通用設定
6 Q. \1 j  t* l
, g) k3 C' K+ y# w; y netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
' Z$ {3 l7 Q( r) b6 Z4 @$ s+ e- t# g1 a" x! T8 g: O+ s
workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱
2 A$ |& j* H6 A) \+ _8 h1 H# \  D+ O- U
hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源- }8 P+ H% b+ f" ^0 k/ B2 |

5 b! V  v& p0 B' F hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
6 v& ~1 }9 S( k+ b# f
3 i7 C0 m, v1 y security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入: M4 ?% m5 \8 P( k( A# A
* Y' y- f- B# r4 N6 X3 D
encrypt passwords = yes                //是否對密碼部份進行加密  K5 y, d3 _+ Y, b
0 j  Y2 k: k$ b7 U( M6 v1 @: x
display charset = utf8                 //Samba 上所顯示的編碼5 z, m) G9 b3 _2 ?, ^
( l) [/ R3 L# d' j7 _  X& _8 K! L# I
unix charset = utf8                    //Linux 上所顯示的編碼
) `/ m, v9 ^/ S2 S! @# f; e. l& n; t. f
dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)" g  b7 B  y" P, T& n; _
! ]6 b+ o6 L% B" i7 U" i
home                                   //分享設定,屆時顯示分享資料夾的名稱
( v. G8 |. L" q+ K3 o; C8 S8 I- i9 k: F1 P2 v+ @0 `5 u( k) Z( C& D' ?
comment = Weithenn Samba Files Shares  //分享資料夾的註解
8 G. O/ _* |8 c8 u) {9 F/ v; c/ U7 O( m
path = /home                           //分享路徑
! H6 R9 V2 S( a% y! k  k; ?4 k: y
valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源; c- p* o' m# O0 Y

& A8 D  \0 g: d% H4 u3 _ public = yes                           //允許使用者登入後可看到此分享資料夾$ E1 z, H) X: B  s  B" R
: h9 H" V' f+ L( X8 c
writable = yes                         //允許寫入0 j5 y5 F- F& _3 U
# P4 a$ J( n* G0 s; S+ q8 |
create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)$ D, I$ R% q' D

1 b! r' ?3 p8 R* B! h$ }8 |. j directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
6 w5 @; I8 R: Z  g6 p6 k5 i+ ~8 t& t

8 i7 q; G0 o( s0 n2 W) B/ X. }步驟3.建立 samba 帳號/ B9 X; Y  g) z- u# [5 O& s
; Y$ z, D$ Z' [8 t$ T, k7 E5 j
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
7 ?# J' T# i7 z1 g#smbpasswd -a user1  //建立 samba 使用者帳號 user1& r1 J/ e. N& i$ X2 ?5 o% y
# I, q0 W4 a9 z& p5 h
New SMB password:        //輸入使用者帳號 user1 的 samba 密碼
) L) X: z9 `! ]( ~. l0 E8 [6 k9 a# c; f& n. h
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
9 z/ ~/ S) k- q0 A( G8 D4 P
  H6 T' M5 C1 K2 Q6 c0 Q4 P Added user user1.     //新增 samba 使用者帳號 user1 成功5 r' h( G! i% K3 o8 c
; R2 g* F9 h& d$ {
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
0 w; L7 r! n2 N4 T% A  `#cat /etc/samba/smbpasswd  或者/ ?8 K- M' j2 D& F* A
#cat /var/lib/samba/private/smbpasswd
+ r' U* I% F2 y+ y4 ?" e3 r user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :# |' M0 |2 B& W+ a4 ~  K) O, Y/ H

$ i* O/ j3 z* x, Q% `1 U步驟4.啟動 samba 服務) F8 m0 ?4 t' m0 i1 B. L
2 b' }# \4 |$ q6 i0 ^9 l
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
; y) x# j& l2 p- D) }#chkconfig smb on
( \9 a2 b- [. t' l4 k  E2 D
+ t6 N  o: V+ M' L使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。# T9 _3 v! n4 y1 c* q
#chkconfig --list |grep smb2 b. k: Y  V! d( {  t5 b: o! b4 e

. E/ Z% l2 U9 ]+ s$ R5 D- \7 v: O' A smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off, a' n7 j6 N6 g- U
) [6 `3 Q" @/ l1 |% h7 @
完成上述設定後便可以啟動 smb 服務
# k. h+ ]7 `! H( ]#/etc/rc.d/init.d/smb start
! \  Y6 }, L7 y/ g* W( E- r% s: W5 q4 m( Q
Starting SMB services:                        [OK] ! Z$ O6 c2 \( }3 @
: C, J/ D$ t: p/ V& c
Starting NMB services:                        [OK]  
. R+ Y  P1 F. r5 C: K9 M6 i/ V! K/ v& i8 x/ [
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
" f; Y* r. j  B#netstat -tnl
0 m6 X9 k# \6 `  L
* F, U" s, ?. t+ r( G' O Active Internet connections (only servers)
/ x8 g8 s& W7 X- b6 F& W
  s& T+ \& P* x8 `4 z: K4 B8 ` Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
# T, W; X7 j* G6 F% E* ^
% s* ^, J( o" x- C tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
2 K. S! G; `/ G9 p$ x9 p2 R* ?4 O4 ?0 B$ D
tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN
% P/ S, a8 {* s# F
. ^+ l) Q7 `- X; V( L3、Samba Client7 w+ X3 n) x8 S5 h3 z8 T
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
9 @4 R4 m" v6 |+ C/ p& s7 V$ N8 h4 Z7 b  K% e7 I5 A. `- f
Windows Client
: \! `+ g# q$ S8 [4 ^6 c! S( E* S% r/ ~% y: b. ?3 G
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:( H5 R7 u2 F0 \' N# [
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
7 v' ?4 y5 q, ^4 V) M' y2 H! `6 B驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
* ^. g( ^$ U/ u, ]9 m1 A% g3 a1 Y- p) p! e* F
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
/ ]. s, ?* O0 W
! C( }1 i& N7 o& F; U) K; t& B方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
0 m3 Q6 r! I- V  J& E net use w: \\Samba_Server_IP\home
2 [0 z- I' ~8 Z
- Z& o$ j+ v) k8 M% @方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
, X4 k$ e* C( N' W net use w: \\Samba_Server_IP\home /user:user1 123456
2 Q& I- v  U1 k+ k; q) [
- f- n3 P) v: m: KCentOS Client! Q1 o( \2 J& R% @7 U' W0 `3 ]

+ e' {5 o, \  |" r: P' Y5 k) \若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
& J, ?  l  M) t; i. V/ G9 C2 P; y3 H
: \7 C# {5 m- u方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
( B) G' L6 q& B7 Emount.cifs //Samba_Server_IP/home /mnt/home -o' c0 a& }8 o) P; }1 \% D7 n% C
) b4 E( D* ^; j$ W
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)2 }2 K% e/ j& j. S3 ?" q
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
& V, v# s7 c) D! H0 E
* r+ e" |# C% V; U" e- B" o5 b若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
: a4 v2 z% f' T8 V; H. b4 Cumount.cifs /mnt/home

1 s8 b0 ~# E' Y* S0 M& \umount /mnt/home
- a  e6 u0 l2 [$ w& E  k/ |) B: {0 U: t( q) Z6 P2 a, z  Y2 }; |
4、CentOS 存取 Windows 分享資源
: l- O4 V  }  v- NSamba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
% d, P) m3 R/ q( a" h0 U
( z6 L* j0 Q, j  u" l8 vWindows 電腦名稱: user1-XP
/ A6 v3 i8 M, Z# c# P( ^  z分享資料夾名稱: Shares
2 D% C& P  ]4 l8 w# Q可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
6 B" n' b' Q+ q5 S3 w0 \) M3 f可存取 Windows 分享資料夾的使用者密碼: 123456" I( S8 ]/ n5 }. u$ b) ~
6 l8 N1 X+ I! e) ?' o
CentOS 掛載至本地端檔案系統: /mnt/shares3 [$ ^. _7 ^# E5 r. g3 |* j
CentOS 帳號密碼檔: /home/user1/secret.txt9 t  P5 F0 v. J7 ]9 o" u
安全性權限設定: chmod 600 secret.txt, q6 S0 e9 y( U% K9 C* E" p. x
8 @& ^0 V. f; g$ Q: p8 B
了解後我們修改檔案系統設定檔 /etc/fstab。; l/ @6 C8 N6 a/ |
#vi /etc/fstab0 |# ]  Z3 m% h9 j- {  Z! t7 F/ W
, o, Q; y4 r8 A" |- P7 m
LABEL=/1           /        ext3    defaults        1 1
# Q8 L4 p9 `9 H/ }+ ?& y4 u9 w
$ O$ Q3 g# n) W+ b$ Z: Y LABEL=/home1      /home     ext3    defaults        1 2
/ S% s' v7 O) n8 }+ a  v8 r! _
+ ^6 w6 D$ g1 @' }2 m9 I! u& n, ^ LABEL=/tmp1       /tmp      ext3    defaults        1 2: O0 j& \! I* O1 O( k! R* Z6 U$ O
0 p; ]$ W  N$ U& d; [
LABEL=/usr1       /usr      ext3    defaults        1 2
' H* }4 B2 m% y+ d& L  K
# \+ K) t5 A6 M+ q4 |/ ?& P. b% g! R LABEL=/var1       /var      ext3    defaults        1 29 j) v  e5 L) _

: B4 f2 |7 o( E& ~" B' {# L& o tmpfs             /dev/shm  tmpfs   defaults        0 0& J0 z1 ^5 \% J7 }  [) F
, s9 U4 }# |( X3 j9 l1 O
devpts            /dev/pts  devpts  gid=5,mode=620  0 01 i8 r4 ]- D7 b2 Z

% G. a$ m0 M9 G" `6 W% n. [- Q sysfs             /sys      sysfs   defaults        0 0# z: z8 r+ n; m

* h) y( W0 N8 u: G proc              /proc     proc    defaults        0 03 k, D- e5 m" h* i- g7 P4 B6 }$ u
4 g: l; z3 z; B* q, n; [. T
LABEL=SWAP-sda6   swap      swap    defaults        0 0
0 H% V/ y! h7 k8 u( j2 L2 o/ K' z, ?; F" c, a& L4 e
//user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
: h5 I: p' Z- I- p
7 h/ \. Y$ H  u$ u3 D建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:1 I9 U2 O4 Q8 l
#vi /home/user1/secret.txt4 k3 F+ X. a. D+ E

. f) {; I9 x3 R0 E/ B* T- Y( R username=user1
# I" z. j/ O( h! Z6 R9 U; K
4 n8 Z9 Z" k$ ^ password=1234562 f1 w2 n3 E; n' D( c/ h

& d6 V; M  U+ ^* x. i% ~6 U設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。5 \( k1 ?/ g( n$ N; P
#mount -a     //讀取 /etc/fstab 更新3 n8 o: T% Z8 I' O" E$ G

( r- F" t9 x- U- ~: Y( ]#df -h        //檢查是否成功存取 Windows 資源
7 C  i; E' W$ D2 Z2 f6 B- l7 D% Y' R. D/ `3 m; f, _
Filesystem            Size  Used Avail Use% Mounted on" s4 q8 G  i2 o& P3 B# O- R; X
) t# a! c3 }) c/ _* y7 m# X
/dev/sda1             9.7G  2.3G  6.9G  25% /! M) O, O# ]1 |1 ~* S7 H  c8 z
. ]( k0 M4 ]: J8 U% s
/dev/sda7             414G  211G  183G  54% /home  p7 |7 l: k5 N% v' M4 Y' F, c" I1 T

$ ]! ^8 ^* r1 f5 D& m2 L2 | /dev/sda5             4.9G  139M  4.5G   3% /tmp
7 R/ r" m1 F! |3 s, x1 Y* \8 w" W: \5 s+ c
/dev/sda3             9.7G  2.3G  6.9G  26% /usr
8 z2 m) K, X/ }' Z7 I. m  S7 R7 y* w  S% J/ v6 S
/dev/sda2             9.7G  255M  9.0G   3% /var) K2 N$ r" a. G9 {# Y: ]- q
2 o) c3 g, {' k( A' C% |" }) g
tmpfs                 2.0G     0  2.0G   0% /dev/shm8 C+ q4 P* p1 S: V- M( c
7 d" w3 ]( W# [1 n
//user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功

1 q' j  u7 r& B- o# w& N, s
/ [' D8 m* k. S4 D) j% F0 k9 |( B
[Troubleshooting], \4 M8 C* r" m$ ]$ }
從client連到server端時出現error:  8 n4 O+ N" j* g0 |2 h. l
samba mount error(110): Connection timed out
5 y. T- O; n3 q7 C) c一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445: @0 o  ]5 {/ j% u( R
5 v6 {/ J( v4 W; a% n( I0 B, {
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
0 V/ R, ^" {" v1 f" f' A! u7 ^
/ v8 x% q/ b, a
用 yum 查一下有什麼 sshfs 相關的套件:' u7 D$ M% U+ g5 V6 {2 u2 d( @
# yum search sshfs
+ Z: z8 L) P8 C- P=====================================================================/ A. u( @1 X- C& [
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
' _$ X8 c5 c' E" T安裝sshfs:
( b* m1 J6 \3 z( x) q/ d0 B#yum install fuse-sshfs ( l1 W, k( @- h9 F7 w( t! o  k7 g
建立掛載目錄:
: Q* T! H: I. A% D3 S; Z$ g#mkdir /mnt/temp
- T: U! x' p% t) [  R. h用sshfs 掛載遠端的目錄:
; v+ e# P7 k: [5 `% o. y7 B#sshfs -p 22 root@192.168.1.2:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
) ~3 P2 ?& e: S9 ^1 froot@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼
" I8 q7 `% I. ]* w正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的6 Z1 d- q1 t0 u6 p3 L3 p
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
' p: z3 g" u- J+ S
/ X5 y  x$ z* k: R& C9 j帶上密碼而不用手動輸入密碼3 r4 C. H" x) g* |+ }; X" s) Z. j
#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp0 W- {. q% T" A! |0 |
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:" I# k% T- Q: M$ f& J6 \" h
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/  /mnt/temp
; I! I5 X' l) d0 H  l) b1 j/ w
- O2 {, e9 L$ Q3 y8 M8 F8 o" T/ _% _
以一般帳號(非root)掛載時,出現error :
* Z! E! R. ^( p- d0 sfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限; R4 E& ]: b; T" n
ls -l /bin/fusermount- N; M9 H8 ^& Q1 W
-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount
& I( ]  P% M5 D  c' X: \, g  ]故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
. p& O' }$ P9 T7 `! e( [

0 J- c2 K; j9 P) ]: j& {; ]4 k可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
; l0 |8 \) P+ p# Q; P9 q
2 W! b$ w! G+ P% a5 e; T* S. n; p  L! K0 `; {3 `# V* A9 @. 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