52AV手機A片王|52AV.ONE
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
[打印本頁]
作者:
IT_man
時間:
2017-9-3 21:06
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
R* E! o# |$ |
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
/ \6 @4 ~) g. r3 A! g. ]4 [
3 q6 j# n" o( r" r$ X# F- m% l
2、Samba Server
9 f7 Z! [8 G9 r
步驟1.安裝 samba 套件
$ ~( M5 B% n% A. ^# I& O
8 L9 g9 L9 g# }% W4 d
利用 yum 指令來安裝 samba 套件。
5 B7 m6 j8 w; a, }8 u3 C& T9 g! o0 v! i
#yum -y install samba //安裝 samba 套件
) `0 t* t! M" @' a2 I* a
- F6 M- t; q# G% X& r
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
& J4 Z2 o7 Q: C
#yum install samba-client samba-common cifs-utils
( ^6 K j! D) t! p! S7 d; r) r' p
% C5 d! [* Y H( A
步驟2.修改 samba 設定檔 (smb.conf)
1 ~2 _2 a7 o- ^+ w+ Q0 {. ]
* N* q7 Z: J& U# Z; V, B
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
5 w) Y- [& P M H
#vi /etc/samba/smb.conf //修改 samba 設定檔
4 k3 Q; X! T5 o% F: c0 \* g
. J6 |3 C1 r: u3 U9 c: M; J
global //通用設定
% Z* K- s B' s1 j
' f1 a, _: i K
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
2 W1 B8 Z: `$ H8 k
/ h* l# l4 M8 s1 E, r
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
' i, D. Z+ r, o6 ^4 q
1 W; [% L7 a; L/ s. P
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
k+ ^2 @+ x# d; b
5 O0 S6 A% ~3 P
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
' y/ ^ i/ f: d% T( l
; D7 Q( @( \' P% K
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
9 q/ ^9 \. V) t6 P$ ^, N
) g4 A: j/ M( S# O; H
encrypt passwords = yes //是否對密碼部份進行加密
, {( ]+ x2 h7 F2 h; I) X! M
. b3 o4 n* {4 B) b4 }4 i2 \
display charset = utf8 //Samba 上所顯示的編碼
3 G6 T! n1 x& ~7 {
6 V) L. B4 J5 t& S' [
unix charset = utf8 //Linux 上所顯示的編碼
* w- H% n6 w6 K! U9 V: E' Q5 |& q
R5 u8 E' U# M$ r- \' T& t7 h% v$ I
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
: \/ N7 e4 T" F: d, {% H9 t
: t* A( K' d* P0 a
home //分享設定,屆時顯示分享資料夾的名稱
$ B3 c- F# A( l+ u
y4 Q/ ?5 R: J0 W+ l+ J2 w
comment = Weithenn Samba Files Shares //分享資料夾的註解
: t$ Z# Z- c8 U% z6 U* J- \
J) Y, ^7 L6 O* r) @
path = /home //分享路徑
- H2 |" D' f# M7 r. E2 d
7 N+ G4 w. _: Q5 Q
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
. r) g9 R5 W5 M7 J, O% e
5 _; e4 G) L. R" u% t
public = yes //允許使用者登入後可看到此分享資料夾
: e5 v* J" Q% B, s) u
. D. S: l! ]* g5 s; E! a# y
writable = yes //允許寫入
2 i) x Y% W( p
/ U* }; n( A) x) O2 N8 z- g; z+ O
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
$ x$ J+ }1 a a# _5 Y3 k; k9 S
/ d g) S7 q# t% C* S) i. f+ @2 B4 p/ e
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
' k6 W6 a. a+ `$ y
_ g2 U- x; i8 O, I- g! |
% @* n$ u/ `6 ?5 V5 |# v/ @
步驟3.建立 samba 帳號
4 \. M. A1 K2 b
3 }' @' L; C k1 n- r3 M; Z
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
& x' j! Z- M; W3 X8 {6 W: @9 Q; E+ ]7 ~
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
( F9 D& J7 K; {- F$ h O
3 k% l. z+ i' i( z
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
3 `( v' C2 z2 a* _5 h
2 [/ l0 w5 W7 L1 i+ w& r
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
' q6 j" N- j, u' F8 @3 C9 ~) u7 b
* a3 q2 N; X, k- k
Added user user1. //新增 samba 使用者帳號 user1 成功
$ z+ g L* x0 d2 Q! T- ~$ s+ O
- ]5 S5 X! t% K1 t( F
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
6 ]$ W0 \6 Y; t6 ] i# f
#cat /etc/samba/smbpasswd 或者
" E) L4 Y6 L5 O6 b& Q
#cat /var/lib/samba/private/smbpasswd
: ]( _2 r6 l k% \. |9 T
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
& Q+ w( x$ v7 F& M
9 v2 Y; i8 ?* V# G5 M
步驟4.啟動 samba 服務
+ J" \1 A% h1 R6 N/ Y( i5 g
$ n( o4 R' ?$ E# C i( M
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
5 X) z" u \8 h
#chkconfig smb on
$ P5 L: \* w# x5 w0 b; u. V3 f
; z, l, ^- N$ _; l! j" r0 G
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
- q' X! b0 e& h% j5 j: n3 ^% a
#chkconfig --list |grep smb
1 h/ N: }- b3 s4 _: ~
9 m9 ~( g* P' @5 w# b6 B: e, F
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
3 M; Z) ]8 d: f* P; @( O6 T
& n: C$ i' Z+ \9 F: G% D
完成上述設定後便可以啟動 smb 服務
: X3 X% A$ r( C% g/ J- w9 z. B# B
#/etc/rc.d/init.d/smb start
6 m% v* S/ j$ E4 J7 b5 X( y
. J, Z1 l+ z2 u! E
Starting SMB services: [OK]
- `1 n9 N; |3 L' p7 u
' x) O1 n" J, w4 _3 x
Starting NMB services: [OK]
8 N% ^' B' Y. c" _" }
' i2 m& C3 `/ C' c
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
$ v; W( h- s1 c4 Q+ ?1 J# F
#netstat -tnl
6 H: C" z0 _/ h( Y6 P( f
4 [& s* ?$ Q0 c, h
Active Internet connections (only servers)
- C8 \: a% H2 ~* g" l- R" M6 @, t8 K
8 r2 o6 S9 a8 N" R' e, n" T) Y0 O
Proto Recv-Q Send-Q Local Address Foreign Address State
6 s+ l) z( F4 G
" K5 ~7 {5 i" ]9 _7 @; a
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
?. j: t% w) U4 S
; g5 `# L' s8 {
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
/ O1 B, l# O T- ^6 c2 u
% c$ N8 @" I# d( Y4 c" }4 o
3、Samba Client
( y" t/ P: ?5 y, @7 e
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
6 M0 r- }& h1 O6 I8 h3 Q. F
* D/ B/ E6 |0 K1 _8 ]3 v
Windows Client
( a9 J% _4 X1 O( v! y8 a2 ^
. p& t- v: u+ w$ ?1 `
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
2 T8 P7 P& f3 s* ?; Q
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
8 E" a6 @! w- j. J1 r' D
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
" R- V0 Y, L9 @
# W* i3 _5 H6 O3 S
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
" ~+ z0 u9 L/ h
$ R0 o, x+ ?" J+ R
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
+ Q" ]1 L9 @1 }9 b5 O- p
net use w: \\Samba_Server_IP\home
6 i" O8 A5 Y/ v1 M$ ^
2 Q6 k e2 |+ P5 ?! Y# a# T
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
# `2 s, U1 m% A
net use w: \\Samba_Server_IP\home /user:user1 123456
& c. X9 f7 @, z3 M+ y/ f, d
$ z) K4 C, X3 a
CentOS Client
9 ~, g6 x9 a& p0 }; c
6 l: {7 d* Q+ ?; ?- L% e
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
D- K' B/ u% M+ }. j' O+ F6 D
- T3 d+ C* g' N8 x) v% S
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
% P, p/ c* H. u+ S' S7 u
mount.cifs //Samba_Server_IP/home /mnt/home -o
+ Y4 S& W/ j4 [# b
6 D1 U e9 C$ [/ w
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
- E* I0 r( ?4 v+ ?7 M
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
# W3 S. {/ x8 F, W0 |
! I' P+ I/ T0 x: i* X$ U# N% t4 z
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
; I, _8 Q+ d+ O% F9 X5 f. S
umount.cifs /mnt/home
或
" u7 D/ v! V1 f# o; c
umount
/mnt/home
m6 n, b9 `: B! ?, O- F( r
0 [, _# h$ u- Q( h
4、CentOS 存取 Windows 分享資源
, l+ Y' N) c( c' p
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
3 Z, z! l5 H+ E& u' {# h$ j+ n
- E, g: B4 a/ L
Windows 電腦名稱: user1-XP
! i# z0 G. B( ~1 C7 [+ C7 P8 b3 h
分享資料夾名稱: Shares
! h' K" T' D R' Z7 ?# O
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
+ o; d- L# T7 ~
可存取 Windows 分享資料夾的使用者密碼: 123456
5 V9 `) {4 z' y; m
, B: X" ^9 S/ V' b
CentOS 掛載至本地端檔案系統: /mnt/shares
" }+ j$ B& J" C" I! n7 {* S$ a! S1 A/ U
CentOS 帳號密碼檔: /home/user1/secret.txt
' d. B0 g3 d/ d
安全性權限設定: chmod 600 secret.txt
9 ?+ B* x& G j
( j T7 E; D3 A! d
了解後我們修改檔案系統設定檔 /etc/fstab。
- e" Q1 N( i5 G) y7 U2 i8 E# X
#vi /etc/fstab
) |; Y' I# r" r9 f
9 b, i2 W2 s+ U, u4 Z
LABEL=/1 / ext3 defaults 1 1
# k C" g" K! K. x' N1 H& K
# u* H/ F: e) Y* \& B3 A3 ~
LABEL=/home1 /home ext3 defaults 1 2
! ?* Q, W2 J7 L
" m' a4 g8 m: `$ M8 Q
LABEL=/tmp1 /tmp ext3 defaults 1 2
4 n. _) f& D- m- p& J- g/ L$ L
/ a1 ?9 ~# o( U/ I
LABEL=/usr1 /usr ext3 defaults 1 2
' w) j' U+ j# D* V |0 p
- Z; |2 o& i+ `/ x) J
LABEL=/var1 /var ext3 defaults 1 2
( q( q1 ~. \+ e" s8 F5 p
1 _- J% r5 W5 A* e( a! @% u f
tmpfs /dev/shm tmpfs defaults 0 0
4 c0 t0 C2 K/ x/ o4 D
6 m3 {4 f% I# r8 ]; ?. r
devpts /dev/pts devpts gid=5,mode=620 0 0
. g% N d) G$ M: Y8 J
% u; B( K, R; [! V$ m' U
sysfs /sys sysfs defaults 0 0
' b- z% O+ Q; _
$ h1 j) H) z" v+ p+ ` b9 J9 `1 P
proc /proc proc defaults 0 0
: h m5 x, u% a2 W) z9 c3 {7 w' |
+ [% g! I1 @4 `& h d
LABEL=SWAP-sda6 swap swap defaults 0 0
. I V. A, C* P( m( y) p/ X' k/ U
& N \' j3 [1 t1 g6 G
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
9 V1 m+ k3 d4 l. N
- V4 r# S/ z4 y# Q
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
8 k: Q6 K5 }/ W
#vi /home/user1/secret.txt
: \2 w5 d& z5 _* [% C
/ h/ A3 u8 t+ H/ s( Z" `' n! i
username=user1
a- x# b( f: u0 p8 P5 l: N; E
! j5 q0 | d: [. @7 [
password=123456
# `) q l2 L$ Q. z
$ \& c. k8 @' h9 @: N
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
5 n; ]# S- x' c, P& |( j/ ?! t
#mount -a //讀取 /etc/fstab 更新
9 P1 s6 G0 ^2 x, \* J
0 V0 y2 P' z ]+ _/ g
#df -h //檢查是否成功存取 Windows 資源
4 S2 U* f, Q; z8 j$ o
% d2 M$ j+ x3 V
Filesystem Size Used Avail Use% Mounted on
' V- P$ S4 a0 t/ v' _$ e _
, L' N- b ` D6 c) u/ U% R
/dev/sda1 9.7G 2.3G 6.9G 25% /
* v8 o4 W/ G- L; G0 Z" Q
# L% V* ^. Y' }) A- `6 U _3 K- e' r/ R
/dev/sda7 414G 211G 183G 54% /home
! j7 q6 D& I1 f/ b' l8 J- y
8 r/ t6 O1 v9 b1 C+ S
/dev/sda5 4.9G 139M 4.5G 3% /tmp
& @3 a7 d2 {( j; s9 L) H( J& p8 Q
1 D; ~' h3 E8 I: K
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
! {% H7 y |4 j0 y% N) A6 h2 }$ i& {+ T
7 @& K# T. i, ~# z* r9 C6 ]$ @
/dev/sda2 9.7G 255M 9.0G 3% /var
Q/ P) N) Y& N# v X e
4 r& K8 D( c' r- b
tmpfs 2.0G 0 2.0G 0% /dev/shm
" B& i1 i* y& N. D
3 E' m* I6 R) n% j3 T7 e8 \ G1 O
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
2 N3 {5 S2 V' m$ ^7 y
+ R: ^7 M/ N; q# {
[Troubleshooting]
8 j7 }1 y. G) |& P- P" N
從client連到server端時出現error:
; W( A( T: j/ X6 E3 {+ }+ d2 T
samba mount error(110): Connection timed out
" S, e) P8 M& ?3 a& B8 |
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
5 N- f9 U" _' C" G c
+ Z+ Y2 i; e& C3 n2 o
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
$ D- T2 B% c- U
0 ~! a [4 D. {) Y, _8 R1 N
用 yum 查一下有什麼 sshfs 相關的套件:
7 W6 U- b( o i' \. d. d5 A! w
# yum search sshfs
/ w& X: T U9 E( l1 J
=====================================================================
! K2 n3 E& ?) r
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
# V5 {% D7 X7 F* l9 A% D$ o/ |
安裝sshfs:
" d" A/ B7 j# y! m) l
#yum install fuse-sshfs
! u9 E4 r9 e+ }6 O" C
建立掛載目錄:
4 u9 }# S( t4 W0 y1 g
#mkdir /mnt/temp
! T2 Y' x2 @' F* n+ q
用sshfs 掛載遠端的目錄:
4 ?# Y5 x9 m- I- P- v' q) ]
#sshfs -p 22
[email protected]
:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
( n0 p9 a+ U# K5 m: u. ]6 M. o
[email protected]
's password: //接著要你輸入遠端ssh root密碼
. y4 X% _; ?/ r3 e
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
5 E' ]% I2 M- _8 Q3 s- I# ?
如果之前你有設定與主機 192.168.1.2
建立公鑰私鑰免密碼連線
,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
' j* x8 h8 k- y. ^0 V4 d, y
7 T" C: u7 [. D- z8 n! g
帶上密碼而不用手動輸入密碼
( b; m2 E8 x8 l7 J1 z6 D* }; \
#
sshfs -o ssh_command='sshpass -p my_password ssh'
-
o cache=yes,allow_other
-p 10022
[email protected]
:/root/ /mnt/temp
& s+ B% D0 y/ L' @2 P2 R/ m
註:
如果掛載有問題,可以開啟 debug mode 觀察過程:
( ^7 T2 Q! A: k: K( Z& m0 x
sshfs -p 10022 -o sshfs_debug -o debug
[email protected]
:/ /mnt/temp
) R, E" {3 L# @, b0 z1 A
B5 R/ ^7 f8 Z) l2 ]
以一般帳號(非root)掛載時,出現error :
- `! l" T/ u8 r1 }, `
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
$ P5 A. x" r0 _: T, F2 s# B- G3 v
ls -l /bin/fusermount
3 I# x7 ?, x. a; j
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
6 `/ C! Q3 L: g$ g
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
0 A( c/ y/ G# D7 |
/ S9 A# U s4 `5 j2 a" R
可參考 :
在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統
SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
2 Z' r. R7 b; T- S
. G, `$ ~5 R9 F3 @ @5 G, |5 q" _
# \% ^1 p5 M/ O
作者:
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://nhkie.com/)
Powered by Discuz! X3.2