IT_man 發表於 2017-9-3 21:06:35

Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)

1、安裝及設定
分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。

2、Samba Server
步驟1.安裝 samba 套件

利用 yum 指令來安裝 samba 套件。
#yum -y install samba    //安裝 samba 套件

***** 如果linux server 只單純當作 client端,那麼只需安裝smb client套件:
#yum install samba-client samba-common cifs-utils

步驟2.修改 samba 設定檔 (smb.conf)

修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
#vi /etc/samba/smb.conf//修改 samba 設定檔

global                                 //通用設定

netbios name = Linux-smb            //顯示於 Windows 網路芳鄰的電腦名稱

workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱

hosts allow = 127. 192.168.1.18      //允許此來源 IP 位址可存取 Samba 資源

hosts deny = ALL                     //除了上面允許的IP之外禁止其它IP存取Samba資源

security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入

encrypt passwords = yes                //是否對密碼部份進行加密

display charset = utf8               //Samba 上所顯示的編碼

unix charset = utf8                  //Linux 上所顯示的編碼

dos charset = cp950                  //Windows 用戶端的編碼 (可正確顯示中文)

home                                 //分享設定,屆時顯示分享資料夾的名稱

comment = Weithenn Samba Files Shares//分享資料夾的註解

path = /home                           //分享路徑

valid users = user1,@smbuser      //允許user1使用者及smbuse群組可存取資源

public = yes                           //允許使用者登入後可看到此分享資料夾

writable = yes                         //允許寫入

create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)

directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)


步驟3.建立 samba 帳號

設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 user1 的 samba 帳號。
#smbpasswd -a user1//建立 samba 使用者帳號 user1

New SMB password:      //輸入使用者帳號 user1 的 samba 密碼

Retype new SMB password: //再輸入一次使用者帳號 user1 的 samba 密碼

Added user user1.   //新增 samba 使用者帳號 user1 成功

新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
#cat /etc/samba/smbpasswd或者
#cat /var/lib/samba/private/smbpasswd
user1:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          : LCT-41CAF287 :

步驟4.啟動 samba 服務

在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
#chkconfig smb on

使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
#chkconfig --list |grep smb

smb             0 : off   1 : off   2 : on    3 : on    4 : on    5 : on    6 : off

完成上述設定後便可以啟動 smb 服務
#/etc/rc.d/init.d/smb start

Starting SMB services:                        

Starting NMB services:                        

檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
#netstat -tnl

Active Internet connections (only servers)

Proto Recv-Q   Send-Q   Local Address    Foreign Address    State

tcp      0      0   0.0.0.0:139          0.0.0.0:*    LISTEN

tcp      0      0   0.0.0.0:445          0.0.0.0:*    LISTEN

3、Samba Client
以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。

Windows Client

上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
驗證視窗欄位輸入: 使用者帳號: user1、使用者密碼: 123456。

若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):

方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
net use w: \\Samba_Server_IP\home

方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
net use w: \\Samba_Server_IP\home /user:user1 123456

CentOS Client

若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。

方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
mount.cifs //Samba_Server_IP/home /mnt/home -o

方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
mount.cifs //Samba_Server_IP/home /mnt/home -o username=user1,password=123456

若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
umount.cifs /mnt/home或
umount /mnt/home

4、CentOS 存取 Windows 分享資源
Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:

Windows 電腦名稱: user1-XP
分享資料夾名稱: Shares
可存取 Windows 分享資料夾的使用者帳號: user1 (請確定該使用者帳號存在於 Windows 機器內)
可存取 Windows 分享資料夾的使用者密碼: 123456

CentOS 掛載至本地端檔案系統: /mnt/shares
CentOS 帳號密碼檔: /home/user1/secret.txt
安全性權限設定: chmod 600 secret.txt

了解後我們修改檔案系統設定檔 /etc/fstab。
#vi /etc/fstab

LABEL=/1         /      ext3    defaults      1 1

LABEL=/home1      /home   ext3    defaults      1 2

LABEL=/tmp1       /tmp      ext3    defaults      1 2

LABEL=/usr1       /usr      ext3    defaults      1 2

LABEL=/var1       /var      ext3    defaults      1 2

tmpfs             /dev/shmtmpfs   defaults      0 0

devpts            /dev/ptsdevptsgid=5,mode=6200 0

sysfs             /sys      sysfs   defaults      0 0

proc            /proc   proc    defaults      0 0

LABEL=SWAP-sda6   swap      swap    defaults      0 0

//user1-XP/Shares/mnt/shares cifs user,uid=0,rw,suid,credentials=/home/user1/secret.txt 0 0 //加入此行

建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
#vi /home/user1/secret.txt

username=user1

password=123456

設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
#mount -a   //讀取 /etc/fstab 更新

#df -h      //檢查是否成功存取 Windows 資源

Filesystem            SizeUsed Avail Use% Mounted on

/dev/sda1             9.7G2.3G6.9G25% /

/dev/sda7             414G211G183G54% /home

/dev/sda5             4.9G139M4.5G   3% /tmp

/dev/sda3             9.7G2.3G6.9G26% /usr

/dev/sda2             9.7G255M9.0G   3% /var

tmpfs               2.0G   02.0G   0% /dev/shm

//user1-XP/Shares251G236G   15G95% /mnt/shares//存取 Windows 資源成功


從client連到server端時出現error:
samba mount error(110): Connection timed out
一般這都是防火牆的問題,包含server端跟client都要設定正確,尤其server端需開放port 139,client端需開放 port 445

至於 使用 sshfs 來掛載 別台主機上SSH server的檔案系統:

用 yum 查一下有什麼 sshfs 相關的套件:
# yum search sshfs
=====================================================================
fuse-sshfs.x86_64 : FUSE-Filesystem to access remote filesystems via SSH
安裝sshfs:
#yum install fuse-sshfs
建立掛載目錄:
#mkdir /mnt/temp
用sshfs 掛載遠端的目錄:
#sshfs -p 22 root@192.168.1.2:/root//mnt/temp   //-p port_number , 可以掛載遠端任一目錄,包含 / 根目錄
root@192.168.1.2's password:    //接著要你輸入遠端ssh root密碼
正常情況此時應該可以看到 /mnt/temp/內已經有些檔案了,而不是空的
如果之前你有設定與主機 192.168.1.2建立公鑰私鑰免密碼連線,你就可以省略輸入密碼的程序,而直接掛載遠端目錄,比較方便

帶上密碼而不用手動輸入密碼
#sshfs -o ssh_command='sshpass -p my_password ssh' -o cache=yes,allow_other -p 10022 root@192.168.52.4:/root/ /mnt/temp
註: 如果掛載有問題,可以開啟 debug mode 觀察過程:
sshfs -p 10022 -o sshfs_debug -o debug root@192.168.1.2://mnt/temp

以一般帳號(非root)掛載時,出現error :
fuse: failed to exec fusermount: Permission denied ==> 因一般使用者沒fuse的使用權限
ls -l /bin/fusermount
-rwsr-x--- 1 root fuse 32368 May 112016 /bin/fusermount
故 usermod -a -G fuse qqqbox 需加入群組才可使用 fuse

可參考 : 在 CentOS 上使用 sshfs 來掛載 SSH server 上的檔案系統   SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)


king383 發表於 2021-3-10 21:39:32

now the best way is to use WSL (Windows Subsystem for Linux)
頁: [1]
查看完整版本: Linux與Windows間共享資源 --- 架設 Samba 伺服器(或使用sshfs)