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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定* s: h7 T% g- ~1 [4 t
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。2 w& k4 R+ w2 Q+ p' b4 [

6 z+ ^7 u2 d9 z$ s* K0 d2、Samba Server
( d0 C% P, E8 o5 w) C% A步驟1.安裝 samba 套件* [) H) W5 T, e+ d

+ e8 |1 J; ?$ u+ w- a6 ]利用 yum 指令來安裝 samba 套件。
2 A0 {/ W! V- @0 |#yum -y install samba    //安裝 samba 套件
4 p+ Y. r: A& Y9 H3 V
- E# S9 {2 t& L1 K***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
! L8 d6 c" ~) v7 Q) V. h" B#yum install samba-client samba-common cifs-utils
+ g0 b+ [' T7 l1 e* {. R, n- z5 u
5 k& t8 a- G  @步驟2.修改 samba 設定檔 (smb.conf)
, A' L5 u" T; N2 N6 C. h  G. P2 c3 b+ J6 ?/ u, a
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。# `. j4 n: u1 L& T8 r" o: G$ S
#vi /etc/samba/smb.conf  //修改 samba 設定檔
9 Y7 n& W( ?; h5 `" Z
( ~% o5 |0 ~4 D9 s( z3 Y global                                 //通用設定
, h; p' Z9 ]% {) h3 I* w6 H3 V, d/ W- @  b
netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱3 m, @  ?$ Q  z3 P# F/ K

  }( l: o' C% q workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱: r5 [$ \* B- @. l- H$ M

) J& t! @- |/ m" r/ {. W/ { hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源& Q4 `- Y6 ?3 S9 \9 ]( n' _+ V  f
0 ~/ Q" F' h0 W. X  k
hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源' U. {% Y: A. k+ W4 {& e

# f, [+ A% F' ^" `) a7 d0 F' K; O security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入0 S3 \! C  y) c8 B; W
8 X( k5 k, A! E
encrypt passwords = yes                //是否對密碼部份進行加密
; ?( B6 z% P) U7 U3 N" H% E1 i5 ]; D6 z2 Y
display charset = utf8                 //Samba 上所顯示的編碼% [2 U2 z( r* \8 R

, a1 A4 F5 C, u$ V( j+ t unix charset = utf8                    //Linux 上所顯示的編碼( @( f% _3 x8 B# Z

- m2 g: p1 x/ K: o dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)
' K  g  q3 e# _, o# b
$ y; |7 i' L' |' D, K2 t  S2 a home                                   //分享設定,屆時顯示分享資料夾的名稱
/ \9 \$ L. S+ I* [% X& v5 w/ M$ q* j: g( i% o
comment = Weithenn Samba Files Shares  //分享資料夾的註解
0 Q' @( V1 R$ j6 h# r
/ x( e4 {! F+ i- w, m9 @ path = /home                           //分享路徑5 I% K4 A! O- g/ y" K* N, r
% W8 D) M* S3 Q
valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源
8 ~+ l9 Y" ?1 E3 \' y, \7 g1 s
  @7 Z; A) T' X8 n" I public = yes                           //允許使用者登入後可看到此分享資料夾
! X+ u5 O$ Y' {  H2 }- G- V% |/ }  d
writable = yes                         //允許寫入& M) x. T0 |4 ^; i  `
. ?& H9 v! k3 b( n3 `! ~7 u/ D
create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)' A  O& F/ X2 D
* |. w! o" w! |% q: }1 Z
directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)" H: q4 V! y: d1 G

% `! ?$ `1 v; \: c! r# M8 p6 K1 \  u/ O# N8 [# F( H
步驟3.建立 samba 帳號8 S4 l$ ]! \& r9 {+ l/ v  e$ n
! u% s% {4 u! o: w' Q
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
& n$ ?/ _% U! ^. x) L#smbpasswd -a user1  //建立 samba 使用者帳號 user1, E& \/ y' L2 R' V

- L) r! c: B1 E. T3 c0 R, L- R8 v" Y New SMB password:        //輸入使用者帳號 user1 的 samba 密碼
4 v3 k& l- D/ Z3 H% }; A! q, G/ E0 ^( b$ }7 p
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼5 U* d: b8 S# A5 ?

7 _) R# R3 u$ Q* T Added user user1.     //新增 samba 使用者帳號 user1 成功- \( B4 d" |8 Y/ O+ \  ?) A* l
& i  W7 t8 z/ s- @
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過* E& \% H0 A9 n8 R( @# Y, T0 f7 G2 \
#cat /etc/samba/smbpasswd  或者0 ]7 P7 G% j0 H( s  Y
#cat /var/lib/samba/private/smbpasswd
( ]! u1 a; Q# s8 C! l user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :6 `& Z# b( _, P: u
9 @: {& ?+ U% M5 a5 ^# G) y
步驟4.啟動 samba 服務. n& X" L8 q% N$ i* \7 r  G

0 K8 ]6 R% u% `$ z6 P5 C在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。  L9 A* g7 [  H& \! V
#chkconfig smb on" a3 F8 c# \9 y* D$ ^

6 e. j  \0 J2 N3 b" D使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。; p, ]" r4 y2 ]# j7 P" p7 e% h6 R1 o
#chkconfig --list |grep smb
% ]. R, @( ?! _6 o3 m+ ]. N4 |* }0 W
0 B( L+ b2 D' j/ ^5 E smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off1 I& i9 W5 P- o2 j( x

: }1 r% Z7 m: u) H4 I完成上述設定後便可以啟動 smb 服務
& v9 Y) w8 Q3 o# x' m+ B; u5 n! h#/etc/rc.d/init.d/smb start
; X* d3 K0 x( ~) R
0 C$ X8 ~: {4 o* ?( b) w# x( X Starting SMB services:                        [OK]
$ _& ^& P  h6 a7 R7 S/ ?: N: C# z% i, Y
Starting NMB services:                        [OK]  
4 Y+ Q( }/ _2 ?/ L, Q# Y2 d
5 k2 O, ?; W1 Z2 H檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
9 j& U5 f% q! ]* X. j2 A5 M#netstat -tnl
, D; x8 R7 W% ~& _) }+ A2 |5 W5 O7 k4 _2 r! w3 w% F
Active Internet connections (only servers)& w' N8 f1 K: |! q

! V( {9 L9 f4 ]( C3 c5 w* t  X" U Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
: i1 ?, f' w: c* f) Z; o. D/ j3 T- T" ^+ B
tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
5 w$ H8 K9 m6 h2 q4 O; z( L$ E
3 e6 @  P& d; d) l: Y! e tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN
; d" I, s- y  u9 V' t0 d2 c- `" d- r+ h6 ^- K+ }# u5 a( c4 q
3、Samba Client
) t% {6 r" w6 J2 p+ f, _$ h  Y3 Q6 @以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
" L+ L4 {# k3 W: L) d; N! g* v0 D
Windows Client
- Q; J, b2 d7 L# v
5 y$ H0 N/ R2 F) ?4 i) x上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:+ Z4 Z7 n6 u+ p5 H2 {" t, V
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。$ ?1 B! {* D% C; E# s9 m! L! p
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。! ]% f& i: D/ L! l

. u) q9 ~" ~" w7 {若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):- z, g9 f! u8 S1 i) ]

5 x  v8 y- u( J" N方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
# z" q1 W) M; u2 U( v net use w: \\Samba_Server_IP\home
* r$ D, ]6 x$ ?4 w: ~
; I: T4 y* X5 U  q) R方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
0 I, E) @. {/ _/ i# r2 E3 u; o net use w: \\Samba_Server_IP\home /user:user1 123456' k- r( t) r( t

4 @: o' M: c& j2 y$ JCentOS Client, x9 B+ v# p+ P/ b+ `' F; S8 ]8 _

9 k6 ?, M* ]: A" f' S: p若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。3 A8 k) U, [4 I" o
# T, I; u  i0 r; I% B3 r2 S
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
( s5 X; f0 n9 G' {& @mount.cifs //Samba_Server_IP/home /mnt/home -o9 ?+ I) _' c1 B$ {) p
* [! F, \( [. q. x2 Y& A4 ~
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)6 E; @! `' K" _
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
9 @4 @( e7 \" B/ p  R
) B7 @( n1 \7 D7 P  @若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
% y" D) h& Z4 U2 t/ P8 F4 O& rumount.cifs /mnt/home

& l2 }' r! G, u# a1 {, B& @, iumount /mnt/home
' h) P1 V  Z/ P7 v: O% E7 ]8 I' j9 h: ~- D+ y( p$ d( V1 W
4、CentOS 存取 Windows 分享資源0 B3 l9 r0 f; l$ W. E
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
# E' j) \' J7 o1 Z4 Z
' l4 g* x1 t% r  QWindows 電腦名稱: user1-XP
" v! z. w6 s4 Y2 _分享資料夾名稱: Shares& q$ a. }$ U/ o. M# @( G, h) L
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
/ c, p2 |( R; Z4 X5 |) G可存取 Windows 分享資料夾的使用者密碼: 123456: Q; e. y0 M  ~, v0 K* J! B, D/ L: e4 i5 j
5 Z; s* H' A7 ?" u! E/ y
CentOS 掛載至本地端檔案系統: /mnt/shares" N3 Z8 n) Z5 E9 Q7 G
CentOS 帳號密碼檔: /home/user1/secret.txt, @" C0 n: J/ G& a, N5 E- s( w
安全性權限設定: chmod 600 secret.txt
7 U2 g/ V6 Y7 c
. u/ }- R6 {9 t. p* z了解後我們修改檔案系統設定檔 /etc/fstab。% N) A- e8 H( V. z" B, q8 \
#vi /etc/fstab/ O8 o! |4 S( j: m; C* e0 p

! t" S$ [+ ?4 k LABEL=/1           /        ext3    defaults        1 14 v+ C5 `$ P- v- u7 M& Y/ u5 |9 F

& |4 e1 m% }& v7 z LABEL=/home1      /home     ext3    defaults        1 2
3 Z+ N0 Y& n$ I* Z* Y; x/ n( H4 W. M# A6 J8 ~5 W3 V/ q' a
LABEL=/tmp1       /tmp      ext3    defaults        1 2
. r6 F$ `  E" h7 @# v5 C$ w: E* G  g( k! Q
LABEL=/usr1       /usr      ext3    defaults        1 28 a) K* c+ A8 }# ?  u) Y: A5 h

3 f% O4 g) I8 c  g% ? LABEL=/var1       /var      ext3    defaults        1 2' X' S5 i2 b4 E2 K* C$ E
: t$ ~! U$ z0 V4 L- `: X& a9 ?6 \
tmpfs             /dev/shm  tmpfs   defaults        0 0/ S& i7 Z: A9 h$ Z+ \
# G5 S' e0 x  }. s2 `  g& l
devpts            /dev/pts  devpts  gid=5,mode=620  0 0* a) b7 t# B6 P6 v0 K( o
, K7 Z8 m9 k' B4 p. D
sysfs             /sys      sysfs   defaults        0 0' G) u  V3 |, q' J9 R* Y& g+ h1 u3 X2 n
$ c. \! o1 r3 @5 j$ I- X
proc              /proc     proc    defaults        0 0) P& m4 i" T; R
3 e: n1 U4 G6 ~2 K/ q. w
LABEL=SWAP-sda6   swap      swap    defaults        0 03 ^8 U& N0 j; @  {# q7 c1 \1 d/ t

6 w- ^7 ?9 a, z0 G% u3 o5 }5 c //user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行0 B/ [9 T4 a+ i; @1 L, ^' J
6 `2 k# Q& O5 d2 ]2 H, y2 d% L" c: }
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:' K& @2 d7 d+ M& r
#vi /home/user1/secret.txt( }0 |: V& S/ s6 ?: n8 g$ m9 b

+ V1 p, a" N+ J, Q8 i0 p) e username=user1% V" L2 e1 k6 ]) o( k5 O
; c6 E7 B) P4 u, `  q$ v
password=123456
5 @: Z9 L* L+ d/ v: N1 V8 h- \! P: V7 W$ a+ N/ c
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。3 S0 Y$ N6 S1 f
#mount -a     //讀取 /etc/fstab 更新! m+ C; o" W) i5 Z6 Q3 b- Y

1 M. ]4 C: V& F6 Y1 `#df -h        //檢查是否成功存取 Windows 資源3 k5 z8 Z" J+ E. q( O. }$ v3 J0 l# @

! Y; K! e* Z* d6 x! P8 ` Filesystem            Size  Used Avail Use% Mounted on' b. k' P4 b. |2 j9 j
2 }: R8 |9 B5 G+ r* j( g4 F
/dev/sda1             9.7G  2.3G  6.9G  25% /9 H5 ^* _1 x5 I( H4 v  ?* T' A
$ y) u: m! A: X8 M1 f  H5 H
/dev/sda7             414G  211G  183G  54% /home
$ K( b# S, o/ T' P6 b5 e7 c7 H( {. m* e/ J/ ^
/dev/sda5             4.9G  139M  4.5G   3% /tmp+ }& h# y2 Q2 [; X' L
) V( q$ v6 F) t/ L
/dev/sda3             9.7G  2.3G  6.9G  26% /usr; @" w8 Q% A$ }; T+ R, B8 Q/ p
0 O+ `6 N# _; Z0 J- n6 _* y( E
/dev/sda2             9.7G  255M  9.0G   3% /var* y! R$ f$ y' a# g
4 f: C9 @# v1 b9 j  U
tmpfs                 2.0G     0  2.0G   0% /dev/shm! o+ m5 N* r$ F6 w7 w3 `$ G. u
3 \' \0 `* Y8 }# v
//user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功
9 ^/ N" w) t' n) [8 u2 `
3 q7 w$ y0 ~- m
[Troubleshooting]0 L8 N) x7 Z# b. \0 c
從client連到server端時出現error:  7 p/ z! W8 `$ {3 }2 c1 F8 X
samba mount error(110): Connection timed out
$ o: z6 T% z* v5 o) ~1 I4 n一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
. M& i" o: \% i& Z, E1 X5 J- Y
3 P4 h* h! `- K8 D
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:' U3 o2 [7 Q2 q1 v3 N4 ^4 x

( ^: \6 f2 N; |3 N3 R
用 yum 查一下有什麼 sshfs 相關的套件:
# ?' O5 Z9 k, z$ I# yum search sshfs
7 k+ v% K6 W9 G3 F( p: A( V' U  N- z=====================================================================5 P' [6 I$ o% J. U0 |" h  S5 A
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
# i# S6 q' P+ S; ?- z# }安裝sshfs:$ p: o$ e0 R, g2 {5 V6 h" h$ P
#yum install fuse-sshfs
( B8 h! u3 {% \5 q( I- E7 d' ]建立掛載目錄:
- Y9 S$ K9 G$ Z2 A) q! z#mkdir /mnt/temp
+ B( T: q3 K) l用sshfs 掛載遠端的目錄:8 [2 q: g: i. n5 `4 r1 l8 k3 Y
#sshfs -p 22 root@192.168.1.2:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄0 z. k" U# V' e4 o2 L1 M- G
root@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼
% Q! r% m; V6 A" [9 p" w9 [正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
9 u( _( _1 U' Q9 [' _# \如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便9 i' o$ e8 }+ O6 u6 A; T5 v
% t* S' l, |) P$ h$ h0 X6 o
帶上密碼而不用手動輸入密碼
, s8 g" i" ]& O4 `+ x0 F#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp
* w, D; W+ a% T  p# E* S; q; w9 A註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
. L7 ]3 Q, L$ G/ `# a) \* t& M$ ~sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/  /mnt/temp
  L; P- t6 x5 X, [/ L0 y
$ C; @) n. W" d& ^  m. M9 l' q
以一般帳號(非root)掛載時,出現error :$ ~2 U# E5 r& W9 L! O& M
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限. v: Z3 @: @. N+ S! e: ?
ls -l /bin/fusermount5 i; D* k3 X4 [; |3 [8 e5 r% D1 q
-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount
/ J0 `, B7 |! L& j# _: c7 ?. s故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse) @8 y* H" R& a) w. M: F

4 s0 Y6 m  {6 F$ M/ \$ y可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux). `/ G! U! O$ o. M, \

9 l& U! F% R2 y- s& q7 t
' Q  i5 o4 f1 t. L
作者: 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