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

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

作者: IT_man    時間: 2017-9-3 21:06
標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
, m' [! p8 z* ]分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
6 v. U1 \4 M+ U8 b2 f
4 H& {! d# R  E& f8 ?: e: b8 S' M2、Samba Server; |3 b. D- R9 q: d# ?' H! E
步驟1.安裝 samba 套件7 G+ _: S4 t. S" T+ [. p# h0 ?9 M
$ G; R6 _" f" M
利用 yum 指令來安裝 samba 套件。
+ ]8 K9 P( B* a- y8 F" S#yum -y install samba    //安裝 samba 套件: d* `' G5 @- w$ Z. M* T
' e- S1 G8 J0 S: D7 \2 c: O5 J  [( v& w
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: . Z7 |) C" o) t0 j! z2 P  T
#yum install samba-client samba-common cifs-utils
" }9 F+ l2 f4 H+ b0 G' L3 \
  G0 w9 C! L* Z. ]% D步驟2.修改 samba 設定檔 (smb.conf)
2 c% O" s4 m9 V2 T! Y- ]" ^  l6 C; F' i0 d" T
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
0 d# T$ i3 R4 }. L; r$ _' y' l8 }#vi /etc/samba/smb.conf  //修改 samba 設定檔6 _7 {1 b7 T( F- I" h

8 f. q# g& Q0 q/ i8 A0 _1 Q global                                 //通用設定
& ]- j# h. A& s- U7 W! r! F. |2 N, P$ }  y5 R4 V2 m$ N3 w, D! H& U0 S
netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱7 `: p7 e  Z4 q1 y

3 H1 Z5 G( e/ I% Q+ w: e; g workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱
4 ~/ l$ J0 u; ?( P: c8 i0 ?! O
0 }* b6 T4 w3 r hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源
3 r8 ]! U8 F% e' W' e: ^5 d2 E& N$ R* q2 n
hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源4 F$ c+ c! s4 h- q/ D9 |5 \2 c
! p( g" l+ B) n4 h) l
security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入
6 @9 l7 U4 X9 J. X7 Y) P; G5 q  C
  V% Z2 F+ D- T. ~ encrypt passwords = yes                //是否對密碼部份進行加密
, T% o9 s- W# o3 e  h8 ^" Q
! _" y( b0 H' y  O display charset = utf8                 //Samba 上所顯示的編碼
* Y/ p6 X6 X/ ?( z5 P% c+ B( H$ ~# ^4 o7 Y: t% S  \
unix charset = utf8                    //Linux 上所顯示的編碼4 a/ m0 o8 R  P" ]3 Z4 L+ i& {
$ B( K+ u" x% p  X4 [5 d1 ~
dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)4 z% O( i$ v( s; m* e0 I
* d; J4 x8 z4 e
home                                   //分享設定,屆時顯示分享資料夾的名稱' P8 |; Z8 B7 i1 X  n

% X, F  f' W- m comment = Weithenn Samba Files Shares  //分享資料夾的註解: o: k/ y' h8 G1 ^6 W4 v  c) n, e9 U5 N

9 n0 q6 ~4 f% s5 l" x path = /home                           //分享路徑
1 R1 N/ P. R1 R. @) h+ ~8 n* N3 R) m+ l0 ?9 m- |" `! M0 k3 F
valid users = user1,@smbuser        //允許user1使用者及smbuse群組可存取資源
' j8 r! n! t. z" S* J! \: r; Y
$ M9 z4 _3 {9 r public = yes                           //允許使用者登入後可看到此分享資料夾
3 m# Q6 e+ X" p3 o$ A
' X6 F1 G% E' V+ ~- g- P/ H writable = yes                         //允許寫入, _; Y3 f. F8 p$ `' [1 {, K1 Y0 V; o
0 l4 h+ H5 w- i# \5 l
create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)) F3 l9 d7 c3 X" e& v
2 P+ T( y1 T9 t0 S+ \- t3 E9 E
directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
4 s. B, m7 ^  x4 C: ~
; b* k+ j0 X* t* W/ U/ n! c, h0 k$ i  N2 `9 c5 G" Z& n1 `0 P( ^
步驟3.建立 samba 帳號8 R5 y! c: r5 p/ @
8 H! ^& w* X9 t6 K2 v# Y% Z* D
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
$ `9 }) S3 e5 ?% t6 W#smbpasswd -a user1  //建立 samba 使用者帳號 user1
  g/ v& M8 S- Y; z+ a) ~
3 N. w" h8 S  { New SMB password:        //輸入使用者帳號 user1 的 samba 密碼3 E! j  {' Z: s' W! K

9 O: M$ W+ V2 s Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼/ g3 d, {$ z% y7 o0 k
* M5 R( t; |+ e0 H
Added user user1.     //新增 samba 使用者帳號 user1 成功
6 q6 Z0 V' `! w- d7 E) J, v# ^9 i. N. l; e. W
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
2 _4 |9 }/ F# M/ E0 M#cat /etc/samba/smbpasswd  或者
! F! U4 J5 Z3 [( C! ?/ B& E6 I* j7 E#cat /var/lib/samba/private/smbpasswd
  v$ i1 W1 A5 y1 v! D user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :8 I& j3 e" }( t

1 v7 n$ {! e- J% i  v0 v! x9 \- u步驟4.啟動 samba 服務
7 j& I3 z5 k' a9 w8 R+ A$ I! }6 g' `* S+ k4 B, q& u( p7 ~( k
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
8 q4 h0 ?4 E6 h2 Z! y8 e' m5 R0 F5 i#chkconfig smb on8 L  c3 t& H) L& U' |. Q6 O& e% @

" ^2 w2 D. j8 c% N* o9 A使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
8 o0 ^6 f0 t  H0 C  a4 e7 W#chkconfig --list |grep smb5 o) }. ~0 x/ j

3 v9 }" f* ~: P smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off
+ a0 n; z" [1 H' ?% j8 R
2 a0 T  }( h! U4 f完成上述設定後便可以啟動 smb 服務4 M5 D" ?  J9 x& e
#/etc/rc.d/init.d/smb start  q% w1 d* a. s* Q9 R5 W: ]3 e

) j  f1 r+ i% p& H$ o" R Starting SMB services:                        [OK] . {" D  @" N8 }( u0 x$ D/ p: A
* g2 F4 e& y3 K7 x3 n, O3 ^
Starting NMB services:                        [OK]  / j% p& B7 f( L$ i' n
" _- B8 A0 z6 i* W0 H. z9 ~
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
" H) C6 H' X0 j1 K! ]#netstat -tnl
! K" h# h: n' G$ t( X6 g% \6 F3 A! d
0 }( R- p9 c* v' e8 m$ {4 U Active Internet connections (only servers)
- m* y7 K/ K; @8 b( F5 d6 n8 ?+ q/ C% m8 K
Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
: q/ S9 n' M( n8 x+ C# h2 g( M0 {+ B
tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
' m) S7 F/ [+ {  h
( b5 V7 |: N$ e tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN9 w/ e+ a6 ~; [$ L# y2 j7 w
) ^: W! j3 a( |: H& ]
3、Samba Client" s) ]9 u% t+ w1 Z8 T, K( o5 o2 |  [
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。9 ?3 m! C! ~- D( o- ~
- R  L- Q5 W+ I# G) t+ J1 M
Windows Client
$ N' s( @  l+ U& d# M7 [8 [3 U- z; t* u# M1 }& g+ H( ~
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:  f# L2 f) S8 a. g5 J) @  a# j! P3 k3 `
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。* m' B4 g6 g2 E3 T
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。. N6 Q& L9 q1 P0 ]7 U

2 L; p2 `" r# I3 L若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):' X: e( N3 G8 Y

7 [; ~3 y7 X) S4 ^: r方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
' A# V0 [' i- i% F# q: B  F net use w: \\Samba_Server_IP\home  A" f* h( W% d. N7 @  q* X1 q/ I
( r- ~& N; N% E0 c: Z
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)3 t' `1 V% N/ M
net use w: \\Samba_Server_IP\home /user:user1 123456
, n( r0 B: D! }* _5 M; A! Y7 f" j! {- W  I+ B: |: |( g
CentOS Client! @! Q# @1 U- [7 N: t' t' c
! J* c5 p6 d# l( W0 n7 p, v
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
& Q* F, b% T) p9 |/ B4 g
* D+ O2 ~- `( q. }4 a4 ^方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
7 e+ Y8 u, ^6 T  H6 o+ Mmount.cifs //Samba_Server_IP/home /mnt/home -o
7 h  t5 j2 |" }7 ^4 e" E8 K. r
# \: t2 c! T$ H方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料), N! X0 [1 _+ W8 u# J/ t" G
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=1234562 h5 j, E0 M; X2 j+ ~: ?

& g5 W" j$ R8 p' Y: x2 x! B" ~4 d' \. V若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
: Q3 ?) O0 ]% ]umount.cifs /mnt/home

1 V7 _( M# M$ J, X: d& Sumount /mnt/home
2 C" X. U8 g* X, i& b( j6 ^0 \8 x  {7 r: h
4、CentOS 存取 Windows 分享資源
, z  f+ d; {- b1 k  K/ qSamba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
$ d% |; ?9 T6 _4 W. F  H/ g6 e% b9 D2 Z4 }. j; o* O5 v+ n
Windows 電腦名稱: user1-XP& b2 d' d  R+ d7 ^5 b$ Q
分享資料夾名稱: Shares+ E3 w2 g$ D3 P  M
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
7 e0 g. B1 O% k7 M可存取 Windows 分享資料夾的使用者密碼: 123456  a) a' }. U& v- R3 Y+ |

, f. A, |7 B0 oCentOS 掛載至本地端檔案系統: /mnt/shares2 N, f9 ]* h/ q' V
CentOS 帳號密碼檔: /home/user1/secret.txt' N$ c# v* |3 D, |
安全性權限設定: chmod 600 secret.txt
+ [3 Y! w5 D; f& U, c
, A1 B1 _( W' ~, v! f了解後我們修改檔案系統設定檔 /etc/fstab。
9 Z& Y; @/ X) U- ]& z: l2 {: y2 p#vi /etc/fstab6 |2 q) S. ?  _) }0 t8 ?% [" X+ Z
+ r5 C+ v* }, Z/ H* k% @% r0 x! r
LABEL=/1           /        ext3    defaults        1 1
& v' H. x: u" a
8 {, Z+ C" U! Y+ a6 E LABEL=/home1      /home     ext3    defaults        1 2
/ n* s1 O" S( B' j5 t. Y
1 y0 E- u+ @- `# K1 F/ T LABEL=/tmp1       /tmp      ext3    defaults        1 2- j( F5 l+ F, o. x" m

( O4 Y7 w* o& t  p LABEL=/usr1       /usr      ext3    defaults        1 2
2 @/ ^! t" h' y) f7 u3 H2 }
1 d! e* O! h' o- T2 u0 N0 E3 H LABEL=/var1       /var      ext3    defaults        1 24 U9 ~  @* p/ a2 f1 U6 C8 T$ J( t
. B8 _8 J1 Z8 m3 x7 m: H( f4 t) |
tmpfs             /dev/shm  tmpfs   defaults        0 0! B* y+ Y6 W0 E0 J/ Q9 D/ r
3 T$ @5 G" f* k, B/ b
devpts            /dev/pts  devpts  gid=5,mode=620  0 0% q$ Z% k5 J8 [+ H
9 {% V9 p3 z5 Z5 }5 u9 g0 T, F
sysfs             /sys      sysfs   defaults        0 0! c! O% t- r' m: q! q$ }1 n

+ s4 n2 V& U5 B' E! }1 T proc              /proc     proc    defaults        0 0; L4 F% c/ ~; Z* E* K' `

9 T2 Y! i8 Y8 H; c9 v9 l LABEL=SWAP-sda6   swap      swap    defaults        0 0
9 {9 X: `8 }* |# d8 V* `" `8 j
, N2 ]) |8 s% q6 b  s8 q //user1-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
$ |, E; O/ X, \+ }9 ]6 E# e
: ?  e3 Y3 {# I' Y4 s建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:+ u" }2 S% ], _; D7 d
#vi /home/user1/secret.txt( U3 B4 P1 z2 R0 x
! w6 d: ?9 P- O" _* K3 {
username=user1
) j6 M7 h& ?7 ~$ V- _2 n  I9 t) m& H: [) j0 p; _
password=123456
& O" t; O7 ^6 `" Q( ?( d' w/ r+ H& Y, J7 y
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
! n) u/ q' d" T, a& }2 ~9 o#mount -a     //讀取 /etc/fstab 更新5 {4 B0 T. ^1 x% @

" h( S4 a. a9 U- `" Z+ G#df -h        //檢查是否成功存取 Windows 資源
5 J" u. q  u$ ^4 H3 p8 a8 s5 a/ ^% w8 V2 F% D5 n& q4 V
Filesystem            Size  Used Avail Use% Mounted on; C2 l, j$ x: Z! [1 c
$ B3 O& U( ]7 K, X* {( N. ]
/dev/sda1             9.7G  2.3G  6.9G  25% /
" h4 W5 [6 g4 g' _" r( n  K) ~. O/ A& Z; ]" {# H; j* \
/dev/sda7             414G  211G  183G  54% /home! Q; e2 M+ L4 I+ P, o& j4 o/ ~

4 b9 B8 v) i; X2 x+ b /dev/sda5             4.9G  139M  4.5G   3% /tmp; B3 c# G) J) ~! i
' ]% Y5 S% Y5 B/ m, [% \; X
/dev/sda3             9.7G  2.3G  6.9G  26% /usr
& `5 V  e0 K( T8 N1 N' g
8 W2 y9 E. o( T  q/ }6 s& k! J5 Y /dev/sda2             9.7G  255M  9.0G   3% /var
- z1 `: V* W0 U& c9 t5 P
( S) b) E! S6 Z0 H7 v& H' E tmpfs                 2.0G     0  2.0G   0% /dev/shm$ b: W; p5 E: q. l

! u3 p4 [6 F0 O //user1-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功

- ^# ^( @* Q8 P

2 P& ]; [1 t6 J0 ~! |[Troubleshooting]# U& a- I- H# |2 ]0 {4 N0 |) g) x
從client連到server端時出現error:  
1 }: E- q% A* b# Wsamba mount error(110): Connection timed out
2 W! q5 M! r1 R  V+ F一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445" a$ d8 g' B! a& f5 w
- V5 m' Y! a; j$ ^" [
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:0 i9 [! v; P( J" C2 ?* H  U* k
/ r* R* D2 e$ L, d/ ?% r1 q
用 yum 查一下有什麼 sshfs 相關的套件:$ I! C: K7 H, }/ J3 Q3 k$ w" d' s
# yum search sshfs- Q6 Y3 h% ^/ ~1 q" N
=====================================================================
( t$ L: Y2 l+ H+ N7 L0 Tfuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
: m% f% M5 C6 F2 f# G2 @' f- ]; ^安裝sshfs:  O8 P4 _* f3 V# e7 n3 ^$ z
#yum install fuse-sshfs
0 ~$ C( }' K8 C. i) U/ l7 R! y+ x建立掛載目錄:
0 j6 D/ E9 ]4 x#mkdir /mnt/temp
0 |+ U; \. A4 w  @3 E用sshfs 掛載遠端的目錄:
; u. L. ]* H) W3 o% j#sshfs -p 22 root@192.168.1.2:/root/  /mnt/temp     //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
$ P* l1 d- d& N: A9 Mroot@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼5 |8 s4 c  p" g0 ~% U  z
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的) x0 e% ?; b0 a" C2 m' P
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便8 V6 v# g  A! u( y, m

( U# N, S9 r/ a9 n6 \, H. O) T- T帶上密碼而不用手動輸入密碼9 R) j  ?1 B- S! u1 n
#
sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp: Z, i+ n& C& V; T
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
: Z! {, f# G( t3 @1 msshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/  /mnt/temp
( t, V- H' O% u% t0 J/ H
: s% \9 p6 o, V$ X% x
以一般帳號(非root)掛載時,出現error :
& h4 i  @# X9 E+ V" \- }) Hfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
" T* j$ h9 {2 f8 b# cls -l /bin/fusermount8 L0 o; G/ F) }# L9 x$ a
-rwsr-x--- 1 root fuse 32368 May 11  2016 /bin/fusermount. {  I# p  p( h' e! R
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
8 M0 Q; G: V- }  ^  B  I% D
& Q/ X. c/ r( {- z# r  D
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統     SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)' c6 c. Q5 m5 Z: C& m9 P* ]2 L& ]2 M
7 n  o% M9 J+ @+ t8 s$ L' A

' x9 o8 q) \' ~2 T, \
作者: 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