52AV手機A片王|52AV.ONE
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
[打印本頁]
作者:
IT_man
時間:
2017-9-3 21:06
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
! s) a" S: E% O% H- @
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
) J5 N$ T- a9 i. b
8 n$ B# Z0 f, s/ S1 @) n r& I1 D# A) \
2、Samba Server
- G* e! x/ \6 R6 i
步驟1.安裝 samba 套件
* F$ }1 L1 k- f
( a. w; p1 v" y3 M! w X- n
利用 yum 指令來安裝 samba 套件。
/ Y6 R/ k4 Z" \! t. [" z5 h5 `2 V
#yum -y install samba //安裝 samba 套件
- j: \# g) k0 W3 s; I
3 w3 j" u8 v) ?3 L! k% _
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
1 a1 |9 f D' P
#yum install samba-client samba-common cifs-utils
. v; u- e2 a1 P7 c+ k0 m
( {0 x5 G; I; {# q; [% O @" l8 Q
步驟2.修改 samba 設定檔 (smb.conf)
! G( V3 l% F" d) P. [! r# G
8 J# C$ c7 g! E: N6 i
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
# S1 C, K7 c+ Z" [' y& f$ c
#vi /etc/samba/smb.conf //修改 samba 設定檔
8 L! r: @6 z. B, y$ c
, D2 h- y7 q4 R1 f3 {' ]0 J0 a
global //通用設定
! J: ~/ t$ C! x$ {$ i, g8 z& p
' G' U% |) c% ^9 U
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
# L& F u% [7 ?0 Z) Z
! X7 J- x5 C- S2 j
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
3 Q% H: R$ m" Y( @
! l5 {* j+ ^6 ]3 S# Q
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
' t# l' H: \1 z" j* f
3 `( S, q; Q# l0 l: R' {$ X1 X
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
% g- N. ?( f+ J- }
7 ~" d& m1 y! i# c$ Q+ \0 O
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
: N- B9 h' U' {% x
5 C; A/ H. T+ g! X
encrypt passwords = yes //是否對密碼部份進行加密
# Z+ P8 n; V. T9 ~! A1 U2 G' I, s+ o% U/ \
- w# [# ^" `, d5 A8 c
display charset = utf8 //Samba 上所顯示的編碼
; t1 x( [6 a' Q/ B6 {' |
8 g) j- v5 |3 ?$ K/ F8 Z9 T
unix charset = utf8 //Linux 上所顯示的編碼
8 O. M( l. G% O
# T! h" i( M" _ K3 g
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
2 W4 t- ~' \. g5 @1 k6 v1 }$ k
* F; G9 c$ p, m- ^
home //分享設定,屆時顯示分享資料夾的名稱
* h5 \/ d2 M2 V. \
0 a! g$ N' a4 o. y) G
comment = Weithenn Samba Files Shares //分享資料夾的註解
[" F9 X7 G& m8 \& W8 p) G, p
/ _4 {1 w0 J; W1 E' M8 u
path = /home //分享路徑
: T4 ?7 ]! Q% X' M7 a
5 V) u% i7 d5 j- e0 r0 ?: x
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
7 _, @, k, O# M# j0 T
; A/ s- E" H! K; n0 e
public = yes //允許使用者登入後可看到此分享資料夾
. [4 l# L' _9 \
& B9 a5 `6 ^; i1 z+ U8 X' O
writable = yes //允許寫入
1 n8 i2 ?$ w- E. m6 h: m4 t9 U
+ Z" F' K i* v) l2 U- J- W
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
. t+ ?, k+ k4 u
: k! }" A* {( o0 x
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
# L5 w& y# W# ?8 } \ n3 u
' q1 U i6 W( b
% a$ y4 W t0 }, k
步驟3.建立 samba 帳號
" x( |5 H; t2 d8 R
3 \! J9 _' i) Q" {/ P* M7 s
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
: V8 r, Z* H8 L5 a
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
6 t5 [. L. t" }2 H! u1 I. q
# {8 K7 I i3 B& |& \9 G1 G
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
6 d' a- l. h0 Z; j
0 d' r, m- c }0 O* H5 [
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
U; `4 i: M! C8 z2 ]
: T9 ]; f! P( T+ U4 @$ z( g H5 t
Added user user1. //新增 samba 使用者帳號 user1 成功
* N4 i7 X+ t/ L7 N J; S
# g! y& q( e6 a9 B5 K
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
B9 J( ^+ ?6 \0 X
#cat /etc/samba/smbpasswd 或者
" g3 R. {" K1 r" O7 q
#cat /var/lib/samba/private/smbpasswd
3 H/ w8 W+ x# K# u9 F1 O7 g
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
8 L# p/ Z$ C" K, M6 U" Q
8 c& a2 r2 p+ X9 L& b+ v* v/ Y( S
步驟4.啟動 samba 服務
# l) I! d( J% C: K; s: Z
' q. \5 o. |- l# W
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
6 I f6 v" y7 @7 s- [
#chkconfig smb on
. R2 W! A( ^( D0 n0 F1 p
; H1 S# B5 m$ s1 `+ M% [- `
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
6 }7 \& j! c: }: E, X6 q
#chkconfig --list |grep smb
2 K, ]0 l& y- y3 C
% d9 W# J A# r, c' h- A4 r
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
$ G& T6 N/ [/ {; e6 N9 S
) H2 m! ?, H3 m4 D1 w
完成上述設定後便可以啟動 smb 服務
1 \5 n) x, K3 F5 j( p
#/etc/rc.d/init.d/smb start
. A3 K% C, t7 @& ~3 ^) P1 x# D& {& U/ ^
: T+ S, @+ ]% ~5 s
Starting SMB services: [OK]
1 ~' E$ B8 V4 _# a
# O) p8 w6 z2 k2 B1 z) f8 o
Starting NMB services: [OK]
! l8 Q" _7 Y8 t3 ?7 O) H4 I
# N) v* Q' ], z6 d. \$ y
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
1 h! A& a) v) Y! z3 P Q _" A; A
#netstat -tnl
. {: x. Q L1 r0 W
8 S- p6 Z8 | Z! c
Active Internet connections (only servers)
6 t) ]+ G( }, a1 a5 P: x! p
: E1 H# ?( c* S- r! _& m
Proto Recv-Q Send-Q Local Address Foreign Address State
- [2 ~# Q; j" z! X
) Y( b/ L. m7 P# c* t8 V5 y
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
( T" Q" f" N: ~5 {# a2 M W
+ D4 U" H4 l! N" Q! {+ S
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
1 k' c! O( S9 [ U5 t9 ^' F1 c
, G$ M( {* y2 [) v4 F+ v
3、Samba Client
7 Z0 D8 H) N3 C+ f, {$ h
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
1 M5 a8 ]6 x1 u2 \+ ?, F
: [, ?% w5 W+ J; B8 U, N/ s
Windows Client
0 @/ X9 y, U: P% `, g3 N$ L
) G( B# r L, E9 ?& m7 Z( B S
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
3 v- l$ G [3 {7 M! ?
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
2 H4 W4 g2 y- } L
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
' z+ B4 A, @! X& g9 T6 z
5 ?: F( b% @9 F2 ]! o
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
# m( \# G# D* K5 N& i
8 J* ]) [) _1 @5 @' ^: V& [
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
( j6 |; p. Q1 n7 x$ g% P
net use w: \\Samba_Server_IP\home
$ s b; @8 V! X9 D" {
! U* r* h9 g" Q6 S' J, }- q
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
! |2 |9 l1 j& |8 M* B
net use w: \\Samba_Server_IP\home /user:user1 123456
. C& R3 z% W+ g: o( J
( O) E0 ]+ s4 }/ m
CentOS Client
5 {0 d/ B1 ~* V9 E
* ]/ n# G5 L& f* p- c
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
7 r4 O# p" h% N/ }0 s
3 Z8 }5 ~1 G' v0 H! _
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
# ?- O) s9 T4 U( n3 z/ ~5 b3 l+ ^4 S
mount.cifs //Samba_Server_IP/home /mnt/home -o
2 w1 z* C g. f2 y
- C/ T0 a- `# D* a5 z% g a
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
6 Q" o. ? s) Y) X; t
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
6 s# a; m2 ~" e2 V
5 j* x9 y' u+ k6 [; a
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
! T* E+ }" T" ~& }. o5 ]" a8 U
umount.cifs /mnt/home
或
& w0 }- ^: D+ g" e
umount
/mnt/home
) v+ H3 n7 A+ j% A% b" L& d( k
' c( Q8 ^. @. d) v% _
4、CentOS 存取 Windows 分享資源
, O* K/ k5 g: |
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
& E! b6 _' E$ _* D- p- P: {4 Y
F# v( p+ K5 u' M5 r# j4 Z5 W( P
Windows 電腦名稱: user1-XP
; F3 T7 A8 |/ K8 u/ W& L
分享資料夾名稱: Shares
8 o: U' {. `2 D% l) u/ g* `+ q
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
% i& Z$ i) R% U2 U% p: w5 K
可存取 Windows 分享資料夾的使用者密碼: 123456
5 f) f) T4 Z6 I/ J* @+ O
6 A8 E+ A8 r( E. `7 r; i2 q+ x/ K0 _
CentOS 掛載至本地端檔案系統: /mnt/shares
( M) k E/ b! o, P
CentOS 帳號密碼檔: /home/user1/secret.txt
; Z; X4 M4 g* M; o2 z4 p) m
安全性權限設定: chmod 600 secret.txt
+ h4 u/ y) x. c; n w
; b6 U! [. `: B' c
了解後我們修改檔案系統設定檔 /etc/fstab。
/ Q. | y6 @0 e5 e- ?! l
#vi /etc/fstab
/ _% D- [+ `& T0 F0 Q$ z% z P
1 z& i/ u" b4 S+ P2 D0 f
LABEL=/1 / ext3 defaults 1 1
- l& d3 d6 u0 {( V# C9 J
' H+ y. C2 L+ p: I/ V9 C
LABEL=/home1 /home ext3 defaults 1 2
6 S6 Z7 m% g; n2 g& ]( p' \ R
- [7 p" {2 R6 h7 p. s
LABEL=/tmp1 /tmp ext3 defaults 1 2
) m. _# w/ Q6 g3 N0 i" N2 R
1 X9 n! |- N9 k3 X0 s& r
LABEL=/usr1 /usr ext3 defaults 1 2
3 ?9 c! V# ]# A6 g
( }5 \& S- V6 R! q0 s) k8 h# ~
LABEL=/var1 /var ext3 defaults 1 2
. M7 i3 x9 j5 u5 z) Z0 d
0 M% t6 k% X* u
tmpfs /dev/shm tmpfs defaults 0 0
. r2 V9 F+ ^; [$ O( X
! w! F9 f# c- O! j: h0 I% ^
devpts /dev/pts devpts gid=5,mode=620 0 0
4 \1 }% u2 Q7 f4 c7 E7 o& r
2 k8 _7 M0 Z, e
sysfs /sys sysfs defaults 0 0
' g1 ]/ T2 @3 l- ]
$ w$ y: e6 S6 n9 T
proc /proc proc defaults 0 0
& Y. [/ j8 Z4 ^8 Q( O+ D' s2 J% G& s! s
, z% _# d! k/ m; ~; Q
LABEL=SWAP-sda6 swap swap defaults 0 0
+ a* s# H8 E* y; M: E
( }* v4 p3 S: B) D! v) j' o9 Y! k
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
1 p. I9 S, o3 A$ M* Z- X
2 ^: h2 j" _! C# ~! |
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
3 ^. p' s" L. `& V* Q, F7 d: f% c
#vi /home/user1/secret.txt
4 w% E" C) K9 }" v
* |, z9 r: m) @' T9 A
username=user1
1 a0 m6 X ~) l0 a# o7 k: A
, L8 x/ v6 c4 O- A
password=123456
1 C1 `$ F' c4 d- W" W& V
4 P- d& c3 @! j0 S) l
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
. c" t9 Y4 p- I* s! H
#mount -a //讀取 /etc/fstab 更新
) s) O; y& w) r/ z
" @" w& ~- {3 ]* m: K9 X
#df -h //檢查是否成功存取 Windows 資源
T E8 x, \. o5 [
9 B* l5 P) _" k2 w. C8 G
Filesystem Size Used Avail Use% Mounted on
# y; d8 T* I' V4 j* A4 ?
; _/ x. ^7 H5 u: p. ^
/dev/sda1 9.7G 2.3G 6.9G 25% /
# }( @0 C8 q* F
0 Z# D! O. k3 g, X+ G! z+ M
/dev/sda7 414G 211G 183G 54% /home
1 \# ?+ J" S- j: `! a# D; @+ g- C
- B, a% c4 F# R6 n d: M
/dev/sda5 4.9G 139M 4.5G 3% /tmp
; w* R1 [1 P% K
% D+ U* ^' D/ [* p
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
5 L& ?' ^6 F) A* _# G, l, C
: q. G) m2 ?/ s- I; ]
/dev/sda2 9.7G 255M 9.0G 3% /var
% O7 }! q, L! L( w1 v+ A# T
9 M1 _# ]& A" l$ e2 V, j- P
tmpfs 2.0G 0 2.0G 0% /dev/shm
m" X0 Z+ w4 N( d7 E% K$ `& c
# M5 E+ ]* j. z% c G( r( w& x
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
/ I! f" w& U; s+ p
8 P( u0 S5 B' }! t, K2 \" v. x7 Y
[Troubleshooting]
- l! A' s' k4 Y
從client連到server端時出現error:
. ]0 y# S& }6 {# {0 N4 n
samba mount error(110): Connection timed out
' w7 }9 q1 J. Z/ U/ M# k* m$ t
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
5 G3 I# Q' U" ~
+ L' C- w% P: m, F
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
' p" T- K/ }7 |0 l% d. y' I
& m6 O' O) J6 W1 s
用 yum 查一下有什麼 sshfs 相關的套件:
4 Q! O4 ~7 x, x6 y( J0 e
# yum search sshfs
# m$ I, E" C2 o M. M
=====================================================================
/ q0 p- T& M; V2 n9 Y
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
) R: |8 w9 z7 X2 M& Y: k
安裝sshfs:
4 k9 E& I9 v5 P" I
#yum install fuse-sshfs
0 ~& Y/ o+ B- C3 u1 o
建立掛載目錄:
9 ]4 |' M5 P2 U
#mkdir /mnt/temp
7 T: }! s. b. B$ q
用sshfs 掛載遠端的目錄:
3 {0 b$ {" d' L4 F5 y
#sshfs -p 22
root@192.168.1.2
:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
1 ?! ^- l5 C* E5 s2 w7 r. p8 b
root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼
$ a+ M, s3 a: G5 v# B8 H# S
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
5 e% Q0 L" c/ j+ H+ M6 W
如果之前你有設定與主機 192.168.1.2
建立公鑰私鑰免密碼連線
,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
6 V; [3 U5 p' U) J7 s% v" q7 I
% } u1 Q4 Z# S2 Z3 @% Y
帶上密碼而不用手動輸入密碼
0 A# m7 P* |) 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
. ~' K) F2 r( q0 Y5 ?
註:
如果掛載有問題,可以開啟 debug mode 觀察過程:
6 K" y6 {/ ?; O6 L$ e" w8 {/ ?
sshfs -p 10022 -o sshfs_debug -o debug
root@192.168.1.2
:/ /mnt/temp
, o7 g D* @+ m/ t
% X- _/ S/ }( y+ J$ v3 _
以一般帳號(非root)掛載時,出現error :
d Q5 x9 D$ k- t2 q
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
# u4 _% }' y+ k
ls -l /bin/fusermount
3 l6 M$ i& u7 s% F- b& [! Y! Z
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
" O7 D8 L/ f/ K
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
: z. j# S% l! c6 \8 F W
- X6 P+ X# o9 [: p5 V: \4 j0 [1 z
可參考 :
在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統
SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
- ?6 Q b% A% z4 ~( c
) D3 d' A5 r8 _
0 l! p) r6 _5 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