52AV手機A片王|52AV.ONE
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
[打印本頁]
作者:
IT_man
時間:
2017-9-3 21:06
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
+ @& @0 d2 O' ^+ }
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
; l/ @( g6 y3 W4 y2 S+ I, Q/ j
- P7 Q, t9 r1 w% U
2、Samba Server
2 U$ r% {2 T2 ?5 R, u) I
步驟1.安裝 samba 套件
$ Z; J1 X9 ]* Y8 V
m: g2 J p1 Y) l6 d" j0 n
利用 yum 指令來安裝 samba 套件。
% h4 U6 O2 s3 \2 R4 R0 V) ^" ~
#yum -y install samba //安裝 samba 套件
& ]7 @9 ?% h n4 Q$ l/ ]7 T
* O! B; b/ O: L/ m% r. Q
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
0 M/ o- G' A6 E! B' ?& C6 r
#yum install samba-client samba-common cifs-utils
& k5 \) T3 A2 A! ?1 w
. e3 R4 Z) u6 E3 x/ ~. c, y) u
步驟2.修改 samba 設定檔 (smb.conf)
, ^+ |: o8 V3 P* q0 y" f( W
4 |; o( V6 p6 v7 D- v
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
/ o/ [6 C/ M4 L8 B
#vi /etc/samba/smb.conf //修改 samba 設定檔
) m, `: ]) {0 c; ^! O; w
0 a6 D7 ^, S6 g3 Z$ ` L
global //通用設定
; c& c+ ~1 G# j9 K
- V9 ?! @, z! M+ D; j z
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
/ Y& @6 F2 A8 H' t$ ~
' U, h1 J% I$ M8 N+ ?
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
0 {. W, b% `9 g% D
* x& r; z1 Y( |( j/ y1 C
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
- M$ s G& w, T- V% w$ _$ h
7 V6 h3 W. z. I- R6 s# V% w
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
5 G( z P- P7 h$ l* w. q& j
$ f5 v' j; I+ J0 ~
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
" w# i& x5 d2 J& T+ Q" C1 z: ^* b! B( F. w) B
) d" Q x6 u/ K/ a6 `. \
encrypt passwords = yes //是否對密碼部份進行加密
! f6 |4 x( Q# u) n- R) Y7 ?
) ^! c8 A( q" I; W5 L+ Q7 N
display charset = utf8 //Samba 上所顯示的編碼
* c7 ~, r5 \0 o% m7 A. E
8 P, a( C& g: k$ |8 j+ j
unix charset = utf8 //Linux 上所顯示的編碼
6 z( O; l& c3 R
5 e- w" V+ t8 R% F, j8 M
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
8 t4 v- J. T8 ?/ F7 @4 z% ?+ R
# A- d! v( O. I) d' `$ s, S
home //分享設定,屆時顯示分享資料夾的名稱
" B3 J- d* M$ M) g4 r' k8 D7 _
5 ~; Z8 \, S4 r: f: C* w; X
comment = Weithenn Samba Files Shares //分享資料夾的註解
, K' f2 d) }% c
/ F$ |7 y1 Q5 D _
path = /home //分享路徑
; F a+ ~( A! c* f
" W( J( V+ |- [( {/ N
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
- n5 H8 T, n0 e4 }! H
3 ^0 x* s, Z" `5 g+ I. q
public = yes //允許使用者登入後可看到此分享資料夾
& s. s% R+ h4 o. P. o8 a
8 u" _$ w! m) S6 u; a$ D: Z0 x
writable = yes //允許寫入
- _( P' D. H+ C1 U {& r
# Q/ Q6 i/ [. j" |5 j. b
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
& O1 }# c6 K; i& i9 e m, h
; ~# B1 z# H# ?) J& ?
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
/ G h5 R+ H( e: ^9 y* T1 q
- s7 u# Z) l$ d7 t. \8 n# t
, G5 o4 p. v/ P0 z" n8 m) y
步驟3.建立 samba 帳號
+ C1 C& l$ y& W) H
! D6 U3 j2 Z/ L' x
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
F7 }$ [+ l% P8 u+ C
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
! t# g. t. e4 f o& i6 `2 [
% E1 o" u$ }! L8 K) F) v1 s
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
3 {( I* [! G9 P9 r, ]
" p4 z, M" d, n9 Z! C1 Z2 }$ Q
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
2 e z- n* S- o# D5 H0 Y
2 P, E6 ]" w- N( U, X0 ]+ Z) U, Q
Added user user1. //新增 samba 使用者帳號 user1 成功
2 X, m2 u6 d! H8 J- v% d9 P
2 m) ]/ w2 D* x
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
v/ K+ k. f0 Z
#cat /etc/samba/smbpasswd 或者
. {8 G% k2 o7 p7 Y! x2 U
#cat /var/lib/samba/private/smbpasswd
+ Q- C4 i* |, B A0 Q+ t
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
. X# y- }/ x$ H5 C- Y
2 o9 U( E! L# a _0 v& C1 x" b$ M5 D8 f* }
步驟4.啟動 samba 服務
8 v7 F0 M/ j8 S
% i& K( m# t, b/ [& A
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
5 j" e$ i" O: O
#chkconfig smb on
/ z7 M% @- u5 L {: s
! i* C0 X6 \6 I0 J
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
, r0 h3 r1 k8 R8 i
#chkconfig --list |grep smb
+ }$ S, y( j4 n. M# { j1 N: |
; c$ O: r( E6 q* q
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
' x/ F) {/ Q4 U3 n! \
% w- g- m; w) R7 N& d+ v! A
完成上述設定後便可以啟動 smb 服務
/ | b- n; F$ Y' D
#/etc/rc.d/init.d/smb start
$ q+ J4 F* \/ }, p# z6 b. x
7 v# a6 j! H; s7 [3 O2 Q- ?( T7 o7 ?# t
Starting SMB services: [OK]
/ z1 B9 p/ p( ]. n
( r' N0 @$ Z# L7 m1 \( h6 ?
Starting NMB services: [OK]
1 F$ }& @/ Q! n% e2 n) a
/ n9 k; R; T+ e9 e* q
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
$ m4 M, P7 a) ~* ~6 V( |% k
#netstat -tnl
6 |6 l' r( D; w& ~0 ]7 |( t/ |4 _
) Z8 E) @4 Y1 `0 E: R8 q1 G, a2 r
Active Internet connections (only servers)
/ R6 y& Z. V6 V2 M* ]
, P) s+ N$ r- N5 z |
Proto Recv-Q Send-Q Local Address Foreign Address State
0 ?: o9 \0 \, b- Y) l, P9 J/ Q
7 W Q/ o1 B' r) {! H
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
8 j: k2 d5 M& c2 i9 B
0 X8 c) \% q1 n
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
5 ?) f, n4 A- ?! P! e' L: r
5 m- h+ ^4 u. G7 }/ c# S( w
3、Samba Client
$ ^6 \/ w4 i: F" V2 p8 j
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
" I0 k4 Y. U3 M5 c* A% |
. \" F3 p9 R" h0 `' B1 A
Windows Client
! ]/ _ t) p7 Q$ \1 b2 G0 }
) c+ H( d5 [" a; v/ F+ D, V2 w
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
& T8 U9 z2 i( B) E4 H, r, Q, p
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
0 q- e; r) t9 i- l' N8 P* Y
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
]# F( [; E, H# o) `# [8 P9 |
$ J4 C4 e9 Y7 r m3 k6 ]0 E h
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
* [" R7 |1 Z' v+ c6 M+ ?7 U7 M: e
, k5 r+ o2 s2 C* L0 h$ A d
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
( F0 E; k$ X: U8 h2 P6 d: b9 s
net use w: \\Samba_Server_IP\home
6 H Y7 S; Z+ Y- `
]; P( H: q# J8 [5 l( P: Q
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
s: Z) ]& Y7 k% S" |5 z1 B6 M# b
net use w: \\Samba_Server_IP\home /user:user1 123456
! r5 b3 j2 Z( [5 B
' U9 n" z! K( u3 H% L
CentOS Client
% `. G6 e$ f0 i$ V& }0 G3 E
^* F; p$ R, L& B n4 _
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
, e5 A( y# y; S+ z8 u
+ P. C' D$ `/ M9 @1 c$ t- t
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
# S3 @- a @# K% e
mount.cifs //Samba_Server_IP/home /mnt/home -o
5 J8 G. \1 n% {/ l
; v, L+ p7 D- F9 ^3 M, H
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
3 x9 [' c6 _" S: X) S* o9 ~
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
& O9 k" F0 B, d
( E' U1 T7 A# T3 k1 }5 q' X+ s' \
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
& S& s. r& c2 i2 A- s
umount.cifs /mnt/home
或
- }, u4 |) V* z
umount
/mnt/home
, S) L! i: \& q- m/ S
$ N: V1 i. ^+ e1 ^6 }
4、CentOS 存取 Windows 分享資源
# W# G, C7 m( h4 W* }* r/ @
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
" e& o$ u7 e0 e! ?4 l0 N% Z& y; k
* C# r0 c7 k* c7 a2 e
Windows 電腦名稱: user1-XP
3 T: M8 `8 V/ `3 K
分享資料夾名稱: Shares
$ }- L: [4 R+ A [* ^( p# b
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
# J4 v" k, ]4 G9 j! E$ z
可存取 Windows 分享資料夾的使用者密碼: 123456
6 Z7 w x: ^6 r1 `8 w
* h# Q( F" U E$ R: [. Y
CentOS 掛載至本地端檔案系統: /mnt/shares
2 m3 {/ X6 q% p( [# x" S* i
CentOS 帳號密碼檔: /home/user1/secret.txt
5 w3 D/ S8 W7 ` C; c: @; I2 b
安全性權限設定: chmod 600 secret.txt
D0 ~7 X; d Z+ g' G. ?8 X
6 F0 ?5 j, A9 ]& j0 V2 l
了解後我們修改檔案系統設定檔 /etc/fstab。
1 g M5 H0 k3 {1 b+ f
#vi /etc/fstab
' K6 w$ G) W4 }3 _; u
" {; p* B0 L* o: d7 d
LABEL=/1 / ext3 defaults 1 1
% ?- X6 v$ ?4 n8 [6 o' R
: _* S& g7 {4 P) |, w
LABEL=/home1 /home ext3 defaults 1 2
2 ~) B/ u3 [0 ^) L- J
% j1 C" j5 v) R* ?
LABEL=/tmp1 /tmp ext3 defaults 1 2
: \# ~: O2 C* m4 m# `
- y- Q# `2 z; L; g! g, ~
LABEL=/usr1 /usr ext3 defaults 1 2
4 c9 e. p2 j! }' W5 g1 r; ~
T0 A* K' |* ]! f
LABEL=/var1 /var ext3 defaults 1 2
1 X; ^ I8 z. G# y4 d7 A" j
2 k, n+ q0 v. u: l
tmpfs /dev/shm tmpfs defaults 0 0
% J) G* f6 U( t& v
* Q: |: q" ?( S, l2 R" h m# G) g
devpts /dev/pts devpts gid=5,mode=620 0 0
( U, {; A3 d5 P6 I" y& U
! M) {) V" c4 S+ c! V# v1 W
sysfs /sys sysfs defaults 0 0
, u6 d* T" l0 G" p$ d9 V
5 }# w8 `# Y' X' c9 ?
proc /proc proc defaults 0 0
! l# d0 N! i' L
+ T+ h. g1 o4 v' X# p. D' H+ _
LABEL=SWAP-sda6 swap swap defaults 0 0
' y" h" V& ]1 u4 k- r) L1 `
* k: r4 r1 X+ r; U) A4 B
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
' N2 x5 c% c! S- z# e" S! g
" \% a0 L6 g; s% D1 F+ K/ M
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
N2 ]( t9 z; W2 p# E
#vi /home/user1/secret.txt
9 k, T/ i' X0 q! [" g
/ i. O( h2 |7 t y
username=user1
# K) \ O$ m: h2 z
; |; k) P! v: @: h" k; k% d* o4 w
password=123456
8 U- l; v3 F2 b( h& H6 | P2 x
G2 K, C5 [/ m5 x! A5 i9 P
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
6 @$ f2 R8 ~) ^
#mount -a //讀取 /etc/fstab 更新
) [: m) O/ N" n8 c$ q
' Y7 `8 q1 U! u+ h5 f7 d% z4 R8 i% E
#df -h //檢查是否成功存取 Windows 資源
) E& Q5 Y3 m1 S) d- M8 f
& }- k! k% g1 G4 P4 q4 b
Filesystem Size Used Avail Use% Mounted on
4 l) H' ^) R" c6 p& ? \: _1 @
- o' V' J0 @2 x: l' |
/dev/sda1 9.7G 2.3G 6.9G 25% /
, k; W" v3 P4 A# r
) n- z) o+ w: i2 Y1 s
/dev/sda7 414G 211G 183G 54% /home
0 A6 r4 \* o) K- ?# a
0 L! P9 a0 K/ E
/dev/sda5 4.9G 139M 4.5G 3% /tmp
# B/ i6 U1 K8 H0 I4 W8 } d
# U1 p) M6 V3 W( @
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
: B) W; f: C- D8 |* K4 ^" |
( r( ~( S6 `( m, Y8 ?0 W5 B& C
/dev/sda2 9.7G 255M 9.0G 3% /var
5 M/ ^( U; E+ W* U1 @
# [, I3 l2 J; Q9 w" z( v
tmpfs 2.0G 0 2.0G 0% /dev/shm
3 H: T" ?# A/ S+ V# o
# { N: h' E% `5 Y7 h) p
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
! z& }1 X" z- Y) ]
0 W5 b, r. h0 K# y$ y
[Troubleshooting]
( o$ `5 q' Y. l
從client連到server端時出現error:
2 _9 A9 T8 Q# [: r
samba mount error(110): Connection timed out
% J2 v# z6 y+ s( V
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
$ s8 }' z3 W( t8 `
; Q3 h- y T @$ h q
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
* u! P8 \- U/ h O& i2 N% ?
! C$ ^1 [7 a/ P5 O1 U5 Y9 r
用 yum 查一下有什麼 sshfs 相關的套件:
9 z8 A* _- r0 x$ a1 J% N. @
# yum search sshfs
) d% v) d& v; U: {( k; _) U* j7 t: k
=====================================================================
& a% [* Y: z. t, W+ Y% y
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
1 r, D9 m" D: x: k4 d/ Q. a8 o
安裝sshfs:
; o- Q0 Q' `) P2 Y$ p4 b
#yum install fuse-sshfs
1 Q% P; l! K2 ~
建立掛載目錄:
4 D: d/ g! z; O# y5 k
#mkdir /mnt/temp
, V" f% I6 M6 G2 l
用sshfs 掛載遠端的目錄:
1 ]- S$ L% w5 @4 u+ m9 H
#sshfs -p 22
[email protected]
:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
# U- d/ r, \ x3 z( ^* \' |
[email protected]
's password: //接著要你輸入遠端ssh root密碼
4 |; ~# c- ?$ _
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
* a* z/ g( a* l. |; n( g+ ?2 r# C
如果之前你有設定與主機 192.168.1.2
建立公鑰私鑰免密碼連線
,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
$ Y- Z: p4 m/ y
, _5 G4 [" u# B% W7 Y
帶上密碼而不用手動輸入密碼
" d/ U$ p* ~2 g# a# p5 |0 d9 }- j
#
sshfs -o ssh_command='sshpass -p my_password ssh'
-
o cache=yes,allow_other
-p 10022
[email protected]
:/root/ /mnt/temp
E- ~/ i1 }8 F7 w: V1 q- X
註:
如果掛載有問題,可以開啟 debug mode 觀察過程:
4 g! |7 w2 O0 w6 f# P, G
sshfs -p 10022 -o sshfs_debug -o debug
[email protected]
:/ /mnt/temp
; R1 F2 g9 L" z2 ~( @1 V6 Z7 N
* j3 k, s9 g A+ B9 [+ [7 F2 t9 A
以一般帳號(非root)掛載時,出現error :
- K @0 u- v' M5 u
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
. n7 V! q4 L' C! i5 J
ls -l /bin/fusermount
& S% V/ T6 o3 D2 y
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
4 v$ N! O, {; L
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
. F! ]0 ?/ _; }( U
! D; j" w$ Z! u# J1 R
可參考 :
在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統
SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
: l! ^ l) E: @9 O5 U- h5 I
' Y& x q( C5 j2 C/ k+ ]
% w; i$ H" Z9 U; K
作者:
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.itech.casa/)
Powered by Discuz! X3.2