標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs) [打印本頁] 作者: IT_man 時間: 2017-9-3 21:06 標題: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs) 1、安裝及設定 , m' [! p8 z* ]分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。 6 v. U1 \4 M+ U8 b2 f 4 H& {! d# R E& f8 ?: e: b8 S' M2、Samba Server; |3 b. D- R9 q: d# ?' H! E
步驟1.安裝 samba 套件7 G+ _: S4 t. S" T+ [. p# h0 ?9 M
$ G; R6 _" f" M
利用 yum 指令來安裝 samba 套件。 + ]8 K9 P( B* a- y8 F" S#yum -y install samba //安裝 samba 套件: d* `' G5 @- w$ Z. M* T
' e- S1 G8 J0 S: D7 \2 c: O5 J [( v& w
***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件: . Z7 |) C" o) t0 j! z2 P T
#yum install samba-client samba-common cifs-utils " }9 F+ l2 f4 H+ b0 G' L3 \ G0 w9 C! L* Z. ]% D步驟2.修改 samba 設定檔 (smb.conf) 2 c% O" s4 m9 V2 T! Y- ]" ^ l6 C; F' i0 d" T
修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。 0 d# T$ i3 R4 }. L; r$ _' y' l8 }#vi /etc/samba/smb.conf //修改 samba 設定檔6 _7 {1 b7 T( F- I" h
8 f. q# g& Q0 q/ i8 A0 _1 Q global //通用設定 & ]- j# h. A& s- U7 W! r! F. |2 N, P$ } y5 R4 V2 m$ N3 w, D! H& U0 S
netbios name = Linux-smb //顯示於 Windows 網路芳鄰的電腦名稱7 `: p7 e Z4 q1 y
3 H1 Z5 G( e/ I% Q+ w: e; g workgroup = WORKGROUP //顯示於 Windows 網路芳鄰的工作群組名稱 4 ~/ l$ J0 u; ?( P: c8 i0 ?! O 0 }* b6 T4 w3 r hosts allow = 127. 192.168.1.18 //允許此來源 IP 位址可存取 Samba 資源 3 r8 ]! U8 F% e' W' e: ^5 d2 E& N$ R* q2 n
hosts deny = ALL //除了上面允許的IP之外禁止其它IP存取Samba資源4 F$ c+ c! s4 h- q/ D9 |5 \2 c
! p( g" l+ B) n4 h) l
security = user //安全等級user需在Samba主機上擁有帳號者才可登入 6 @9 l7 U4 X9 J. X7 Y) P; G5 q C V% Z2 F+ D- T. ~ encrypt passwords = yes //是否對密碼部份進行加密 , T% o9 s- W# o3 e h8 ^" Q ! _" y( b0 H' y O display charset = utf8 //Samba 上所顯示的編碼 * Y/ p6 X6 X/ ?( z5 P% c+ B( H$ ~# ^4 o7 Y: t% S \
unix charset = utf8 //Linux 上所顯示的編碼4 a/ m0 o8 R P" ]3 Z4 L+ i& {
$ B( K+ u" x% p X4 [5 d1 ~
dos charset = cp950 //Windows 用戶端的編碼 (可正確顯示中文)4 z% O( i$ v( s; m* e0 I
* d; J4 x8 z4 e
home //分享設定,屆時顯示分享資料夾的名稱' P8 |; Z8 B7 i1 X n
% X, F f' W- m comment = Weithenn Samba Files Shares //分享資料夾的註解: o: k/ y' h8 G1 ^6 W4 v c) n, e9 U5 N
9 n0 q6 ~4 f% s5 l" x path = /home //分享路徑 1 R1 N/ P. R1 R. @) h+ ~8 n* N3 R) m+ l0 ?9 m- |" `! M0 k3 F
valid users = user1,@smbuser //允許user1使用者及smbuse群組可存取資源 ' j8 r! n! t. z" S* J! \: r; Y $ M9 z4 _3 {9 r public = yes //允許使用者登入後可看到此分享資料夾 3 m# Q6 e+ X" p3 o$ A ' X6 F1 G% E' V+ ~- g- P/ H writable = yes //允許寫入, _; Y3 f. F8 p$ `' [1 {, K1 Y0 V; o
0 l4 h+ H5 w- i# \5 l
create mode = 664 //建立檔案的權限 (該檔案在 Samba 中權限為 664)) F3 l9 d7 c3 X" e& v
2 P+ T( y1 T9 t0 S+ \- t3 E9 E
directory mode = 775 //建立資料夾的權限 (該資料夾在 Samba 中權限為 775) 4 s. B, m7 ^ x4 C: ~ ; b* k+ j0 X* t* W/ U/ n! c, h0 k$ i N2 `9 c5 G" Z& n1 `0 P( ^
步驟3.建立 samba 帳號8 R5 y! c: r5 p/ @
8 H! ^& w* X9 t6 K2 v# Y% Z* D
設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。 $ `9 }) S3 e5 ?% t6 W#smbpasswd -a user1 //建立 samba 使用者帳號 user1 g/ v& M8 S- Y; z+ a) ~ 3 N. w" h8 S { New SMB password: //輸入使用者帳號 user1 的 samba 密碼3 E! j {' Z: s' W! K
9 O: M$ W+ V2 s Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼/ g3 d, {$ z% y7 o0 k
* M5 R( t; |+ e0 H
Added user user1. //新增 samba 使用者帳號 user1 成功 6 q6 Z0 V' `! w- d7 E) J, v# ^9 i. N. l; e. W
新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過 2 _4 |9 }/ F# M/ E0 M#cat /etc/samba/smbpasswd 或者 ! F! U4 J5 Z3 [( C! ?/ B& E6 I* j7 E#cat /var/lib/samba/private/smbpasswd v$ i1 W1 A5 y1 v! D user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U : LCT-41CAF287 :8 I& j3 e" }( t
3 v9 }" f* ~: P smb 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off + a0 n; z" [1 H' ?% j8 R 2 a0 T }( h! U4 f完成上述設定後便可以啟動 smb 服務4 M5 D" ? J9 x& e
#/etc/rc.d/init.d/smb start q% w1 d* a. s* Q9 R5 W: ]3 e
) j f1 r+ i% p& H$ o" R Starting SMB services: [OK] . {" D @" N8 }( u0 x$ D/ p: A
* g2 F4 e& y3 K7 x3 n, O3 ^
Starting NMB services: [OK] / j% p& B7 f( L$ i' n
" _- B8 A0 z6 i* W0 H. z9 ~
檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。 " H) C6 H' X0 j1 K! ]#netstat -tnl ! K" h# h: n' G$ t( X6 g% \6 F3 A! d 0 }( R- p9 c* v' e8 m$ {4 U Active Internet connections (only servers) - m* y7 K/ K; @8 b( F5 d6 n8 ?+ q/ C% m8 K
Proto Recv-Q Send-Q Local Address Foreign Address State : q/ S9 n' M( n8 x+ C# h2 g( M0 {+ B
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN ' m) S7 F/ [+ { h ( b5 V7 |: N$ e tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN9 w/ e+ a6 ~; [$ L# y2 j7 w
) ^: W! j3 a( |: H& ]
3、Samba Client" s) ]9 u% t+ w1 Z8 T, K( o5 o2 | [
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。9 ?3 m! C! ~- D( o- ~
- R L- Q5 W+ I# G) t+ J1 M
Windows Client $ N' s( @ l+ U& d# M7 [8 [3 U- z; t* u# M1 }& g+ H( ~
上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下: f# L2 f) S8 a. g5 J) @ a# j! P3 k3 `
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。* m' B4 g6 g2 E3 T
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。. N6 Q& L9 q1 P0 ]7 U
4 b9 B8 v) i; X2 x+ b /dev/sda5 4.9G 139M 4.5G 3% /tmp; B3 c# G) J) ~! i
' ]% Y5 S% Y5 B/ m, [% \; X
/dev/sda3 9.7G 2.3G 6.9G 26% /usr & `5 V e0 K( T8 N1 N' g 8 W2 y9 E. o( T q/ }6 s& k! J5 Y /dev/sda2 9.7G 255M 9.0G 3% /var - z1 `: V* W0 U& c9 t5 P ( S) b) E! S6 Z0 H7 v& H' E tmpfs 2.0G 0 2.0G 0% /dev/shm$ b: W; p5 E: q. l
! u3 p4 [6 F0 O //user1-XP/Shares 251G 236G 15G 95% /mnt/shares //存取 Windows 資源成功 - ^# ^( @* Q8 P 2 P& ]; [1 t6 J0 ~! |[Troubleshooting]# U& a- I- H# |2 ]0 {4 N0 |) g) x
從client連到server端時出現error: 1 }: E- q% A* b# Wsamba mount error(110): Connection timed out 2 W! q5 M! r1 R V+ F一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445" a$ d8 g' B! a& f5 w
- V5 m' Y! a; j$ ^" [ 至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:0 i9 [! v; P( J" C2 ?* H U* k
/ r* R* D2 e$ L, d/ ?% r1 q
用 yum 查一下有什麼 sshfs 相關的套件:$ I! C: K7 H, }/ J3 Q3 k$ w" d' s
# yum search sshfs- Q6 Y3 h% ^/ ~1 q" N
===================================================================== ( t$ L: Y2 l+ H+ N7 L0 Tfuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH : m% f% M5 C6 F2 f# G2 @' f- ]; ^安裝sshfs: O8 P4 _* f3 V# e7 n3 ^$ z
#yum install fuse-sshfs 0 ~$ C( }' K8 C. i) U/ l7 R! y+ x建立掛載目錄: 0 j6 D/ E9 ]4 x#mkdir /mnt/temp 0 |+ U; \. A4 w @3 E用sshfs 掛載遠端的目錄: ; u. L. ]* H) W3 o% j#sshfs -p 22 root@192.168.1.2:/root/ /mnt/temp //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄 $ P* l1 d- d& N: A9 Mroot@192.168.1.2's password: //接著要你輸入遠端ssh root密碼5 |8 s4 c p" g0 ~% U z
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的) x0 e% ?; b0 a" C2 m' P
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便8 V6 v# g A! u( y, m
( U# N, S9 r/ a9 n6 \, H. O) T- T帶上密碼而不用手動輸入密碼9 R) j ?1 B- S! u1 n
#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp: Z, i+ n& C& V; T
註: 如果掛載有問題,可以開啟 debug mode 觀察過程: : Z! {, f# G( t3 @1 msshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2:/ /mnt/temp ( t, V- H' O% u% t0 J/ H: s% \9 p6 o, V$ X% x
以一般帳號(非root)掛載時,出現error : & h4 i @# X9 E+ V" \- }) Hfuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限 " T* j$ h9 {2 f8 b# cls -l /bin/fusermount8 L0 o; G/ F) }# L9 x$ a
-rwsr-x--- 1 root fuse 32368 May 11 2016 /bin/fusermount. { I# p p( h' e! R
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse 8 M0 Q; G: V- } ^ B I% D& Q/ X. c/ r( {- z# r D
可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)' c6 c. Q5 m5 Z: C& m9 P* ]2 L& ]2 M
7 n o% M9 J+ @+ t8 s$ L' A
' x9 o8 q) \' ~2 T, \作者: king383 時間: 2021-3-10 21:39
now the best way is to use WSL (Windows Subsystem for Linux)作者: hoteddy0507 時間: 2022-3-18 16:28
原來如此