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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定" d+ N3 q& n! ^, j3 n0 k# q! j
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
; g3 Y: T- z0 h" x* l& c
7 o* X! x* k% M+ R* V) _* l; H2、Samba Server, [/ D9 K9 x1 _6 f
步驟1.安裝 samba 套件
5 o' U# H) R! T; R9 ?3 M3 K
4 _8 y3 u2 i+ R; i' E利用 yum 指令來安裝 samba 套件。, I7 e8 Z2 m' C4 q6 u. e) w
#yum -y install samba    //安裝 samba 套件  T: Q% {. {' S6 q% T

7 o* e8 V; m) n; N( w, h. O  v! N***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
, w. B8 l' I" o#yum install samba-client samba-common cifs-utils
1 G7 P6 q; D; n& r2 u$ T4 P; M, v& y, {3 _; R& j9 B0 [( A' [+ O
步驟2.修改 samba 設定檔 (smb.conf)& r% _  y% L8 Q9 z

/ Y0 G1 L- Y7 R) r修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。$ U6 o/ ?) V- ^# R# a
#vi /etc/samba/smb.conf  //修改 samba 設定檔9 h, Q9 W( w2 i7 p# B7 S: t
7 E3 I  P1 j. `4 k5 E  e$ q6 ^/ |
global                                 //通用設定: H* J9 e8 h) K# Z
& V5 ?, j( z( p5 C  M  j
netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
; Y2 d  }' t% ]: M# q* j9 N
9 R7 o  B* |$ F+ P workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱6 d/ C: D6 m" E- N

' ^: \' X( Z* Z1 e hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源; Q6 _# K7 ^" D, d+ h) Q5 b6 a. E

4 A7 Q7 Y7 ^& E+ r$ s hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
! w6 G. }# D& D2 j: G) S1 Y5 D  @2 O3 \7 r; N& f3 i
security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入/ l3 z- R7 Q9 N  T& W
( M8 f) Z) V+ y2 @& w
encrypt passwords = yes                //是否對密碼部份進行加密6 U# Y, g( f& c' q" B5 O

; t: n( i3 [% U! Y5 F' G" M. |0 ` display charset = utf8                 //Samba 上所顯示的編碼1 k8 t# i* n6 b

. W2 \0 d/ O! {2 W unix charset = utf8                    //Linux 上所顯示的編碼& J( T. i5 n+ X

5 T" ~6 k' H- H dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)! p6 Z& U1 c' h. Y* e* i; c
9 i$ f1 A& Z. x! Y$ Z) E0 |
home                                   //分享設定,屆時顯示分享資料夾的名稱
) ~# h5 E( D8 ]' H2 x6 r, O- ^8 n% G& d* d, ~
comment = Weithenn Samba Files Shares  //分享資料夾的註解1 o$ T+ Z6 r0 Q6 d
' e$ e# x: F! u6 f  R5 C
path = /home                           //分享路徑
+ \9 p2 Q: S# h, N. J' A; \- S
3 ]* M, I. |5 [; a, Z. A1 U& V# L; k valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源/ ?0 j3 s! N" W8 r* e$ _; h5 `* S

( D7 u3 O7 I! H" K2 h public = yes                           //允許使用者登入後可看到此分享資料夾
1 `, L: \2 q+ y  T  t6 V; V+ B
3 b5 L6 _; o/ Q# v% y3 o- C( h writable = yes                         //允許寫入& E5 Z: }+ a7 m, q4 a
. s5 ^* r  A* V# A* A* N) r! N
create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)
2 U; Q$ B- K8 p$ ~$ j8 s6 w) l5 z2 ?  C# j
directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775); Z$ p$ }* I! u0 q" H( F
7 E4 i0 `: U% H5 G" M5 a
, j0 }( b: V5 x: u
步驟3.建立 samba 帳號. @# P& }9 `( z+ T- [: p$ `4 l3 c

) ^: z6 y+ R" b/ S設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。6 _# T" {! H: ^
#smbpasswd -a user1  //建立 samba 使用者帳號 user1& K5 m6 v( F* g4 {+ ?+ r; e( @
8 A3 Q* z( r, U0 y
New SMB password:        //輸入使用者帳號 user1 的 samba 密碼
( r' e6 x. a( S
) E9 P1 |, u& @: B& N* l Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼* i0 o1 h# b3 o* e
. {: C$ \7 J! Z, U9 ]4 G, v
Added user user1.     //新增 samba 使用者帳號 user1 成功7 h' a0 s& N" |- ~

# [- |5 N# ]( P8 y. H3 |新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過1 E+ J& ^2 d+ n5 |
#cat /etc/samba/smbpasswd  或者
1 s+ E1 B' m* U, k# j% T#cat /var/lib/samba/private/smbpasswd( e9 N+ {1 V+ ^! E! s  V  {- z
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :& n, S8 i) R5 d& S0 `. k

# N% J; p* x% W6 X步驟4.啟動 samba 服務
$ }( x+ X0 G. j9 ^9 t. z) A4 [- ?. n3 t- Q( n& N
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
* f3 ]' A' a& a; _5 x, ?9 c( j#chkconfig smb on
$ E* T" `' {2 O' t; f" ~: e! P9 Q* X$ Y
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。/ `6 }  H7 f4 I' u
#chkconfig --list |grep smb
" R; b. D4 ~) p5 J
: B3 K5 c" y& {( d& e smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off3 C3 W4 b( A" o; M# Q- ?# H

' I! O3 A) m1 x3 }+ X8 b3 h完成上述設定後便可以啟動 smb 服務
+ ]' {. p( O4 U#/etc/rc.d/init.d/smb start
# o: \1 X4 ^: u" d! F; j( R8 R* z/ _' P& z; B
Starting SMB services:                        [OK]
/ k) j& t% E, Q8 [
% L3 }) P. V/ m, ~  N0 ~ Starting NMB services:                        [OK]  - A- j. G0 j- O9 }! W% ~; [1 V
/ F: e+ a# V$ j% l6 y- D; `
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。$ }# W% K0 @# A. h. ?1 F% L5 @0 w% z
#netstat -tnl) |. U' G6 g5 w7 X" i

5 n5 @+ i9 N3 x1 ^) a0 i# K. b6 h Active Internet connections (only servers)- N+ V% ^) ]2 i: t/ O8 v3 }, ]

& l6 ~) P. L. r: X6 \$ I6 O Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
% J4 a- t6 b. U& c- ^+ `
( ^7 e7 B5 P. r; C: S tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
- i+ d' v) X2 P# j5 I6 k) g. }1 V( _* L
tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN0 b$ F: X( H! f) H& n
+ z% d0 C  |1 _" s8 |5 r/ _4 Q
3、Samba Client
; M  E- N* m, U以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。% [  [" @; u" N! K
* E$ t: n% H- W
Windows Client+ a/ w5 {8 P% g3 z0 N- L
: W( w+ a+ J& _' }+ a
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
1 n4 U7 m7 m% G3 T檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
0 T- Y- |" d. D* ]& {  y) H驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
) B8 H3 A2 Z4 z8 ~, G" Y3 D9 \; X$ ~; H
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):2 l( ~3 D7 b* X2 T
% G6 G6 h* S6 x3 R
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
4 A& L* a9 H1 D( q4 x7 p net use w: \\Samba_Server_IP\home% T6 j5 z4 n; H4 Q" u3 p6 |
1 w* v  q* t3 }1 m, d% B, u' i
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料), q. l8 w/ i* ^9 H; u
net use w: \\Samba_Server_IP\home /user:user1 123456
. U1 ~8 t/ X% l1 G( Z& m3 _7 J  P) ?2 F  w9 P) o7 G- S4 X  i3 o
CentOS Client
  V: }, Y7 n. G4 ~! K  R3 Y( M# }& R1 F( N5 n* U; ?
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
4 g1 K; n8 Z' q7 T
" f" s) U& i2 A) d方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)/ V1 r' h! A) |, C& I
mount.cifs //Samba_Server_IP/home /mnt/home -o. V1 X) t& Q8 s  D1 `, V

, L) Y# u! e8 d6 _4 X9 \方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)! t* Y( y" L0 X- Q" p+ C
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
7 g1 k1 i$ t) D0 h5 H6 I" |7 {' N- `) T# O
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
, P* g. z2 I  H* H$ B  e- I+ {umount.cifs /mnt/home
5 h8 r/ g4 O( s3 R3 [
umount /mnt/home
/ }# u  z6 v) {
3 V/ A' x# [% G& t  n  T4、CentOS 存取 Windows 分享資源
- A+ ]  j& ?. y7 J* f+ `; eSamba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:' V& o2 w; G+ t4 E" A* {8 v3 J# N
$ I8 X4 u: {8 E8 C+ e
Windows 電腦名稱: user1-XP1 M8 x7 _" ^# M: K
分享資料夾名稱: Shares
+ z% P- C: [; M/ t可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)# o( i( I0 Q) B) L( v
可存取 Windows 分享資料夾的使用者密碼: 1234561 C6 Q" K; _$ `9 ]

5 y7 z/ y' D/ u; VCentOS 掛載至本地端檔案系統: /mnt/shares% y8 {/ N; H# s  @
CentOS 帳號密碼檔: /home/user1/secret.txt
+ G' F  I3 k0 Q2 I3 `! \5 v安全性權限設定: chmod 600 secret.txt
4 R/ J+ i1 ~, V0 G; t) u
3 S; f3 {4 d& z了解後我們修改檔案系統設定檔 /etc/fstab。
6 b1 H) h/ v1 l1 v#vi /etc/fstab
9 b8 Q  G4 ~$ ]6 E( G  G6 s5 l' ?( r2 u; Q$ G
LABEL=/1           /        ext3    defaults        1 1
6 ]7 k! q6 D) S/ \3 P- N/ x
" E$ O: m' g( o6 F) }- Q LABEL=/home1      /home     ext3    defaults        1 2+ u! c4 `0 D4 b+ _8 e

8 n9 Y) P) {8 A* D LABEL=/tmp1       /tmp      ext3    defaults        1 2
/ w% R- F8 m9 i2 S7 o! S. ?3 v
# y9 R. E5 c* H, Y/ J9 m LABEL=/usr1       /usr      ext3    defaults        1 2- v& y; [! _6 U9 g7 b

& m* l$ G0 F# a, y- e; x LABEL=/var1       /var      ext3    defaults        1 2
: m; ^8 T! e' q. y6 u
) b6 W: C* G2 l9 {5 S. V5 I tmpfs             /dev/shm  tmpfs   defaults        0 0$ T* Z# M/ H  z7 J

8 U. S4 Y# p3 |) i6 E$ N) x" s devpts            /dev/pts  devpts  gid=5,mode=620  0 0
5 c* ~) Z& W& P; L" S
4 N7 F/ T2 p. q sysfs             /sys      sysfs   defaults        0 04 E4 a$ L  c- [( K/ D: w3 p
& G' T- L9 k2 `) x
proc              /proc     proc    defaults        0 06 y: C9 ]. S; o
9 m$ M1 a7 e; t8 h8 A
LABEL=SWAP-sda6   swap      swap    defaults        0 0, F" n$ r/ v" b0 n( K, k2 U- z
; U8 w, j3 a7 y# _
//user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行- ]' _/ a" g5 O+ G. H$ _8 n
' H3 N+ R; W3 T7 \: U/ S
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:9 c7 R5 ^6 z! l- B$ X* _* I
#vi /home/user1/secret.txt
. {4 `5 }# E+ O' a( N! }0 Q; x9 [% F# I7 f* U$ k0 ?% C
username=user1  Y  @1 c  w, f/ ]! A

" s( S! J9 }" i, x password=1234560 V" d+ t  ~" n4 `+ u1 y

! m+ P- H! _( S( W3 U設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
' `; b0 |, f1 M1 O0 b. p( r#mount -a     //讀取 /etc/fstab 更新
; ~. l7 m. {& b% t% R1 j* H  p4 u
, Y# z2 ?8 j6 Q' f8 b#df -h        //檢查是否成功存取 Windows 資源* K* c9 m% I! y% T+ e( _" E
0 w, E" X# ?+ {3 s& I/ Y
Filesystem            Size  Used Avail Use% Mounted on" k6 P+ Z$ O$ D9 s( \

6 l2 N. v( X% k9 Q& i /dev/sda1             9.7G  2.3G  6.9G  25% /
1 i; _2 D9 \% _' _! T6 d; t$ B2 V. n( f( P" J
/dev/sda7             414G  211G  183G  54% /home
" o7 {' c: x4 a* f, L% m% P  B  {; g
/dev/sda5             4.9G  139M  4.5G   3% /tmp8 i9 n6 s9 c1 Z7 J% o
9 w3 ?6 H% Z! g- m
/dev/sda3             9.7G  2.3G  6.9G  26% /usr
6 z4 W" {+ l) b( f8 K+ x; x
2 a+ D" d1 c1 w) u /dev/sda2             9.7G  255M  9.0G   3% /var* A9 g3 {! k/ S9 t

% A. {& s+ z  ?* _! X1 V1 X# |6 Q tmpfs                 2.0G     0  2.0G   0% /dev/shm& w  r: l; b" B) c7 J, y9 u, {. \

& [# ~9 Z4 i2 I1 ? //user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功

, \( A1 @/ K6 D4 _( D' u

+ g# Y  ]0 h, f: ~9 v[Troubleshooting]7 S; J8 Q2 I: k. P; ^
從client連到server端時出現error:  
% A' v5 N" M" l  s8 _. Rsamba mount error(110): Connection timed out2 J/ o6 T7 d7 p
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
- F, q: h; J+ U" j0 k5 D8 @" @

* ~( u. \/ D- X# Y8 V7 h至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:' H* \; w$ e* a+ r9 ~: F

- ^9 a) C4 P! I: q7 f
用 yum 查一下有什麼 sshfs 相關的套件:
8 h5 L6 }0 [7 |- N" g/ h3 W# yum search sshfs
0 ]' i0 A1 {, j( ~8 _) P=====================================================================$ c& j+ b) J; Y# x
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH( j4 t3 L6 V/ Q, x
安裝sshfs:' R$ X: y( v" r7 }4 T8 s
#yum install fuse-sshfs + Y3 B, ~1 A6 G* d' ^% y5 U
建立掛載目錄:; j- J6 A7 P6 u+ ]
#mkdir /mnt/temp1 w2 l- j! T0 _' H3 W
用sshfs 掛載遠端的目錄:' v& t( D/ T: X$ L3 N. j' V
#sshfs -p 22 root@192.168.1.2:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄! ?4 w' [  e! I/ f" L
root@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼3 U- _3 L) [5 J: i- T2 h; P
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
8 p9 O- M1 _% o6 S( z如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
! m4 _6 [3 K( b, b
3 ^) C3 V. Y- R1 ~. c' L帶上密碼而不用手動輸入密碼
0 u! Q* @3 ]  f7 W3 h#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp$ s+ a" W$ J1 d8 R: v1 y
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
. U4 e5 y2 A- @: ^sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/  /mnt/temp
* P( y5 U" E- G

1 k% t3 q8 a4 x! H/ H# Y- F以一般帳號(非root)掛載時,出現error :
2 _4 O; M" k0 S. n- r# nfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限# ?- D/ K: }! w. _  z
ls -l /bin/fusermount
2 R" e2 m1 R4 O# g5 f. ?0 q) m* b-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount+ Q. l6 j% q  v" i9 c7 `6 K7 E0 v
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse% o3 f' X; Y0 m1 x
" ?- u: L. |3 q7 M, l" V7 k
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)9 U( [1 R. f, T

( M1 u4 W$ X5 Z1 p2 W8 y, r$ G. g1 m8 f

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