52AV手機A片王|52AV.ONE
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
[打印本頁]
作者:
IT_man
時間:
2017-9-3 21:06
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
) x$ T2 A% V7 g) R1 P
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
5 O4 y, ]2 [4 s
% l% c% m+ }9 Y" Y. ^. Q! V# l
2、Samba Server
4 x5 \+ u% |2 ^" c
步驟1.安裝 samba 套件
5 {& \+ K* i. u4 s7 ]/ C+ u; h
$ B, j$ O2 H* [3 T3 d' i. S- D, K9 x1 Q
利用 yum 指令來安裝 samba 套件。
* m6 W9 P8 v# Y3 }' E- m. E
#yum -y install samba //安裝 samba 套件
+ X1 J. ]) W) i9 h( i9 Y
; R+ ]# x+ Z* f, o0 q
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
( I! b" ?* A, P) G, A. V2 }6 r
#yum install samba-client samba-common cifs-utils
; g5 A) E1 _7 R( @6 x
' r! i7 w( A1 |' u9 y' h7 a' f
步驟2.修改 samba 設定檔 (smb.conf)
) I( q1 b/ s+ z1 x, [) u: W
7 s$ U! i* r1 h- w4 m. @
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
" q2 }* X! ?2 J, c: R& X, g
#vi /etc/samba/smb.conf //修改 samba 設定檔
8 R$ _2 s* I6 r% e# r0 o
T: h2 G* C1 F' ^1 j: s7 z! I7 n
global //通用設定
6 Q. \1 j t* l
, g) k3 C' K+ y# w; y
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
' Z$ {3 l7 Q( r) b6 Z4 @$ s
+ e- t# g1 a" x! T8 g: O+ s
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
2 A$ |& j* H6 A
) \+ _8 h1 H# \ D+ O- U
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
- }8 P+ H% b+ f" ^0 k/ B2 |
5 b! V v& p0 B' F
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
6 v& ~1 }9 S( k+ b# f
3 i7 C0 m, v1 y
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
: M4 ?% m5 \8 P( k( A# A
* Y' y- f- B# r4 N6 X3 D
encrypt passwords = yes //是否對密碼部份進行加密
K5 y, d3 _+ Y, b
0 j Y2 k: k$ b7 U( M6 v1 @: x
display charset = utf8 //Samba 上所顯示的編碼
5 z, m) G9 b3 _2 ?, ^
( l) [/ R3 L# d' j7 _ X& _8 K! L# I
unix charset = utf8 //Linux 上所顯示的編碼
) `/ m, v9 ^/ S2 S
! @# f; e. l& n; t. f
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
" g b7 B y" P, T& n; _
! ]6 b+ o6 L% B" i7 U" i
home //分享設定,屆時顯示分享資料夾的名稱
( v. G8 |. L" q+ K3 o; C8 S8 I- i9 k: F1 P
2 v+ @0 `5 u( k) Z( C& D' ?
comment = Weithenn Samba Files Shares //分享資料夾的註解
8 G. O/ _* |8 c8 u) {9 F
/ v; c/ U7 O( m
path = /home //分享路徑
! H6 R9 V2 S( a
% y! k k; ?4 k: y
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
; c- p* o' m# O0 Y
& A8 D \0 g: d% H4 u3 _
public = yes //允許使用者登入後可看到此分享資料夾
$ E1 z, H) X: B s B" R
: h9 H" V' f+ L( X8 c
writable = yes //允許寫入
0 j5 y5 F- F& _3 U
# P4 a$ J( n* G0 s; S+ q8 |
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
$ D, I$ R% q' D
1 b! r' ?3 p8 R* B! h$ }8 |. j
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
6 w5 @; I8 R: Z g6 p
6 k5 i+ ~8 t& t
8 i7 q; G0 o( s0 n2 W) B/ X. }
步驟3.建立 samba 帳號
/ B9 X; Y g) z- u# [5 O& s
; Y$ z, D$ Z' [8 t$ T, k7 E5 j
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
7 ?# J' T# i7 z1 g
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
& r1 J/ e. N& i$ X2 ?5 o% y
# I, q0 W4 a9 z& p5 h
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
) L) X: z9 `! ]( ~. l0 E8 [
6 k9 a# c; f& n. h
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
9 z/ ~/ S) k- q0 A( G8 D4 P
H6 T' M5 C1 K2 Q6 c0 Q4 P
Added user user1. //新增 samba 使用者帳號 user1 成功
5 r' h( G! i% K3 o8 c
; R2 g* F9 h& d$ {
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
0 w; L7 r! n2 N4 T% A `
#cat /etc/samba/smbpasswd 或者
/ ?8 K- M' j2 D& F* A
#cat /var/lib/samba/private/smbpasswd
+ r' U* I% F2 y+ y4 ?" e3 r
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
# |' M0 |2 B& W+ a4 ~ K) O, Y/ H
$ i* O/ j3 z* x, Q% `1 U
步驟4.啟動 samba 服務
) F8 m0 ?4 t' m0 i1 B. L
2 b' }# \4 |$ q6 i0 ^9 l
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
; y) x# j& l2 p- D) }
#chkconfig smb on
( \9 a2 b- [. t' l4 k E2 D
+ t6 N o: V+ M' L
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
# T9 _3 v! n4 y1 c* q
#chkconfig --list |grep smb
2 b. k: Y V! d( { t5 b: o! b4 e
. E/ Z% l2 U9 ]+ s$ R5 D- \7 v: O' A
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
, a' n7 j6 N6 g- U
) [6 `3 Q" @/ l1 |% h7 @
完成上述設定後便可以啟動 smb 服務
# k. h+ ]7 `! H( ]
#/etc/rc.d/init.d/smb start
! \ Y6 }, L7 y/ g* W( E- r
% s: W5 q4 m( Q
Starting SMB services: [OK]
! Z$ O6 c2 \( }3 @
: C, J/ D$ t: p/ V& c
Starting NMB services: [OK]
. R+ Y P1 F. r5 C: K9 M6 i/ V
! K/ v& i8 x/ [
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
" f; Y* r. j B
#netstat -tnl
0 m6 X9 k# \6 ` L
* F, U" s, ?. t+ r( G' O
Active Internet connections (only servers)
/ x8 g8 s& W7 X- b6 F& W
s& T+ \& P* x8 `4 z: K4 B8 `
Proto Recv-Q Send-Q Local Address Foreign Address State
# T, W; X7 j* G6 F% E* ^
% s* ^, J( o" x- C
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
2 K. S! G; `/ G9 p$ x
9 p2 R* ?4 O4 ?0 B$ D
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
% P/ S, a8 {* s# F
. ^+ l) Q7 `- X; V( L
3、Samba Client
7 w+ X3 n) x8 S5 h3 z8 T
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
9 @4 R4 m" v6 |+ C/ p& s7 V$ N8 h
4 Z7 b K% e7 I5 A. `- f
Windows Client
: \! `+ g# q$ S8 [4 ^6 c! S
( E* S% r/ ~% y: b. ?3 G
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
( H5 R7 u2 F0 \' N# [
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
7 v' ?4 y5 q, ^4 V) M' y2 H! `6 B
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
* ^. g( ^$ U/ u, ]9 m1 A
% g3 a1 Y- p) p! e* F
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
/ ]. s, ?* O0 W
! C( }1 i& N7 o& F; U) K; t& B
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
0 m3 Q6 r! I- V J& E
net use w: \\Samba_Server_IP\home
2 [0 z- I' ~8 Z
- Z& o$ j+ v) k8 M% @
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
, X4 k$ e* C( N' W
net use w: \\Samba_Server_IP\home /user:user1 123456
2 Q& I- v U1 k+ k; q) [
- f- n3 P) v: m: K
CentOS Client
! Q1 o( \2 J& R% @7 U' W0 `3 ]
+ e' {5 o, \ |" r: P' Y5 k) \
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
& J, ? l M) t; i. V/ G9 C2 P; y3 H
: \7 C# {5 m- u
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
( B) G' L6 q& B7 E
mount.cifs //Samba_Server_IP/home /mnt/home -o
' c0 a& }8 o) P; }1 \% D7 n% C
) b4 E( D* ^; j$ W
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
2 }2 K% e/ j& j. S3 ?" q
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
& V, v# s7 c) D! H0 E
* r+ e" |# C% V; U" e- B" o5 b
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
: a4 v2 z% f' T8 V; H. b4 C
umount.cifs /mnt/home
或
1 s8 b0 ~# E' Y* S0 M& \
umount
/mnt/home
- a e6 u0 l2 [$ w& E k
/ |) B: {0 U: t( q) Z6 P2 a, z Y2 }; |
4、CentOS 存取 Windows 分享資源
: l- O4 V } v- N
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
% d, P) m3 R/ q( a" h0 U
( z6 L* j0 Q, j u" l8 v
Windows 電腦名稱: user1-XP
/ A6 v3 i8 M, Z# c# P( ^ z
分享資料夾名稱: Shares
2 D% C& P ]4 l8 w# Q
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
6 B" n' b' Q+ q5 S3 w0 \) M3 f
可存取 Windows 分享資料夾的使用者密碼: 123456
" I( S8 ]/ n5 }. u$ b) ~
6 l8 N1 X+ I! e) ?' o
CentOS 掛載至本地端檔案系統: /mnt/shares
3 [$ ^. _7 ^# E5 r. g3 |* j
CentOS 帳號密碼檔: /home/user1/secret.txt
9 t P5 F0 v. J7 ]9 o" u
安全性權限設定: chmod 600 secret.txt
, q6 S0 e9 y( U% K9 C* E" p. x
8 @& ^0 V. f; g$ Q: p8 B
了解後我們修改檔案系統設定檔 /etc/fstab。
; l/ @6 C8 N6 a/ |
#vi /etc/fstab
0 |# ] Z3 m% h9 j- { Z! t7 F/ W
, o, Q; y4 r8 A" |- P7 m
LABEL=/1 / ext3 defaults 1 1
# Q8 L4 p9 `9 H/ }+ ?& y4 u9 w
$ O$ Q3 g# n) W+ b$ Z: Y
LABEL=/home1 /home ext3 defaults 1 2
/ S% s' v7 O) n8 }+ a v8 r! _
+ ^6 w6 D$ g1 @' }2 m9 I! u& n, ^
LABEL=/tmp1 /tmp ext3 defaults 1 2
: O0 j& \! I* O1 O( k! R* Z6 U$ O
0 p; ]$ W N$ U& d; [
LABEL=/usr1 /usr ext3 defaults 1 2
' H* }4 B2 m% y+ d& L K
# \+ K) t5 A6 M+ q4 |/ ?& P. b% g! R
LABEL=/var1 /var ext3 defaults 1 2
9 j) v e5 L) _
: B4 f2 |7 o( E& ~" B' {# L& o
tmpfs /dev/shm tmpfs defaults 0 0
& J0 z1 ^5 \% J7 } [) F
, s9 U4 }# |( X3 j9 l1 O
devpts /dev/pts devpts gid=5,mode=620 0 0
1 i8 r4 ]- D7 b2 Z
% G. a$ m0 M9 G" `6 W% n. [- Q
sysfs /sys sysfs defaults 0 0
# z: z8 r+ n; m
* h) y( W0 N8 u: G
proc /proc proc defaults 0 0
3 k, D- e5 m" h* i- g7 P4 B6 }$ u
4 g: l; z3 z; B* q, n; [. T
LABEL=SWAP-sda6 swap swap defaults 0 0
0 H% V/ y! h7 k8 u( j2 L2 o
/ K' z, ?; F" c, a& L4 e
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
: h5 I: p' Z- I- p
7 h/ \. Y$ H u$ u3 D
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
1 I9 U2 O4 Q8 l
#vi /home/user1/secret.txt
4 k3 F+ X. a. D+ E
. f) {; I9 x3 R0 E/ B* T- Y( R
username=user1
# I" z. j/ O( h! Z6 R9 U; K
4 n8 Z9 Z" k$ ^
password=123456
2 f1 w2 n3 E; n' D( c/ h
& d6 V; M U+ ^* x. i% ~6 U
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
5 \( k1 ?/ g( n$ N; P
#mount -a //讀取 /etc/fstab 更新
3 n8 o: T% Z8 I' O" E$ G
( r- F" t9 x- U- ~: Y( ]
#df -h //檢查是否成功存取 Windows 資源
7 C i; E' W$ D2 Z2 f6 B
- l7 D% Y' R. D/ `3 m; f, _
Filesystem Size Used Avail Use% Mounted on
" s4 q8 G i2 o& P3 B# O- R; X
) t# a! c3 }) c/ _* y7 m# X
/dev/sda1 9.7G 2.3G 6.9G 25% /
! M) O, O# ]1 |1 ~* S7 H c8 z
. ]( k0 M4 ]: J8 U% s
/dev/sda7 414G 211G 183G 54% /home
p7 |7 l: k5 N% v' M4 Y' F, c" I1 T
$ ]! ^8 ^* r1 f5 D& m2 L2 |
/dev/sda5 4.9G 139M 4.5G 3% /tmp
7 R/ r" m1 F! |
3 s, x1 Y* \8 w" W: \5 s+ c
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
8 z2 m) K, X/ }' Z7 I. m S
7 R7 y* w S% J/ v6 S
/dev/sda2 9.7G 255M 9.0G 3% /var
) K2 N$ r" a. G9 {# Y: ]- q
2 o) c3 g, {' k( A' C% |" }) g
tmpfs 2.0G 0 2.0G 0% /dev/shm
8 C+ q4 P* p1 S: V- M( c
7 d" w3 ]( W# [1 n
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
1 q' j u7 r& B- o# w& N, s
/ [' D8 m* k. S4 D) j% F0 k9 |( B
[Troubleshooting]
, \4 M8 C* r" m$ ]$ }
從client連到server端時出現error:
8 n4 O+ N" j* g0 |2 h. l
samba mount error(110): Connection timed out
5 y. T- O; n3 q7 C) c
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
: @0 o ]5 {/ j% u( R
5 v6 {/ J( v4 W; a% n( I0 B, {
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
0 V/ R, ^" {" v1 f" f' A! u7 ^
/ v8 x% q/ b, a
用 yum 查一下有什麼 sshfs 相關的套件:
' u7 D$ M% U+ g5 V6 {2 u2 d( @
# yum search sshfs
+ Z: z8 L) P8 C- P
=====================================================================
/ A. u( @1 X- C& [
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
' _$ X8 c5 c' E" T
安裝sshfs:
( b* m1 J6 \3 z( x) q/ d0 B
#yum install fuse-sshfs
( l1 W, k( @- h9 F7 w( t! o k7 g
建立掛載目錄:
: Q* T! H: I. A% D3 S; Z$ g
#mkdir /mnt/temp
- T: U! x' p% t) [ R. h
用sshfs 掛載遠端的目錄:
; v+ e# P7 k: [5 `% o. y7 B
#sshfs -p 22
root@192.168.1.2
:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
) ~3 P2 ?& e: S9 ^1 f
root@192.168.1.2's password: //接著要你輸入遠端ssh root密碼
" I8 q7 `% I. ]* w
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
6 Z1 d- q1 t0 u6 p3 L3 p
如果之前你有設定與主機 192.168.1.2
建立公鑰私鑰免密碼連線
,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
' p: z3 g" u- J+ S
/ X5 y x$ z* k: R& C9 j
帶上密碼而不用手動輸入密碼
3 r4 C. H" x) g* |+ }; X" s) Z. j
#
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 W- {. q% T" A! |0 |
註:
如果掛載有問題,可以開啟 debug mode 觀察過程:
" I# k% T- Q: M$ f& J6 \" h
sshfs -p 10022 -o sshfs_debug -o debug
root@192.168.1.2
:/ /mnt/temp
; I! I5 X' l) d0 H l) b1 j/ w
- O2 {, e9 L$ Q3 y8 M8 F8 o" T/ _% _
以一般帳號(非root)掛載時,出現error :
* Z! E! R. ^( p- d0 s
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
; R4 E& ]: b; T" n
ls -l /bin/fusermount
- N; M9 H8 ^& Q1 W
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
& I( ] P% M5 D c' X: \, g ]
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
. p& O' }$ P9 T7 `! e( [
0 J- c2 K; j9 P) ]: j& {; ]4 k
可參考 :
在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統
SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
; l0 |8 \) P+ p# Q; P9 q
2 W! b$ w! G+ P% a5 e; T* S
. n; p L! K0 `; {3 `# V* A9 @. h
作者:
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