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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
+ @& @0 d2 O' ^+ }分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。; l/ @( g6 y3 W4 y2 S+ I, Q/ j

- P7 Q, t9 r1 w% U2、Samba Server
2 U$ r% {2 T2 ?5 R, u) I步驟1.安裝 samba 套件
$ Z; J1 X9 ]* Y8 V
  m: g2 J  p1 Y) l6 d" j0 n利用 yum 指令來安裝 samba 套件。% h4 U6 O2 s3 \2 R4 R0 V) ^" ~
#yum -y install samba    //安裝 samba 套件
& ]7 @9 ?% h  n4 Q$ l/ ]7 T
* O! B; b/ O: L/ m% r. Q***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: 0 M/ o- G' A6 E! B' ?& C6 r
#yum install samba-client samba-common cifs-utils& k5 \) T3 A2 A! ?1 w
. e3 R4 Z) u6 E3 x/ ~. c, y) u
步驟2.修改 samba 設定檔 (smb.conf)
, ^+ |: o8 V3 P* q0 y" f( W4 |; o( V6 p6 v7 D- v
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。/ o/ [6 C/ M4 L8 B
#vi /etc/samba/smb.conf  //修改 samba 設定檔
) m, `: ]) {0 c; ^! O; w0 a6 D7 ^, S6 g3 Z$ `  L
global                                 //通用設定
; c& c+ ~1 G# j9 K
- V9 ?! @, z! M+ D; j  z netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱/ Y& @6 F2 A8 H' t$ ~
' U, h1 J% I$ M8 N+ ?
workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱0 {. W, b% `9 g% D

* x& r; z1 Y( |( j/ y1 C hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源- M$ s  G& w, T- V% w$ _$ h

7 V6 h3 W. z. I- R6 s# V% w hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
5 G( z  P- P7 h$ l* w. q& j$ f5 v' j; I+ J0 ~
security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入" w# i& x5 d2 J& T+ Q" C1 z: ^* b! B( F. w) B
) d" Q  x6 u/ K/ a6 `. \
encrypt passwords = yes                //是否對密碼部份進行加密
! f6 |4 x( Q# u) n- R) Y7 ?
) ^! c8 A( q" I; W5 L+ Q7 N display charset = utf8                 //Samba 上所顯示的編碼* c7 ~, r5 \0 o% m7 A. E
8 P, a( C& g: k$ |8 j+ j
unix charset = utf8                    //Linux 上所顯示的編碼6 z( O; l& c3 R

5 e- w" V+ t8 R% F, j8 M dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)
8 t4 v- J. T8 ?/ F7 @4 z% ?+ R# A- d! v( O. I) d' `$ s, S
home                                   //分享設定,屆時顯示分享資料夾的名稱
" B3 J- d* M$ M) g4 r' k8 D7 _
5 ~; Z8 \, S4 r: f: C* w; X comment = Weithenn Samba Files Shares  //分享資料夾的註解, K' f2 d) }% c

/ F$ |7 y1 Q5 D  _ path = /home                           //分享路徑
; F  a+ ~( A! c* f" W( J( V+ |- [( {/ N
valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源
- n5 H8 T, n0 e4 }! H3 ^0 x* s, Z" `5 g+ I. q
public = yes                           //允許使用者登入後可看到此分享資料夾
& s. s% R+ h4 o. P. o8 a8 u" _$ w! m) S6 u; a$ D: Z0 x
writable = yes                         //允許寫入
- _( P' D. H+ C1 U  {& r
# Q/ Q6 i/ [. j" |5 j. b create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)& O1 }# c6 K; i& i9 e  m, h

; ~# B1 z# H# ?) J& ? directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
/ G  h5 R+ H( e: ^9 y* T1 q- s7 u# Z) l$ d7 t. \8 n# t

, G5 o4 p. v/ P0 z" n8 m) y步驟3.建立 samba 帳號+ C1 C& l$ y& W) H

! D6 U3 j2 Z/ L' x設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
  F7 }$ [+ l% P8 u+ C#smbpasswd -a user1  //建立 samba 使用者帳號 user1! t# g. t. e4 f  o& i6 `2 [

% E1 o" u$ }! L8 K) F) v1 s New SMB password:        //輸入使用者帳號 user1 的 samba 密碼3 {( I* [! G9 P9 r, ]

" p4 z, M" d, n9 Z! C1 Z2 }$ Q Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
2 e  z- n* S- o# D5 H0 Y2 P, E6 ]" w- N( U, X0 ]+ Z) U, Q
Added user user1.     //新增 samba 使用者帳號 user1 成功2 X, m2 u6 d! H8 J- v% d9 P
2 m) ]/ w2 D* x
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
  v/ K+ k. f0 Z#cat /etc/samba/smbpasswd  或者. {8 G% k2 o7 p7 Y! x2 U
#cat /var/lib/samba/private/smbpasswd
+ Q- C4 i* |, B  A0 Q+ t user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :
. X# y- }/ x$ H5 C- Y2 o9 U( E! L# a  _0 v& C1 x" b$ M5 D8 f* }
步驟4.啟動 samba 服務8 v7 F0 M/ j8 S

% i& K( m# t, b/ [& A在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。5 j" e$ i" O: O
#chkconfig smb on
/ z7 M% @- u5 L  {: s! i* C0 X6 \6 I0 J
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。, r0 h3 r1 k8 R8 i
#chkconfig --list |grep smb
+ }$ S, y( j4 n. M# {  j1 N: |; c$ O: r( E6 q* q
smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off
' x/ F) {/ Q4 U3 n! \% w- g- m; w) R7 N& d+ v! A
完成上述設定後便可以啟動 smb 服務
/ |  b- n; F$ Y' D#/etc/rc.d/init.d/smb start$ q+ J4 F* \/ }, p# z6 b. x

7 v# a6 j! H; s7 [3 O2 Q- ?( T7 o7 ?# t Starting SMB services:                        [OK]
/ z1 B9 p/ p( ]. n( r' N0 @$ Z# L7 m1 \( h6 ?
Starting NMB services:                        [OK]  
1 F$ }& @/ Q! n% e2 n) a
/ n9 k; R; T+ e9 e* q檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。$ m4 M, P7 a) ~* ~6 V( |% k
#netstat -tnl
6 |6 l' r( D; w& ~0 ]7 |( t/ |4 _) Z8 E) @4 Y1 `0 E: R8 q1 G, a2 r
Active Internet connections (only servers)/ R6 y& Z. V6 V2 M* ]
, P) s+ N$ r- N5 z  |
Proto Recv-Q   Send-Q   Local Address    Foreign Address    State0 ?: o9 \0 \, b- Y) l, P9 J/ Q
7 W  Q/ o1 B' r) {! H
tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
8 j: k2 d5 M& c2 i9 B0 X8 c) \% q1 n
tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN5 ?) f, n4 A- ?! P! e' L: r
5 m- h+ ^4 u. G7 }/ c# S( w
3、Samba Client$ ^6 \/ w4 i: F" V2 p8 j
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。" I0 k4 Y. U3 M5 c* A% |

. \" F3 p9 R" h0 `' B1 AWindows Client
! ]/ _  t) p7 Q$ \1 b2 G0 }
) c+ H( d5 [" a; v/ F+ D, V2 w上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
& T8 U9 z2 i( B) E4 H, r, Q, p檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。0 q- e; r) t9 i- l' N8 P* Y
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。  ]# F( [; E, H# o) `# [8 P9 |
$ J4 C4 e9 Y7 r  m3 k6 ]0 E  h
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
* [" R7 |1 Z' v+ c6 M+ ?7 U7 M: e
, k5 r+ o2 s2 C* L0 h$ A  d方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)( F0 E; k$ X: U8 h2 P6 d: b9 s
net use w: \\Samba_Server_IP\home6 H  Y7 S; Z+ Y- `
  ]; P( H: q# J8 [5 l( P: Q
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)  s: Z) ]& Y7 k% S" |5 z1 B6 M# b
net use w: \\Samba_Server_IP\home /user:user1 123456! r5 b3 j2 Z( [5 B

' U9 n" z! K( u3 H% LCentOS Client
% `. G6 e$ f0 i$ V& }0 G3 E  ^* F; p$ R, L& B  n4 _
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。, e5 A( y# y; S+ z8 u

+ P. C' D$ `/ M9 @1 c$ t- t方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)# S3 @- a  @# K% e
mount.cifs //Samba_Server_IP/home /mnt/home -o5 J8 G. \1 n% {/ l
; v, L+ p7 D- F9 ^3 M, H
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)3 x9 [' c6 _" S: X) S* o9 ~
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456& O9 k" F0 B, d

( E' U1 T7 A# T3 k1 }5 q' X+ s' \若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。& S& s. r& c2 i2 A- s
umount.cifs /mnt/home

- }, u4 |) V* zumount /mnt/home
, S) L! i: \& q- m/ S$ N: V1 i. ^+ e1 ^6 }
4、CentOS 存取 Windows 分享資源
# W# G, C7 m( h4 W* }* r/ @Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:" e& o$ u7 e0 e! ?4 l0 N% Z& y; k

* C# r0 c7 k* c7 a2 eWindows 電腦名稱: user1-XP
3 T: M8 `8 V/ `3 K分享資料夾名稱: Shares$ }- L: [4 R+ A  [* ^( p# b
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)# J4 v" k, ]4 G9 j! E$ z
可存取 Windows 分享資料夾的使用者密碼: 123456
6 Z7 w  x: ^6 r1 `8 w* h# Q( F" U  E$ R: [. Y
CentOS 掛載至本地端檔案系統: /mnt/shares
2 m3 {/ X6 q% p( [# x" S* iCentOS 帳號密碼檔: /home/user1/secret.txt
5 w3 D/ S8 W7 `  C; c: @; I2 b安全性權限設定: chmod 600 secret.txt
  D0 ~7 X; d  Z+ g' G. ?8 X
6 F0 ?5 j, A9 ]& j0 V2 l了解後我們修改檔案系統設定檔 /etc/fstab。
1 g  M5 H0 k3 {1 b+ f#vi /etc/fstab
' K6 w$ G) W4 }3 _; u" {; p* B0 L* o: d7 d
LABEL=/1           /        ext3    defaults        1 1
% ?- X6 v$ ?4 n8 [6 o' R
: _* S& g7 {4 P) |, w LABEL=/home1      /home     ext3    defaults        1 22 ~) B/ u3 [0 ^) L- J

% j1 C" j5 v) R* ? LABEL=/tmp1       /tmp      ext3    defaults        1 2
: \# ~: O2 C* m4 m# `- y- Q# `2 z; L; g! g, ~
LABEL=/usr1       /usr      ext3    defaults        1 24 c9 e. p2 j! }' W5 g1 r; ~
  T0 A* K' |* ]! f
LABEL=/var1       /var      ext3    defaults        1 2
1 X; ^  I8 z. G# y4 d7 A" j2 k, n+ q0 v. u: l
tmpfs             /dev/shm  tmpfs   defaults        0 0
% J) G* f6 U( t& v* Q: |: q" ?( S, l2 R" h  m# G) g
devpts            /dev/pts  devpts  gid=5,mode=620  0 0( U, {; A3 d5 P6 I" y& U

! M) {) V" c4 S+ c! V# v1 W sysfs             /sys      sysfs   defaults        0 0, u6 d* T" l0 G" p$ d9 V

5 }# w8 `# Y' X' c9 ? proc              /proc     proc    defaults        0 0
! l# d0 N! i' L
+ T+ h. g1 o4 v' X# p. D' H+ _ LABEL=SWAP-sda6   swap      swap    defaults        0 0' y" h" V& ]1 u4 k- r) L1 `
* k: r4 r1 X+ r; U) A4 B
//user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行' N2 x5 c% c! S- z# e" S! g
" \% a0 L6 g; s% D1 F+ K/ M
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
  N2 ]( t9 z; W2 p# E#vi /home/user1/secret.txt9 k, T/ i' X0 q! [" g
/ i. O( h2 |7 t  y
username=user1
# K) \  O$ m: h2 z
; |; k) P! v: @: h" k; k% d* o4 w password=123456
8 U- l; v3 F2 b( h& H6 |  P2 x
  G2 K, C5 [/ m5 x! A5 i9 P設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
6 @$ f2 R8 ~) ^#mount -a     //讀取 /etc/fstab 更新) [: m) O/ N" n8 c$ q
' Y7 `8 q1 U! u+ h5 f7 d% z4 R8 i% E
#df -h        //檢查是否成功存取 Windows 資源) E& Q5 Y3 m1 S) d- M8 f

& }- k! k% g1 G4 P4 q4 b Filesystem            Size  Used Avail Use% Mounted on4 l) H' ^) R" c6 p& ?  \: _1 @
- o' V' J0 @2 x: l' |
/dev/sda1             9.7G  2.3G  6.9G  25% /, k; W" v3 P4 A# r

) n- z) o+ w: i2 Y1 s /dev/sda7             414G  211G  183G  54% /home
0 A6 r4 \* o) K- ?# a0 L! P9 a0 K/ E
/dev/sda5             4.9G  139M  4.5G   3% /tmp# B/ i6 U1 K8 H0 I4 W8 }  d
# U1 p) M6 V3 W( @
/dev/sda3             9.7G  2.3G  6.9G  26% /usr: B) W; f: C- D8 |* K4 ^" |
( r( ~( S6 `( m, Y8 ?0 W5 B& C
/dev/sda2             9.7G  255M  9.0G   3% /var5 M/ ^( U; E+ W* U1 @
# [, I3 l2 J; Q9 w" z( v
tmpfs                 2.0G     0  2.0G   0% /dev/shm
3 H: T" ?# A/ S+ V# o# {  N: h' E% `5 Y7 h) p
//user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功

! z& }1 X" z- Y) ]

0 W5 b, r. h0 K# y$ y[Troubleshooting]
( o$ `5 q' Y. l從client連到server端時出現error:  2 _9 A9 T8 Q# [: r
samba mount error(110): Connection timed out% J2 v# z6 y+ s( V
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445$ s8 }' z3 W( t8 `

; Q3 h- y  T  @$ h  q至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
* u! P8 \- U/ h  O& i2 N% ?
! C$ ^1 [7 a/ P5 O1 U5 Y9 r
用 yum 查一下有什麼 sshfs 相關的套件:9 z8 A* _- r0 x$ a1 J% N. @
# yum search sshfs
) d% v) d& v; U: {( k; _) U* j7 t: k=====================================================================
& a% [* Y: z. t, W+ Y% yfuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH1 r, D9 m" D: x: k4 d/ Q. a8 o
安裝sshfs:
; o- Q0 Q' `) P2 Y$ p4 b#yum install fuse-sshfs
1 Q% P; l! K2 ~建立掛載目錄:4 D: d/ g! z; O# y5 k
#mkdir /mnt/temp
, V" f% I6 M6 G2 l用sshfs 掛載遠端的目錄:1 ]- S$ L% w5 @4 u+ m9 H
#sshfs -p 22 [email protected]:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
# U- d/ r, \  x3 z( ^* \' |[email protected]'s password:    //接著要你輸入遠端ssh root密碼
4 |; ~# c- ?$ _正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
* a* z/ g( a* l. |; n( g+ ?2 r# C如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
$ Y- Z: p4 m/ y
, _5 G4 [" u# B% W7 Y帶上密碼而不用手動輸入密碼" d/ U$ p* ~2 g# a# p5 |0 d9 }- j
#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp
  E- ~/ i1 }8 F7 w: V1 q- X註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
4 g! |7 w2 O0 w6 f# P, Gsshfs -p 10022 -o sshfs_debug -o debug [email protected]:/  /mnt/temp
; R1 F2 g9 L" z2 ~( @1 V6 Z7 N
* j3 k, s9 g  A+ B9 [+ [7 F2 t9 A
以一般帳號(非root)掛載時,出現error :- K  @0 u- v' M5 u
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限. n7 V! q4 L' C! i5 J
ls -l /bin/fusermount& S% V/ T6 o3 D2 y
-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount
4 v$ N! O, {; L故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse. F! ]0 ?/ _; }( U
! D; j" w$ Z! u# J1 R
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux): l! ^  l) E: @9 O5 U- h5 I
' Y& x  q( C5 j2 C/ k+ ]
% w; i$ H" Z9 U; K

作者: 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