52AV手機A片王|52AV.ONE
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
[打印本頁]
作者:
IT_man
時間:
2017-9-3 21:06
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
, O4 u$ R' @6 q9 e/ E
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
$ F6 q$ t! G* i. S6 C' t
& w3 ]5 B! L- P0 w0 m6 w* n' i$ |
2、Samba Server
2 j7 [' z$ R1 v3 Y, m; o& J; w, \
步驟1.安裝 samba 套件
/ \8 m3 [/ [6 ]7 e- K# X
) v2 m4 L2 q7 c# K% x+ S. s4 X7 n
利用 yum 指令來安裝 samba 套件。
0 A/ Q; W2 y* ]: b5 U- b- G; R5 R6 h$ s
#yum -y install samba //安裝 samba 套件
2 `( M {# J/ R0 C3 `" e" z
9 Q" k: S- A1 U3 y9 e, _( z# x
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
* G0 ~/ r- {( ]& u3 q
#yum install samba-client samba-common cifs-utils
" c% O9 U$ u% e' z, G* r
4 g% z; n* P! r8 [# g4 \* q/ R! I
步驟2.修改 samba 設定檔 (smb.conf)
! H; Y- T; b( R6 v
; z( _- m. N' r. c( X8 Y
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
4 z0 R# {# g/ M" _! {
#vi /etc/samba/smb.conf //修改 samba 設定檔
: Q6 v3 z' g) q* ]5 j
9 C! W" W! T/ t U) {" v
global //通用設定
- u7 T& w) x8 Q! A( X
- r, ], u% q. W, Y% Z; D# @
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
S' v) u) W; Z r( \4 s$ j) }
( F* C$ _4 S0 H/ N, o/ y. A
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
* R, x$ F$ l; W
: s! ^, J ?+ P: `2 u
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
/ x8 g- @* k- ^7 ~
7 Z5 {6 D& I& J' t8 c
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
& m# \9 D2 ]% Q3 b
3 m. |; N7 _ W7 _
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
; ~/ I6 k1 m( T) [
' I1 ?2 r( q# ^9 c
encrypt passwords = yes //是否對密碼部份進行加密
3 b2 w* t3 w1 r t8 _0 Q2 R
: L' G1 `2 X7 L" [# _
display charset = utf8 //Samba 上所顯示的編碼
' D% L- V) ]5 u! |
# w' T6 v0 Q0 i* v
unix charset = utf8 //Linux 上所顯示的編碼
1 K% Q; C' ~3 j3 t" Y( [
& z* A' K- l+ b7 X/ [6 I( \+ r b
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
% L: g$ W: R( _
/ r; ~/ t4 M7 b1 Y- w
home //分享設定,屆時顯示分享資料夾的名稱
9 Y+ d p3 x% c. ^/ c
, R* G4 U2 y. P4 Y8 F2 I
comment = Weithenn Samba Files Shares //分享資料夾的註解
5 p% d3 E( ~! P4 B1 ~8 ^
3 e( p( b. a0 b4 p
path = /home //分享路徑
2 k2 Z- @/ k& n2 L4 {5 y6 Z L
* j* x: m c- f- ~, Z
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
' b% V3 z6 w0 \! ]6 ?, Q
; J9 j/ [6 I" I: N7 M' `$ g
public = yes //允許使用者登入後可看到此分享資料夾
: T: T; J' x. k, t2 n# `% B" ]8 `( _6 b
7 A6 L$ A, P, g! q6 ?
writable = yes //允許寫入
2 @4 K( ^8 \' [4 b0 ~( F1 S. C
, l# s/ A3 v- R+ y. n3 |1 }
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
- _7 X0 l% y/ G. i/ \
* A* F0 Z6 l* l$ x F! Y" s8 x
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
. ]! b4 j# H3 G6 q6 \" H
4 c/ s/ m. D" Y$ O
: w0 T$ d* c2 ]8 `- R* U
步驟3.建立 samba 帳號
, e, N/ ^/ b9 o
7 N5 I1 O+ K: ]
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
, ~! o1 B' F' @+ h- H4 D
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
9 C% ^) Z6 R* t; ^; b) N- z
, X' }) l# j9 S$ Z" m/ Y
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
j+ n+ q9 [8 B' n9 Y1 ?
' c% }2 ` J3 u/ G( _! R
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
3 I2 R J0 E/ C
5 m: p9 V, m" @" T( g: Z8 @* ~, J
Added user user1. //新增 samba 使用者帳號 user1 成功
5 g7 d: G7 ?6 R
9 {* e4 E# T H8 |% V
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
v& m7 M1 @. b" k+ Y4 ?# _; Y
#cat /etc/samba/smbpasswd 或者
D# ?/ \' Q8 d2 \$ L) @' u) `. d+ Z
#cat /var/lib/samba/private/smbpasswd
& L1 e5 \" f& m
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
& m( ^5 R- i4 z4 j, b
. n- X4 L: E% V1 i! S
步驟4.啟動 samba 服務
; o6 t$ x0 U- T5 _2 K
; j5 s1 a" J% {
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
1 d$ d8 _5 P$ {4 T
#chkconfig smb on
6 j; g2 `# c) D/ U9 H& M6 v
+ D* t- d* M$ J8 P: I
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
7 p) P3 ^: u4 j5 H, u
#chkconfig --list |grep smb
) h5 t5 [( O, L) y B
( {5 M7 z+ v, J8 V* O+ o# f3 W9 C5 i
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
3 o6 j8 f1 X0 H( P
( S% }7 |* C" n. y. s! i9 |
完成上述設定後便可以啟動 smb 服務
8 g, A' Y+ U! X
#/etc/rc.d/init.d/smb start
3 u: c8 z# [8 i9 d
# i R, c; J Z& s) \
Starting SMB services: [OK]
, \2 x/ j+ M' N2 O2 B' y& R
% K5 T+ a' W3 s
Starting NMB services: [OK]
' W. P( U) I5 U! ]' f/ _' `
2 V& U1 M3 {* C( W/ s( } R
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
3 @; P4 H$ w" X1 r7 d/ X/ v
#netstat -tnl
7 k; R8 x4 B, R6 N$ T0 d) x* @
& `* y3 `4 N& t+ [9 ^; x+ }
Active Internet connections (only servers)
* H# p9 O1 v: A5 N! x+ j
2 G) S# B' l9 L6 G; r
Proto Recv-Q Send-Q Local Address Foreign Address State
) q: U5 P( a" r7 u6 j
0 w8 Z- J9 t$ G; c1 i
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
9 m/ Z0 H6 h1 l8 m8 _6 U% @
& h& c. k; X3 v/ }
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
- n C! f" l" \3 `2 O9 r
* O8 a( d/ M! z% _
3、Samba Client
* U5 t! s' @7 @8 L2 ^
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
0 u/ R2 \- ]& u b# ^0 Z) _% e
" n) p6 ?* ~# G/ z% n' G2 b
Windows Client
- B9 \& G) Z+ n- Q
1 F' n# x1 W* ^. d
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
# D+ t+ f) \, Q! r
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
/ W0 O( C6 a' y, d/ D- G, C6 G
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
" C0 K' e8 v" \4 I8 i
- F2 ~% e* `5 [0 e, p+ u0 c0 L
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
* z# p0 C$ V8 C! A* u4 h4 f$ L# q
) ]+ I' z2 U9 s4 g( l; G3 S
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
$ Q! g( e3 q% {6 \) s6 N
net use w: \\Samba_Server_IP\home
! D7 g& b1 x/ X5 X9 F+ I' W/ r
& g$ w( m1 G2 i6 o9 c
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
0 |# V* _4 j+ [/ s
net use w: \\Samba_Server_IP\home /user:user1 123456
" l+ e5 G5 p: K1 Q6 t ]
' A( k9 h" K8 y' B' U; a3 e. m
CentOS Client
; F1 s; |% ~6 M, c
9 F5 r G8 p' N, ]# l
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
8 m9 e0 z5 c7 L4 E9 f& ?
/ b) I. B* j/ j
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
3 M' G8 K3 J8 z6 l
mount.cifs //Samba_Server_IP/home /mnt/home -o
- x8 j/ ?( N0 {$ l* }. \
o8 \, J( p' J1 ~
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
* G5 G0 @+ E% k+ n3 e
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
' z( q, J1 Z6 j8 R8 R \$ i
3 ]2 Z. p' m+ v) k& ], S! C- i
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
0 r0 i7 O1 ]: [) G- W1 O9 t$ M0 I
umount.cifs /mnt/home
或
6 h M, y- M$ w
umount
/mnt/home
( n/ m* T+ m7 m+ t9 Y
) }/ Q" g, S8 [
4、CentOS 存取 Windows 分享資源
% w3 B5 ?& V p% d6 ^; w, _* m/ B
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
u# `/ E) M1 o' V' T
/ i( P( u. }. f' x% V9 m
Windows 電腦名稱: user1-XP
% R) B* m. z. V* v) i/ P
分享資料夾名稱: Shares
* W8 |+ ]0 Y) F. ]6 y& C+ H' o1 Y5 B
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
7 F* J2 o8 g$ [1 Z9 i' [- p/ Q" T
可存取 Windows 分享資料夾的使用者密碼: 123456
+ e0 g/ w6 z6 z0 P6 r
3 D W6 j- L+ O. z6 x
CentOS 掛載至本地端檔案系統: /mnt/shares
] M# `8 q; M" H$ r
CentOS 帳號密碼檔: /home/user1/secret.txt
, a1 \0 [/ o! s# }8 j. s7 X) E2 L0 Z
安全性權限設定: chmod 600 secret.txt
* H# f; L+ c& f$ W9 b& p6 D# c
; M; \ l$ }/ j1 ]4 \: j B
了解後我們修改檔案系統設定檔 /etc/fstab。
$ x/ p6 K$ N: f
#vi /etc/fstab
1 ~+ L% N! S1 e! q/ r
, @ D* \/ z( P2 c+ \
LABEL=/1 / ext3 defaults 1 1
$ J9 Y/ q1 j5 X) L
0 G/ M$ i) [0 ]; `+ r
LABEL=/home1 /home ext3 defaults 1 2
, P `& |9 l; b2 B1 V
8 j' U1 {# y( D& m8 C
LABEL=/tmp1 /tmp ext3 defaults 1 2
( Q' O0 U5 f" M# y6 g
: q$ M- _2 y: X/ R+ h0 {4 h
LABEL=/usr1 /usr ext3 defaults 1 2
. i, ^2 U- _8 `: ~
7 q! p; P. `: K. F9 c: Z S- t; Y
LABEL=/var1 /var ext3 defaults 1 2
# C `5 c& I9 f0 s: g8 Y7 y/ j
5 n7 d4 _5 V6 p; ~) i& c& q
tmpfs /dev/shm tmpfs defaults 0 0
# w& ?2 T( p- _8 H o8 D. b
) \* J/ |0 ~0 k) B& [% R ~4 L% d/ a" W G
devpts /dev/pts devpts gid=5,mode=620 0 0
- ]- O5 I$ j! F5 w7 Y
6 n2 U' Y. O1 ?! W$ \7 Y
sysfs /sys sysfs defaults 0 0
, e- L* d- S% U/ R
U; ]2 p2 I) v. j/ `
proc /proc proc defaults 0 0
* n0 c; v6 f# X: h; s- |+ [, B
7 f6 y* ~$ c: D1 H3 i
LABEL=SWAP-sda6 swap swap defaults 0 0
* \) F% W+ b$ x% ]- ~; x3 y
e- c7 l' T& H; D$ A4 O4 T3 q; V
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
( S) Z8 D( O- x4 U# C5 G
2 o4 w& a8 B) ^% @- H
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
+ f9 j; R% A# V5 ~1 z
#vi /home/user1/secret.txt
7 E) n _8 E. d7 O3 k+ N3 u
6 _) I2 H" H5 ^' [2 B9 I' \
username=user1
7 o |1 T+ z, z; `9 p
8 A# u4 y2 }; V4 k2 s$ f
password=123456
% l* Q; j' X9 ?3 j% J; d4 f
' l5 d; B3 p8 ^, L, L, T
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
, Z% `& v4 [* h5 ?
#mount -a //讀取 /etc/fstab 更新
- x; E) |$ B; V# q' @" m# W
% c3 {% W$ v) M K5 G
#df -h //檢查是否成功存取 Windows 資源
6 t+ p" L+ S5 @, }7 E* _
& K* g4 ~3 i/ |1 @" e
Filesystem Size Used Avail Use% Mounted on
% i: m: Z2 W' Z# l; l" P) x3 t
9 D H+ Z' s) I& T' j
/dev/sda1 9.7G 2.3G 6.9G 25% /
# L2 o: _$ {. Z2 D/ a
" g) Z' f9 L1 T h: J: v
/dev/sda7 414G 211G 183G 54% /home
7 {. q% y4 Y' F9 ]
$ K- \( X ^' T/ X. T( E* B
/dev/sda5 4.9G 139M 4.5G 3% /tmp
) c9 ?0 O: m a9 B3 B% h
y; W9 i5 v+ m6 ], \
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
2 s1 C9 b: W1 G" \
S0 S% U3 j2 ` w/ d
/dev/sda2 9.7G 255M 9.0G 3% /var
/ b4 e# s/ E; ]7 k- w, o
& K: z- p6 C# o% X' A
tmpfs 2.0G 0 2.0G 0% /dev/shm
& n/ W4 J6 X* P* z
0 c% ~4 C2 o1 d1 { z% T
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
9 b3 \; b: |. K. y" n: J
1 F2 p( L& ~% [0 L1 k) V
[Troubleshooting]
) ?/ m. O5 l' H$ T/ \2 f! b
從client連到server端時出現error:
: q) N# n7 s+ @+ ^; o9 D. R
samba mount error(110): Connection timed out
# b( ]% M& Z; N# n
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
% c9 ?: y, m5 Q* D+ z
* I4 J9 H1 ~2 t! L% F
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
$ T; x& u9 ]2 s' x% g3 h4 X
1 Q, t7 _6 J1 {! T
用 yum 查一下有什麼 sshfs 相關的套件:
0 o% V4 Q7 z w( h2 `, p
# yum search sshfs
2 H7 e9 R5 x* p% l
=====================================================================
* f4 e- r, {1 u0 e$ o! p
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
' ^' }# W% y/ T! a
安裝sshfs:
# J* C$ s i. L! I( e1 {+ v
#yum install fuse-sshfs
1 v. h1 N. ]8 Z) V8 z6 n0 q
建立掛載目錄:
; B. P% B: Y( X; _
#mkdir /mnt/temp
# V8 i# @; o3 X6 w! R; |7 k5 `
用sshfs 掛載遠端的目錄:
$ ^# q; G; T- S$ R- w; p
#sshfs -p 22
root@192.168.1.2
:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
2 Z) d% }' _ g m/ Q6 s- R0 D4 _$ M
root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼
5 k+ V5 L& |3 P' H( U0 O. r( y: D3 F
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
& z) C/ J1 E( l+ Q
如果之前你有設定與主機 192.168.1.2
建立公鑰私鑰免密碼連線
,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
9 t* s4 ^- a {2 K. F( c# j
9 {6 k9 d d, i8 e& [" s- e% L$ H2 f: Y
帶上密碼而不用手動輸入密碼
) [7 V, K* P9 r- G9 G% C
#
sshfs -o ssh_command='sshpass -p my_password ssh'
-
o cache=yes,allow_other
-p 10022
root@192.168.52.4
:/root/ /mnt/temp
0 j1 R( o. W) s) U6 C
註:
如果掛載有問題,可以開啟 debug mode 觀察過程:
! |: \8 E3 T# p B: d4 m% i$ Y
sshfs -p 10022 -o sshfs_debug -o debug
root@192.168.1.2
:/ /mnt/temp
' R+ y) `. M& h/ R! N* G S/ _
" t6 a: K7 K2 M+ ?" L; y
以一般帳號(非root)掛載時,出現error :
: [% ^; Z7 D. A' ]' s+ V
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
2 u) W! T0 C% j; Q
ls -l /bin/fusermount
" a9 Z {5 N2 j' X
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
6 l2 ?) [3 A9 O$ d
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
* E8 M0 _" w& y2 Q7 m7 [% S8 T- }
. h+ a1 ]; G$ v* E
可參考 :
在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統
SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
! q$ u. ~- |7 ~& a* R4 Y9 I
3 A) ]% z8 l4 ~% B5 u% h) {( H
$ y% W8 g& u/ e) g Z
作者:
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