52AV手機A片王|52AV.ONE
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
[打印本頁]
作者:
IT_man
時間:
2017-9-3 21:06
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
* e F; |' G9 o \9 k+ Y' m
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
4 N2 K o6 a/ W A
5 b+ l Q5 B) J$ T
2、Samba Server
+ S$ ^' ~1 c4 r: W% c
步驟1.安裝 samba 套件
' u3 u1 K8 J0 L: w0 F! B1 i) \
; w1 k3 g( Y: t( T% W
利用 yum 指令來安裝 samba 套件。
' k6 K0 l; R* {% z3 x1 P0 O
#yum -y install samba //安裝 samba 套件
2 A$ R. j+ e) Y& l
0 \% g& P+ P/ T M s' p9 b
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
* e/ m* F2 o5 |$ Y+ n
#yum install samba-client samba-common cifs-utils
% V6 Q$ i9 \$ j- V; ]1 ]# |* I7 F
4 v# @6 h1 J# c' ~$ f* H" `; ~
步驟2.修改 samba 設定檔 (smb.conf)
9 }/ R* C% A( M/ Y. {% {# E! K$ e
& _' z1 Z- a5 U, p& y3 T" X, ~
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
/ W& L5 ?8 |* K8 p" I
#vi /etc/samba/smb.conf //修改 samba 設定檔
, ]% y* e- c; `& e' C
( K" Y7 v, T% z* H% a* e
global //通用設定
9 [/ l4 h7 i' y! \4 _6 a s8 O
( }4 }3 p, S: V
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
, q" E7 l; W! }4 e
+ q: h1 M; ^- I$ z' T' g
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
( y4 k' q$ u0 O3 M2 Y& X8 Z' E" |
- l# }* J7 d6 O: \- z
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
" G+ j! v, w, i* O' n O
8 G5 G I% y B Q
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
/ k7 P6 I" |; V
) | X4 h/ d' |5 R/ k
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
0 ~6 Y2 G' B) e+ ]8 R' k$ K# H
/ M, t$ X$ g/ w+ e0 ` K; f7 S
encrypt passwords = yes //是否對密碼部份進行加密
3 [+ {% g( j! _# B' P, z) c
+ v3 S: Y" r; j! W, X
display charset = utf8 //Samba 上所顯示的編碼
) y O7 {9 @& ]; m- V8 }
* c6 ~1 V) R% L$ Q
unix charset = utf8 //Linux 上所顯示的編碼
& I5 d9 x: ^! B9 ?5 O7 Y% x
* ~+ L5 ]' L/ l: V
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
. j# d# F) d" k1 F
q2 ]8 O+ }2 [+ r
home //分享設定,屆時顯示分享資料夾的名稱
& C) p& S; ]. E
3 G) ], |5 T J# @* e* j( j
comment = Weithenn Samba Files Shares //分享資料夾的註解
6 D1 e- T! S, I% f7 x J
. Z8 D7 D6 r" ~
path = /home //分享路徑
$ _+ }, d' } _$ }1 v8 b& e$ n
- ?( v6 d) z: B9 j. V
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
! { r$ |) m$ f! ~! m3 S9 d, P) V
L4 I! X, C, O( P
public = yes //允許使用者登入後可看到此分享資料夾
- Z' J% M& N1 `8 P" R( N& D8 ?1 b6 h
4 F. g6 x. T/ ~. z* ?
writable = yes //允許寫入
( H- P, N% R. d- q- P8 D3 s9 R
3 w+ q" J7 y/ t% a) X9 c
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
3 e: J# O2 r' D9 O1 i/ w
' T6 k4 ?8 w \9 D' Q: P
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
7 s* \+ E; Z$ A4 I' v4 O: p
, L5 n, o' O' N2 s/ {* {, C7 e
9 E6 g8 ~' I5 n* O/ y
步驟3.建立 samba 帳號
' D4 y: m9 I% Y5 q4 n, J# c' g! t; P1 _
) @( w: @; X4 c) i* `
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
8 M% d# Z6 B1 s/ T5 _/ I I7 C
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
3 w, L1 }6 Z2 ^. @
8 Y% S1 u. E4 [7 c V
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
) b3 f5 R- n" u
4 J. k- c9 E! |2 ^* |
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
( z5 j6 @* V4 I! T. y! @5 p+ W
6 i3 O" K1 d5 P! M! _% @
Added user user1. //新增 samba 使用者帳號 user1 成功
. d/ i" }' B3 z7 @7 v8 t2 V
- D& M4 ^& i2 Q, c
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
9 @ }, u) W9 ?5 d2 q5 M, i3 ?
#cat /etc/samba/smbpasswd 或者
- I( b! a @0 B. }6 o
#cat /var/lib/samba/private/smbpasswd
: ~4 @) ~4 b) V
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
! R2 I9 \7 c. t6 c; ^
) h, h% ]- P2 I- Y
步驟4.啟動 samba 服務
) {9 v% P$ s2 r- a1 P. }# n. j
5 ^8 {# [+ R" ]0 K) @( {* p: w
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
: H2 a4 u* S/ K
#chkconfig smb on
$ w' h6 B6 G& G1 _5 {
! @3 h+ H7 L5 e' c
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
, @. P6 `5 G) P9 J* {8 y# O
#chkconfig --list |grep smb
: t6 `/ M% O% L+ L
$ p% j: S$ l' }8 G
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
9 g8 a( G3 d. b! k
" ^: W+ X( S( ~4 x7 U- ~( c) }4 W
完成上述設定後便可以啟動 smb 服務
( U" L* F: v- x9 c
#/etc/rc.d/init.d/smb start
' V; d1 m7 H" A$ n% V% F
- }9 H4 d' \, U- w
Starting SMB services: [OK]
7 E% {9 l7 i, q* H3 X
8 J2 ~/ x, I, _- R: v+ z9 R
Starting NMB services: [OK]
T' o' v5 R, H6 t9 m
( n; k1 t ^6 {2 B8 G7 H, W
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
" Z' c6 s/ [7 n, Y/ Z
#netstat -tnl
# U4 M+ F0 v$ S6 g3 O1 z. o7 ~
- e5 T" B# p& {3 J* R X0 M0 ]
Active Internet connections (only servers)
6 p6 d# V; d7 h0 S) Y" I
2 g- U- |7 E5 _4 @5 Y b
Proto Recv-Q Send-Q Local Address Foreign Address State
6 t, Z! B; U3 o i& G
; ?+ X4 z7 A' P8 I* t% W9 `( s
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
1 E8 _- E% l7 o/ O8 a- O' p
! M; C6 W0 T' @6 W+ I- b) m4 \
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
' x2 r/ T6 u5 n- o, Y+ @/ g
; A+ }& ^ i1 g1 h! d% J
3、Samba Client
; m9 s. Y. A) Q7 ?1 [) G
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
2 J! Q0 G/ b% p4 I! e
; W5 H, Z* s' T! B9 `+ L
Windows Client
: Z+ e1 G5 r' m& `- B4 ] _
9 J# U9 M( t6 a! |; I
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
, C* X9 X/ [5 U0 V
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
9 @+ P% }8 ~* ~8 T
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
, r) _+ k. l* R/ J
+ X, y% M7 F8 U2 C* l0 g- ~
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
0 I) q; |9 h9 {) \7 b6 I
' ^; ^ d+ O# {( {' M7 \$ ?
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
) y+ Y$ n7 [9 G/ K0 Z
net use w: \\Samba_Server_IP\home
8 r% n. J+ ^1 b. n. L3 e
; x6 C: M8 I+ E& ?6 u
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
4 R( y7 L+ t" L
net use w: \\Samba_Server_IP\home /user:user1 123456
7 S; H: j' l! M4 b+ N. h# s
! _( Q0 H/ ]: s' k
CentOS Client
" t: a$ H, T0 I: x' G0 Q* M, i# R
+ C1 a, ~7 S% z# j) ~ h1 `
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
8 v7 j- X% y+ u" |
/ B9 T& T2 e5 p0 C. @& s2 ^
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
+ J0 k% o; N; M8 X
mount.cifs //Samba_Server_IP/home /mnt/home -o
. i4 \& Z- Y* {2 ?
1 t3 r- s8 O2 T' D: T
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
( I/ X! a2 k+ S+ P3 a
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
3 L, o: i9 K4 P" r
- r# n! j# z6 J/ p) N
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
% Q& K. l; v7 P4 P
umount.cifs /mnt/home
或
2 z" G( {+ n4 w; p- D) T$ E6 |/ ]
umount
/mnt/home
' [7 E9 o7 q: o
b) E6 d- n; P3 f7 z
4、CentOS 存取 Windows 分享資源
' k: c* r0 m$ e4 @' o! K$ T2 M
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
/ E ^* d: K6 Y7 K V
- X8 h& M) s, a8 ~
Windows 電腦名稱: user1-XP
! G% E4 {4 F3 Q8 |; i+ l
分享資料夾名稱: Shares
! M2 w5 @& J6 @% Z9 p
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
* R, p( \+ W+ v4 C( @- S
可存取 Windows 分享資料夾的使用者密碼: 123456
6 K8 k; z) T7 h& g t, C+ g
* h8 S& v2 C$ {1 U
CentOS 掛載至本地端檔案系統: /mnt/shares
% v/ A0 S! B% U$ c6 s5 n5 I
CentOS 帳號密碼檔: /home/user1/secret.txt
3 ^, q+ A' A" G' A' u @
安全性權限設定: chmod 600 secret.txt
* X8 `& y6 M& E1 s) H& I
: _$ a. T* f, B" _
了解後我們修改檔案系統設定檔 /etc/fstab。
& |& O* z! O7 e5 _+ n, H) b
#vi /etc/fstab
1 ^( a' R: ~ Y% c7 r" H- v1 _3 ^, G' {
' a; ^ T2 `9 E- A- J; \
LABEL=/1 / ext3 defaults 1 1
. u0 T' ~4 I0 C( |% Y) e
6 I2 V* F: g! _
LABEL=/home1 /home ext3 defaults 1 2
; P' _! X/ A7 v
$ b) |* D u9 \( Q. b* G
LABEL=/tmp1 /tmp ext3 defaults 1 2
$ L& H X( e0 f" }' {2 ?
L. Y1 R7 z5 ]2 Q- k
LABEL=/usr1 /usr ext3 defaults 1 2
# m% {" W Q# ?) L# S* [
3 I* S8 g6 z; m: `/ u
LABEL=/var1 /var ext3 defaults 1 2
2 W d5 f' M% K6 H' L' l" W" L( C
! R1 [9 A& [* {" i/ i5 n
tmpfs /dev/shm tmpfs defaults 0 0
! O, ]" t' \' b* t2 F
h3 H9 c/ }9 E! P3 t* B$ r& s) r
devpts /dev/pts devpts gid=5,mode=620 0 0
, L2 M; [+ a' R' t
S2 W5 ?8 t& x) e9 d: a1 D! w4 L4 k
sysfs /sys sysfs defaults 0 0
$ r |: _9 S- K7 L# \3 K. n% J5 H
k" W4 `& a0 g; c* ~, Y ]
proc /proc proc defaults 0 0
! ?! H' r# @$ g( T; ~6 Y7 O
2 O7 F) j1 {- n( ^
LABEL=SWAP-sda6 swap swap defaults 0 0
9 y! w$ E4 L( z1 e* P3 B
& O" n% |$ |' m) c) g; I
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
& \% ^5 c8 u0 x: ?: ~
( s* _: d# k* v
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
: |. |, d2 R: y
#vi /home/user1/secret.txt
( }$ e! G4 t4 X- l
/ N' a M! @6 z* s3 w3 y
username=user1
- P. i8 E+ q: i! s% h4 v* @% s
8 M6 Q2 a' L T* w- P8 V
password=123456
1 c+ `5 I4 B) E8 p! E, O( \6 R
+ i: a) z( E+ n/ O& l( } h: h
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
" ^ `' F- l- F4 S- ^
#mount -a //讀取 /etc/fstab 更新
: K9 E+ j, c0 k% j( [1 @6 y# Z
: r" B) ^5 P2 B4 e+ N: e
#df -h //檢查是否成功存取 Windows 資源
3 r! f$ t3 o, ^
& i3 e$ H; ]6 j% }. k
Filesystem Size Used Avail Use% Mounted on
% F% r" ]& a" ~+ @4 w' w1 |
3 v+ c: W% n- n5 g! [, F
/dev/sda1 9.7G 2.3G 6.9G 25% /
T: }7 z, T1 M% o
! q2 N4 _9 T5 W3 |% b) b! r
/dev/sda7 414G 211G 183G 54% /home
& F q2 Q. q, q; E9 ?
# d/ F+ d5 l R! W
/dev/sda5 4.9G 139M 4.5G 3% /tmp
7 y7 Q: q6 |+ o6 ^& P' C9 |1 u
}1 x0 E- E3 P& k5 v% O" ~
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
! k c( `# O( v% W
2 a: Q) S& W4 i) `' z- B" h9 e
/dev/sda2 9.7G 255M 9.0G 3% /var
& j' [& J) l1 m6 `& q
' q/ ~1 w4 S/ |; ^; A% Z8 H
tmpfs 2.0G 0 2.0G 0% /dev/shm
8 L$ t# u7 e I& N
# W T+ Z2 |/ F( a
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
5 n6 I( |6 W1 u' T' m
/ M" Z7 r) p* ]: C5 [. W5 D
[Troubleshooting]
6 Z! P$ l( K# O1 u
從client連到server端時出現error:
4 C+ ~) s. e9 J G) \
samba mount error(110): Connection timed out
6 N( H2 p: O1 O% B0 ~" e ?) B
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
& P) Y) l, M; C$ p: o0 s2 Y* j
4 N# C$ A- ~6 m# K
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
9 b p, ~: V1 q
- x* j4 N$ B; x7 _- Q" H. K8 e
用 yum 查一下有什麼 sshfs 相關的套件:
]& A, C) {; N0 v) Y) C- h! H1 t
# yum search sshfs
3 M6 b* k' w |! v+ H; t
=====================================================================
4 Z# P) d' r& w( G# U; U
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
0 Z8 F: [; r# o4 \8 {) q5 z
安裝sshfs:
' f! g2 U! f3 F4 d
#yum install fuse-sshfs
+ i+ i4 r3 J* N
建立掛載目錄:
- _( \4 l# I( |9 A; G
#mkdir /mnt/temp
) j5 ]' ^! x( W' [
用sshfs 掛載遠端的目錄:
) O* h6 @6 ]1 h+ c$ [4 a/ C8 v
#sshfs -p 22
root@192.168.1.2
:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
& F/ H# ]5 \$ p2 c" W
root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼
7 f+ D' F; d" f/ p; K! q0 H8 _& U( y* u/ C
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
2 t, V+ ?& {9 e* |6 ?
如果之前你有設定與主機 192.168.1.2
建立公鑰私鑰免密碼連線
,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
* q/ q# u( C* F
% g; X" \ y; F' R& t9 }9 g5 i# ^- j8 d: c
帶上密碼而不用手動輸入密碼
@$ E) M! `3 p$ @0 }% z+ I
#
sshfs -o ssh_command='sshpass -p my_password ssh'
-
o cache=yes,allow_other
-p 10022
root@192.168.52.4
:/root/ /mnt/temp
4 j% s* E3 ~* J
註:
如果掛載有問題,可以開啟 debug mode 觀察過程:
. A# _' c) _7 @! y# ]( z/ u
sshfs -p 10022 -o sshfs_debug -o debug
root@192.168.1.2
:/ /mnt/temp
; }6 W: j1 \. v8 P' D2 D
0 U, }& O9 |4 B9 E1 i; i: o: R
以一般帳號(非root)掛載時,出現error :
; L3 A4 S: n2 n% d9 }3 p6 Q7 \3 ^+ j
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
g( _. B& c3 c2 l% Q. Y4 `
ls -l /bin/fusermount
- P# c- _2 A4 t
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
3 Y" l! e. F0 J2 _
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
) K1 a _0 P( S* Z
1 @2 I; x% u5 j
可參考 :
在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統
SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
4 E" N/ b1 u; O
' U3 E- t; P' D8 R% ^
) t2 s$ I# z$ 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