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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
+ p+ q4 Q* ]- G5 e  t; ]分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
; r# k( H* d% P# ?& Z$ O  k" k! Q4 h' Q3 j
2、Samba Server
8 V1 E5 s* w  @; ?3 M步驟1.安裝 samba 套件
& L- a$ P+ `( g7 t- _6 i. ?* ]' w! n* l  Q2 D$ q8 t& i4 n) {
利用 yum 指令來安裝 samba 套件。" e; [! `; |3 C! E
#yum -y install samba    //安裝 samba 套件
/ |. D4 T4 ]" q! ~: ?! n
9 P' h- o) R: Z***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
# G2 V4 Q' F" l# h3 Y9 \' W#yum install samba-client samba-common cifs-utils
, ~9 {2 c/ s' {) f
& ^' J, T5 i# O1 s3 v2 a步驟2.修改 samba 設定檔 (smb.conf)
6 q& F; p* ^8 p+ H( ~: }+ R; n; i
1 L& c; x4 g, A修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。# f8 p/ Q; r' @
#vi /etc/samba/smb.conf  //修改 samba 設定檔; c) c2 B0 E- E0 n3 L

" ~. e( y+ v" f2 l6 D/ U global                                 //通用設定
% ^( `  _" i3 {2 w! S* |9 k5 [7 A1 X4 M$ L9 b
netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱
( |& u1 K/ a7 h5 u2 D+ W2 Q- F# X! c; Q2 r
workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱
2 Z6 ~% M& ]" Y* m
5 s4 h2 y8 `. b; F# n! i2 E hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源1 P' w+ l8 i! B
4 F& H) Z- ^1 |: {& e  M
hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
  k5 [9 J# R& H! A- ?/ s# d" O
$ s& {8 a0 ^7 f6 P security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入
- S! |. M) j9 o0 n6 I- Q# B0 y) f0 w9 t4 b/ h/ s& p7 E
encrypt passwords = yes                //是否對密碼部份進行加密
( i1 S8 p6 M( |( c. z& i$ C9 {7 Q: g! f' l0 F, O) J
display charset = utf8                 //Samba 上所顯示的編碼
) t( y" u( i7 U; k, g* C
, G7 j( F' `) y, H/ } unix charset = utf8                    //Linux 上所顯示的編碼- g2 e4 B0 K2 @. d$ I- {

+ R1 N4 |) `0 C8 D dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)
4 `$ t$ e" n" H. x$ E& e2 X8 I$ ~! ^
home                                   //分享設定,屆時顯示分享資料夾的名稱" X1 V) q# D% a: _+ ~* y: F. f$ H

) y: D/ x( E- F: k7 Y" F2 _3 o comment = Weithenn Samba Files Shares  //分享資料夾的註解4 _6 A5 k  Z! M( p. L
5 ?$ L6 ~5 I) q9 K; o  D" h
path = /home                           //分享路徑
5 m: P3 c% R5 \7 E; I$ y
. ?! O& X6 O8 | valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源5 c( P7 e+ n/ Y
/ r9 n, M# ?& E7 }; k
public = yes                           //允許使用者登入後可看到此分享資料夾
7 q# o$ _3 T  i+ y/ }! M& C. f) W) e3 ?( j5 U$ M/ u
writable = yes                         //允許寫入
& w7 ]4 Q! b- e* ^0 M4 Y8 o( `" A
create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664): e6 Y2 d2 p, D( i' m7 N

2 a; w6 s/ k" e  Y, v; H directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
' X7 |! [+ Y: f! s% B5 P) I, Z- \& H' @3 a7 q- k7 N

: ?( z7 Y8 _% }0 D, m0 {步驟3.建立 samba 帳號5 x; @3 L8 R( E( m& O

5 V7 J  h& Y( ]! P9 T# i# {  V% f設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。) S+ B2 G# k' U0 o2 V  s7 N
#smbpasswd -a user1  //建立 samba 使用者帳號 user1/ `& _2 |# i0 s& J
- Y: H- F3 L# j3 u- k
New SMB password:        //輸入使用者帳號 user1 的 samba 密碼4 h3 [; Z8 ?& N
" v. w: U1 D: I0 N
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼' L9 ~0 Y* w) i

8 g/ `, ^) [2 ?/ L$ X7 y Added user user1.     //新增 samba 使用者帳號 user1 成功
2 |! B, ~9 h4 `8 Z* m# |, j! v5 j
$ d6 P/ T6 z7 i4 W- N; h新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過' z$ B# G9 C: [; B/ v
#cat /etc/samba/smbpasswd  或者5 M/ I2 L9 d. H4 J
#cat /var/lib/samba/private/smbpasswd
% X, a. m: y1 n! Q4 ~: X' Z7 \ user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :
" f+ ~0 c+ S3 q. Y: U
: i+ F3 M9 C1 e6 P) n步驟4.啟動 samba 服務) A  H8 B$ ~# T! l# y$ u, p

9 ]/ J9 t' {8 d: ~$ I; N) Y8 n2 X在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
2 o  y' [+ @; m5 P  l#chkconfig smb on
2 U' n. P# A) o4 A
) x5 P/ Q5 Z9 m8 V" R, e0 {8 S使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。. }' G5 a" O/ e8 q
#chkconfig --list |grep smb* Y, A! y" |0 S$ |8 G0 K# _

1 g" C+ r; C; A' z smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off
' `7 Y; Q2 |* L, H' {& X8 c& A" v& t3 a7 x+ ~' k
完成上述設定後便可以啟動 smb 服務
' J3 x% Z& l0 ~# u#/etc/rc.d/init.d/smb start
; h/ N; D) G9 c- o+ b; ^1 w7 f  n- F& z: \, M
Starting SMB services:                        [OK] ; W1 T$ Q; {3 i& X* y$ f
+ z6 o7 }$ Y( m1 A5 X
Starting NMB services:                        [OK]  ) Q7 q* a& n" s) c- u+ W- r
8 H1 ~2 K9 J& r
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。* R; t1 X7 S! Z4 c5 I2 x
#netstat -tnl
3 F/ Y$ }" p; B0 C' _
% y5 N0 N# h/ ^/ j: i Active Internet connections (only servers)" F9 [$ d; t2 n0 ~; n- Z! ]* Y) L+ k

& S* `/ e( b3 W& y1 k/ W Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
7 ~" U# o3 \6 b" G6 [$ b- B1 f' u1 W$ X" y
tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN1 Z# O; n- k/ h, H5 c4 q

1 Z5 ~$ x% [+ e) J4 f tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN
  W$ c+ e4 Y# G9 K) {
3 }( C' i5 M$ @" ?" R3 }- U9 s3、Samba Client
+ z+ h8 y2 P- t' G( T( H以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。1 w& Q  x* o; ^% E9 s

' C8 }' v$ i3 E2 g! a4 fWindows Client* [( u, g3 S. w
- G* X. U& _: }9 U/ g; C; _, d
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
- l% I6 p$ O8 p6 l" E1 I檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
0 J4 z! f/ |  h. s9 U驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。: O3 X1 S6 I. |. a1 X
. K3 T8 f! z( [
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
0 \- v+ b( y# y; a0 R6 d4 \$ r) y- }; P7 y' \4 q& t! P. u7 f
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料), x1 W  X2 Y% E& e( i' m$ a; }
net use w: \\Samba_Server_IP\home) }9 q$ ?3 C6 [7 O3 d2 d7 p
# Y! D! G0 x  m1 O4 X
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
3 @$ H  [2 y/ u( C$ C; X" Z net use w: \\Samba_Server_IP\home /user:user1 123456. b" a0 o+ g; Q
7 M0 K# I1 H% d! `" x
CentOS Client
6 ?4 W- \5 d6 X! P" F1 s$ Q  X5 L2 t. L6 W
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。- g! V& f1 v/ }  c! m

6 h  e4 E5 l4 K方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)# |/ G( t# |' B$ _
mount.cifs //Samba_Server_IP/home /mnt/home -o
% u" W/ M( D9 m1 G) Y; o! @) J# b+ S+ _6 b4 {/ N3 j8 d8 F
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
- ~' M/ W5 @- k1 ?mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456" A9 I! N' ~, Z6 O# M% H7 I4 T7 ?: o
% a" o% Q  e- _" n( s  n$ K5 L
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
0 s  |2 N" c$ l  W/ h$ sumount.cifs /mnt/home
: k, t0 F2 w7 i# ~2 r. v
umount /mnt/home
: z7 b! s0 L) g1 @: n  u4 k/ M. u3 I3 I1 c* C
4、CentOS 存取 Windows 分享資源
8 ^" D- I- }' GSamba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
  S# A: c; }; Q! Q5 e. j7 x% J" r3 R& @/ i. b: a, b. l8 H0 [0 W
Windows 電腦名稱: user1-XP& `3 ]  p% C4 L9 w6 B
分享資料夾名稱: Shares
$ o; K7 F) X* K, c& f  d; x可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)3 a$ J" B4 z* @4 R, r, l
可存取 Windows 分享資料夾的使用者密碼: 123456
$ r3 v1 A5 q( j0 z, t& y9 Y4 O7 u2 C3 c) v5 e. f3 c6 o
CentOS 掛載至本地端檔案系統: /mnt/shares9 I3 k0 W) W3 B/ s7 G9 B
CentOS 帳號密碼檔: /home/user1/secret.txt4 A, o' M1 h) u* S8 I
安全性權限設定: chmod 600 secret.txt) A9 w8 Z% A) o* Q7 I  t

' x$ R. F! B  G了解後我們修改檔案系統設定檔 /etc/fstab。
; m. X& }; ]% E9 [5 W* i#vi /etc/fstab+ a% Q- ]# [  B4 E" G: |
. C' V/ a3 ], y- P& n0 T& O+ y% e
LABEL=/1           /        ext3    defaults        1 19 A* c3 d, e/ B

( d3 Y: u9 `1 N* e2 C LABEL=/home1      /home     ext3    defaults        1 2  U0 X, U0 y, Y4 @: z
1 d! \! W: l( Y' H
LABEL=/tmp1       /tmp      ext3    defaults        1 2
# P3 k' {  ?3 q6 t8 w2 s6 Y) j4 s5 c0 [" g
LABEL=/usr1       /usr      ext3    defaults        1 2. Y! @8 `* a/ [! {3 c: ]3 \0 k

. A. F/ h  g+ s) V LABEL=/var1       /var      ext3    defaults        1 2, R2 z9 h8 [5 a; ^1 g
5 a+ q" A, ]0 }: D& v
tmpfs             /dev/shm  tmpfs   defaults        0 0# c4 S# O, w7 p0 h& F

& [2 G( r! L" ]& @. A, r: F) x devpts            /dev/pts  devpts  gid=5,mode=620  0 0
( ~" Q/ \( t0 F6 i6 E1 P7 L6 y- T6 X9 c( B% }/ C- i: [
sysfs             /sys      sysfs   defaults        0 0# _" R/ {& b/ {: E  f# p# h) c
5 p8 M6 N' l, g2 D2 |* N
proc              /proc     proc    defaults        0 0
1 z6 Y/ ~% J. Z& Z
. Z% R8 ^# `9 d' l, m  y LABEL=SWAP-sda6   swap      swap    defaults        0 0! [( P8 Y! \: W% P

( i6 u4 ?, m0 O; h) D- I( m; g& G# y //user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行  x4 |- A8 k( @7 B+ Z% z' q
9 `. D( z: K) ~( {
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:! J6 c3 c. O+ Z' y$ N! [+ f
#vi /home/user1/secret.txt
0 l" p! E8 T/ e" }+ r
! ~) }. C! i; c7 [' B' z+ s$ t username=user1
4 E& {$ }$ o6 `$ U* d0 T0 G
+ Q( V5 H1 M2 W  T0 R; x1 f password=123456
( s' O7 [- G' S1 [' W0 B9 x' X+ S3 D. T: |9 q, f* q) L/ d) I1 |
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
! w& S3 d- @: F9 ~4 W#mount -a     //讀取 /etc/fstab 更新0 s; p6 g# @% C3 Z: |
  S2 G' ^1 n- ~
#df -h        //檢查是否成功存取 Windows 資源/ W+ Q1 p5 Y: T0 R8 b7 K' `" G

) z% p5 t. r6 t' Q% `0 I Filesystem            Size  Used Avail Use% Mounted on
+ [. V  S4 N- n. y+ n' v! |) I: E  O: p% ?8 U4 e
/dev/sda1             9.7G  2.3G  6.9G  25% // Y3 T. X9 w' o; w: ~; C- G( V

" \# D/ v# K$ u- _' Q6 S8 ]* v& r /dev/sda7             414G  211G  183G  54% /home6 s: G. j! N) w; O+ v2 k5 E

' q) b; i; W4 m. @& i4 I' } /dev/sda5             4.9G  139M  4.5G   3% /tmp1 ?, \5 t9 H: y4 H8 r+ ]% C

: r, X& }1 }* L5 C8 a6 p5 A& b3 z /dev/sda3             9.7G  2.3G  6.9G  26% /usr5 @8 h: }* N$ J5 C1 J- J3 G
, s* I# p& M, e+ G% E0 `
/dev/sda2             9.7G  255M  9.0G   3% /var% v! r$ T- a9 y5 }; a- [
$ s; v4 g, p$ N/ s, Y
tmpfs                 2.0G     0  2.0G   0% /dev/shm4 g) I' L6 J# a- U; i% h8 {( a

! y) b7 O# l- q5 I) e //user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功

9 X8 G) {8 V, H2 z1 j

( V0 C5 p/ I9 D: N7 z[Troubleshooting]
' g4 ]1 m: @; Q. g從client連到server端時出現error:  
! A$ C9 b, S( psamba mount error(110): Connection timed out" X; L, b: n) Q: l; e; J
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445: U, r7 ]( M' N) E2 O- _/ t
' T, `) b/ E8 l- \; S
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
$ C# b# q$ Z1 o% ^
' E  U0 [4 p( B
用 yum 查一下有什麼 sshfs 相關的套件:  a8 M+ M' p1 e; X  W" I6 I4 Z
# yum search sshfs& ~. o5 q# i9 \; B
=====================================================================
/ u& c# a" @7 f% {. d% |fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
) E; T& _1 }* Q3 w. `* W安裝sshfs:
+ v7 O* _' R9 {4 T. P#yum install fuse-sshfs 1 b! a+ f' D1 r% i5 f- C
建立掛載目錄:
, n& k5 B( x! z5 `4 r9 A& Y3 n#mkdir /mnt/temp
' n8 v( B9 m3 {- L. U( z用sshfs 掛載遠端的目錄:$ }5 Z  @# k( v1 l) P
#sshfs -p 22 [email protected]:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄1 V8 V) K. x1 q0 |/ F0 O7 [
[email protected]'s password:    //接著要你輸入遠端ssh root密碼
6 _+ w+ g1 \8 C' j/ V% U6 I正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
7 A) D5 H* e3 S- o* k" u8 n如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便1 h1 _% S) C5 \: \4 U  I  m* q

2 m& T# o" {5 f0 f% e帶上密碼而不用手動輸入密碼
0 w8 \2 q; H% k5 ]9 V#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 [email protected]:/root/ /mnt/temp
! `9 _1 l8 R, A4 @8 W/ P5 G- v% q註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
$ h: T3 A& ]. b* G6 }, [2 {' [sshfs -p 10022 -o sshfs_debug -o debug [email protected]:/  /mnt/temp( z, a: V1 [* W. V4 Z

8 s* m. B+ `: M1 J2 G1 V' F5 E以一般帳號(非root)掛載時,出現error :( r0 v9 q9 b4 ?
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
- E; [6 Q% y7 l( U* G7 Mls -l /bin/fusermount
7 X' n: m0 s4 t0 U/ y3 S+ f6 |- D3 [# z# m-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount
6 d' T1 ]5 D; s: N6 E/ F9 A故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse( {7 y0 d; f7 \
8 d$ x7 Z# d$ U2 s* e" K
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
: o" c  [! _4 M3 l* O. ~2 E- R$ c% t* O/ S& X
" ?( Y* }. L8 j1 |

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