52AV手機A片王|52AV.ONE
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
[打印本頁]
作者:
IT_man
時間:
2017-9-3 21:06
標題:
Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)
1、安裝及設定
# s! y( q1 q2 y4 `- ^6 v; j- e
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。
3 U) l1 j+ D9 C# M; g5 g1 X
7 W2 J8 k$ k# |5 l
2、Samba Server
: f, t4 G. N7 A$ r
步驟1.安裝 samba 套件
w8 a; g5 m4 W: W9 g( [& E
( C% R) d% [+ Z* O4 d3 M" ?
利用 yum 指令來安裝 samba 套件。
% C. m) j# n1 W7 P/ A; [- \9 ~
#yum -y install samba //安裝 samba 套件
0 C/ E4 F4 b4 b* _! L1 l
0 D0 `& ^/ b; j' z
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
6 Q! N! }" G& s8 W& a2 R4 m5 R
#yum install samba-client samba-common cifs-utils
1 @) X; n# F( `9 \2 ~! G' h
2 l. b$ E0 r0 o
步驟2.修改 samba 設定檔 (smb.conf)
9 t, w2 @' y$ [
. B3 x% Z0 Z2 H- ]
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
. l2 v+ k5 z) p7 f+ X6 I
#vi /etc/samba/smb.conf //修改 samba 設定檔
: s* u+ A7 T ]7 y+ p( L/ L
% z3 ? ?8 l: B+ o7 H9 Y
global //通用設定
- J' N- k4 c6 g: n: ~1 E, a( [$ o. y( }
4 \3 y/ ~* `. H" n/ Q
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱
7 g3 {2 `$ E. e7 R# @* ~
: F/ ?6 F/ `8 f1 F' b( f
workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱
' f' j5 f9 P; X4 t) ], m) q
. m f% |* n& b3 o+ w8 z
hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源
2 g# J5 x2 G! j
: r8 ~: c1 G6 q2 |. ^4 q7 B3 Y- X5 t
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源
7 |" n+ I- i- j
; {9 d6 @9 v. l9 W, E! ]" p
security = user //安全等級user需在Samba主機上擁有帳號者才可登入
3 S7 G& D' _: T
# h2 M- }" E; b! C k4 k
encrypt passwords = yes //是否對密碼部份進行加密
% {3 D9 I# c* x/ r3 L" a* P
& w7 K- u- F) G3 U$ {4 h7 r; ^
display charset = utf8 //Samba 上所顯示的編碼
- M6 V K v7 `, l8 P8 q' f
5 \. ?# m3 k- u6 q2 n {- ^# w
unix charset = utf8 //Linux 上所顯示的編碼
* M9 B% l! x7 i' j
6 `7 H6 H+ Q; a; {1 F4 O
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)
* b2 M/ K9 a& T ^' }, y- ]
* D" F0 E T5 N3 g2 S2 ?7 \, f
home //分享設定,屆時顯示分享資料夾的名稱
: M1 [: A- Y6 [- h
# v( b9 V4 N1 M+ a+ ^, ?0 @7 e1 m U
comment = Weithenn Samba Files Shares //分享資料夾的註解
' b) K" C# [" Y0 t! X
1 c' w* G# j, ?
path = /home //分享路徑
9 ]2 @! G: D4 @& v) ^3 K
' N0 w+ v) t: u
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源
4 e, W+ _ W! ~/ Y8 A
6 G3 F+ V# b, c8 ]; \
public = yes //允許使用者登入後可看到此分享資料夾
0 a6 d5 Q5 n: J7 W3 y; M; @
, M" x1 b* X& N
writable = yes //允許寫入
& q1 j. I" J% K; R* _; ~ V! f
7 X$ y0 G: a* Y: e1 A* ?- e
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)
& z# X$ p& [, z7 Y4 f, [
# m5 W/ u3 Y- x) I' f$ L# D7 ?
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)
! b/ k1 A! {, X1 H' f) R8 Y" P+ o
, [: }! d P9 I& _
8 u1 T: c& B2 [* x' N# A
步驟3.建立 samba 帳號
" ? \1 x( p: @% H" U: {( C' s
/ U3 R; s, ^7 c" Y
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
; N0 O& D: F7 `. n- Q3 R- z
#smbpasswd -a user1 //建立 samba 使用者帳號 user1
0 r' c4 O: X! W3 t$ Y. Z: b
9 P% D0 z# y/ c3 w l1 ]4 b
New SMB password: //輸入使用者帳號 user1 的 samba 密碼
0 k1 Z' m# o- P; _+ q$ H, f
7 e- a& } t: Z# [/ z) K
Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼
& u+ w" i0 z3 G
% z/ I0 i+ H* J, z/ |
Added user user1. //新增 samba 使用者帳號 user1 成功
& S- U6 c+ ^+ c, @5 f' V8 I# K/ }/ u7 n
' H( B+ ?: T, g i+ F% n
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
' g: }# m, P, r9 i5 ` ~4 W
#cat /etc/samba/smbpasswd 或者
1 [' { Z. s- b6 D0 U
#cat /var/lib/samba/private/smbpasswd
4 m5 {% T2 D# Y" w8 u
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :
. T0 H$ a& i: f; _3 ? Z
, }+ f& E# M9 c2 N# _6 a- q
步驟4.啟動 samba 服務
6 w k2 u0 u, A/ w- e7 Y: ?( ?' h) g8 q8 C
, o* R# L4 y. {- Z6 n$ s, U& [
在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
0 f/ c& X+ V9 V0 G- n* {
#chkconfig smb on
1 f' Z9 r `* }& h! a
& v0 f+ b1 |9 A& H
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
1 S7 o4 W/ n( W5 _% b% O
#chkconfig --list |grep smb
1 Q3 h P, d4 s* v
# s: m% ?. R6 l, r* e
smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
@- K3 v. Y& \
1 Y: z% A2 J5 s: G6 O3 j
完成上述設定後便可以啟動 smb 服務
% ^3 Z' d+ v( L2 g5 p6 {0 v: n
#/etc/rc.d/init.d/smb start
$ J8 f, O& b; H, O9 y
9 v2 |# o) |7 f4 b. S, n
Starting SMB services: [OK]
# e+ `. N2 E8 A# B
: v! k& B6 f4 g$ P7 C5 s3 x/ l5 o
Starting NMB services: [OK]
! X# }" q( A0 `0 g
5 z2 k% T+ @0 }- I1 b6 r2 } ^
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
! S- N) h/ [6 B- f
#netstat -tnl
. w. i3 k2 |7 d. X5 x( F6 k1 P
4 n0 q9 g- d5 R, ~3 d* K
Active Internet connections (only servers)
% T7 W; n7 N) B6 j% v( [% K4 ?
/ V. o: `# E7 y* q
Proto Recv-Q Send-Q Local Address Foreign Address State
6 q+ u0 H* K& z R
: }3 x/ I; S3 t( \0 X ~
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
1 |( i, Y. z2 X) b' b8 F' V) \. Y( \
n( o8 k: l1 g2 }
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
) ?; U+ g7 u& Z* a+ O
0 {: M& ~4 l- M( A
3、Samba Client
. U L; a7 h: e
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。
1 K( `) v& X+ Y# Q E
/ g, C6 B3 U. c4 b- y: d6 ?) j
Windows Client
4 k' V4 G3 ^8 T* @
@+ }2 x% O v
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
9 z) ]1 Q( T' g2 |0 d- J2 u- j
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
0 M) E4 Z! A( q2 \! i
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。
$ `3 C7 z0 Z# k, [
6 d% m* c: H; ?1 T& D
若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):
* ]0 Z4 x# S* E, O
2 P1 \3 x( [ ~( F0 E& A! ]0 e/ S
方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
8 B A1 v8 [: i) k8 l1 }
net use w: \\Samba_Server_IP\home
6 p" K! a- Y- Z* ~# {7 F
/ S, s1 S' e& E) L. v2 {
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
8 t- W7 s c9 g7 d
net use w: \\Samba_Server_IP\home /user:user1 123456
) w# U2 K6 b& A- e0 X6 N' E
5 p1 o2 [: Z2 n# P5 F! s) }9 e0 {
CentOS Client
, }% D% Q7 H6 J5 ?* ^/ }1 c
0 Y# \6 r6 Q( R3 e5 |& b6 ^, Y
若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。
8 H! ^2 E- S/ c$ }! I6 L* c) \2 J; ^- S
6 |* C: B/ t {& u! K& }8 r
方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
& {) n' I! R/ p5 P: W2 @; c
mount.cifs //Samba_Server_IP/home /mnt/home -o
; D+ Y. o( f3 H) r( p) @( B: a2 K
: I9 J% W4 ^+ I7 k# V' E
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
% h4 l0 Z0 ^, F
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456
% @9 a; a! c$ J, n
$ } c- M: a4 D, H; a! _0 V5 t
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
' E, e" e r, v! E P% l
umount.cifs /mnt/home
或
H/ o! Y8 }1 d: b
umount
/mnt/home
0 o0 @- a8 e/ Y7 ]- }1 Q7 \
' z( ]8 G. U8 {$ z$ |1 h' T. S8 V: d
4、CentOS 存取 Windows 分享資源
a7 A9 W& `; e8 w0 k+ E
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:
9 Q3 C( c$ i! m1 S, ^; ~
' F. h3 A/ t3 w- z1 A; B: t8 u
Windows 電腦名稱: user1-XP
* T% d& z5 q( \2 a( V
分享資料夾名稱: Shares
, M8 j8 r# A2 b% Z- j: Z
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
' x0 T6 t' `/ p+ E; H7 t
可存取 Windows 分享資料夾的使用者密碼: 123456
, a2 Y: g8 F" {- b9 a* r
. ~) v: P4 O. u, ]! s, `+ E
CentOS 掛載至本地端檔案系統: /mnt/shares
8 Q$ o7 |2 r4 m0 q, P( a% N7 M+ c
CentOS 帳號密碼檔: /home/user1/secret.txt
$ g7 j7 _4 T \5 y8 f
安全性權限設定: chmod 600 secret.txt
; d& m, a; f9 d, `) H
) L2 d q! L7 ]1 ]1 c, [
了解後我們修改檔案系統設定檔 /etc/fstab。
% R5 U8 @# @: _; b5 S& R3 P0 L
#vi /etc/fstab
# r' D2 x2 E# [" R, N
Q+ J9 L7 P2 C" X5 E
LABEL=/1 / ext3 defaults 1 1
( ]+ R" y( D" T' M+ r0 `1 P2 l
2 y3 m! T m3 T" N3 [1 B
LABEL=/home1 /home ext3 defaults 1 2
1 S9 d9 Q) x3 M% w
+ e: |3 K0 q$ o; I% K+ Z
LABEL=/tmp1 /tmp ext3 defaults 1 2
7 W" n$ a( }7 @& e. ]8 F2 @) O4 V
% O: k# T9 G1 D. x+ F
LABEL=/usr1 /usr ext3 defaults 1 2
" I# a( Q7 p$ T+ N% V* |
- Y/ {; S1 F0 T% c/ F' m+ U% L& G
LABEL=/var1 /var ext3 defaults 1 2
' x* c7 p: j# S
7 z$ {. F# W3 E6 r8 a9 K8 P* l3 j
tmpfs /dev/shm tmpfs defaults 0 0
2 s" W5 q' a2 c1 R7 W
0 R5 C2 G$ p: p# s" j
devpts /dev/pts devpts gid=5,mode=620 0 0
& p' P# R5 u) h+ x, w5 E
/ Y* t$ J3 D1 M+ e# V( o8 c% I
sysfs /sys sysfs defaults 0 0
- i5 E1 y o! C, g- {* E8 T P
* N9 o8 a" O8 |4 J
proc /proc proc defaults 0 0
6 V# s0 I' R5 y5 ~8 `& `
8 H) E3 w4 t4 k: a9 q
LABEL=SWAP-sda6 swap swap defaults 0 0
- ?4 k5 S3 A0 N1 |- }, p9 g
: v% d% K# Q. b1 _1 W* I' \) J
//user1-XP/Shares /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行
0 H/ f( d6 ^ h0 c
! `) H8 O# { `+ h
建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
' H# u8 ^% z. c
#vi /home/user1/secret.txt
( _2 E0 E) |; q5 s6 B7 r! n k0 u
3 l Y8 d# C& @. M) K' r
username=user1
" V5 K0 V$ Q+ M4 p
$ X* Y' X, j5 v5 i5 i$ \, [5 } M" [
password=123456
! T! P* N% f t5 h
4 H) E/ u t1 ~* V! p
設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
) z8 g* k; c: e2 ?) f
#mount -a //讀取 /etc/fstab 更新
8 _! P: I a b; \2 X1 r. I
/ d+ y9 `' Y2 B0 @* k1 p! @& S* L
#df -h //檢查是否成功存取 Windows 資源
& e% w6 ]6 @ a& G3 h% \+ O$ Y
" t& S- y- H% p& A: o
Filesystem Size Used Avail Use% Mounted on
& U& ^6 S/ \5 [5 n9 Y. Q" G+ p
# \" [1 q& C4 q9 g4 ^! C) c
/dev/sda1 9.7G 2.3G 6.9G 25% /
5 L ~+ \5 y6 _$ w: \2 b5 F- X7 A/ I
5 f0 `3 K9 c* [# T) v
/dev/sda7 414G 211G 183G 54% /home
9 u" s( ]4 j P+ v' v$ N$ z! s m
0 A0 V0 s3 H: U( F
/dev/sda5 4.9G 139M 4.5G 3% /tmp
; e$ ?! c4 p( U8 I
9 X7 D; H# r' k* m9 w* Q
/dev/sda3 9.7G 2.3G 6.9G 26% /usr
: Q4 v1 B/ ^ y0 J" Y8 O
1 H0 z Y. E- r2 O5 Y) W
/dev/sda2 9.7G 255M 9.0G 3% /var
3 m+ J3 H* J1 H, Y$ O6 k {& z
. K, w2 t7 ]6 j% X% q2 I0 m
tmpfs 2.0G 0 2.0G 0% /dev/shm
: H: q; B0 ]* O* b
5 T" a4 a* P" V4 l1 U: Q' }
//user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功
# h: g/ Y, |% z: _6 i' a
, V t6 i# r: c# h
[Troubleshooting]
7 E* b- e2 D- C7 T1 y
從client連到server端時出現error:
) p8 ~. X* g0 ^* L0 e8 }
samba mount error(110): Connection timed out
4 Q* a0 c6 R+ }7 O2 b
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445
- ?" Q7 l! W& r2 G1 @
|) {1 e2 `' M/ ]) c1 S
至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:
/ p7 t9 M0 j5 o7 x1 B- D' U
+ s0 f, [% x9 D7 s
用 yum 查一下有什麼 sshfs 相關的套件:
. Q& ~0 `) @' G6 g# j1 Y8 W' r
# yum search sshfs
, m7 E' W: T. \+ Q
=====================================================================
& W& |9 P' ^* w8 @* e; {
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
) q" Z# O( ~ X1 m
安裝sshfs:
" J' Z# I, ?* L5 p3 a4 `
#yum install fuse-sshfs
. T! I' d/ j! A8 R$ L) H2 N
建立掛載目錄:
: J- K: M+ t' }
#mkdir /mnt/temp
' ^6 U+ S L B
用sshfs 掛載遠端的目錄:
6 P6 L! k- W& |3 Y" q) H) D
#sshfs -p 22
[email protected]
:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
: E2 l" A; @$ V8 Y- S0 w) z! u
[email protected]
's password: //接著要你輸入遠端ssh root密碼
( v" M# [+ D4 e, Y) j& D7 L- n
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
" J6 [! _7 `' R0 |( V m
如果之前你有設定與主機 192.168.1.2
建立公鑰私鑰免密碼連線
,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便
6 C4 Y1 o: q5 [8 }9 k1 g
$ O& c8 [, g7 v t" Z4 s
帶上密碼而不用手動輸入密碼
C" J4 V+ H0 v. Z: E4 I4 z. F4 ]3 o7 N
#
sshfs -o ssh_command='sshpass -p my_password ssh'
-
o cache=yes,allow_other
-p 10022
[email protected]
:/root/ /mnt/temp
$ k7 P: s3 E) D! ? U, O
註:
如果掛載有問題,可以開啟 debug mode 觀察過程:
* j2 H! _2 D1 ]# g: R
sshfs -p 10022 -o sshfs_debug -o debug
[email protected]
:/ /mnt/temp
& R5 B0 V' Z2 N% K# G3 o
1 y/ j& s; {7 C/ ?! k* w' v
以一般帳號(非root)掛載時,出現error :
! m7 |, h; l' ?+ d8 e: h
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
4 X5 S5 i. n7 N/ W A4 [2 r
ls -l /bin/fusermount
& G5 s( W0 h2 y, {/ U% o
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount
3 @4 J: |$ V9 A) N& I
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse
( D) Y z. A; } c. n' B/ Y4 n6 v# D
3 _ b N c$ [ X. c6 @
可參考 :
在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統
SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)
+ W R7 A2 u! ]# s- a
3 B" f2 q1 ]: [6 g/ @3 j0 z4 {* t* P% o
1 c3 H* b9 e8 T2 ^
作者:
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