如今,無論在家裡或者是辦公場所,不同的電腦之間共享檔案夾已不是什麼新鮮事了。在這種趨勢下,現代作業系統通過網絡檔案系統的方式使得電腦間資料的交換變得簡單而透明。如果您工作的環境中既有微軟的windows又有linux,那麼,一個共享檔案及目錄的方式便是通過一個跨平台網絡檔案共享協定:smb/cifs。windows原生的支援smb/cifs,linux也通過開源的軟體samba實作了smb/cifs協定。

在這篇文章中,我們将展示如何使用samba共享檔案夾。我們使用的linux平台是fedora或centos。這篇文章分為四部分。首先,我們在fedora/centos環境下安裝samba。接着,我們讨論如何調整selinux和防火牆配置以允許samba的檔案共享。最後我們介紹如何使用samba來共享檔案夾。
<a target="_blank"></a>
首先,安裝samba以及進行一些基本的配置。
檢驗samba是否已經安裝在您的系統中:
<code>$ rpm -q samba samba-common samba-client</code>
如果上面的指令沒有任何輸出,這意味着samba并未安裝。這時,應使用下面的指令來安裝samba。
<code>$ sudo yum install samba samba-common samba-client</code>
接下來,建立一個用于在網絡中共享的本地檔案夾。這個檔案夾應該以samba共享的方式導出到遠端的使用者。在這個指南中,我們會在頂層檔案夾'/'中建立這個檔案夾,是以,請確定您有相應的權限。
<code>$ sudo mkdir /shared</code>
如果您想在您的home檔案夾内建立共享檔案夾(例如,~/shared),您必須激活selinux中samba的home檔案夾共享選項,具體将在後面提到。
在建立/shared檔案夾後,設定檔案夾權限以保證其餘使用者可以通路它。
<code>$ sudo chmod o+rw /shared</code>
如果您不想其他使用者對該檔案夾擁有寫權限,您需要移除指令中的'w'選項。
<code>$ sudo chmod o+r /shared</code>
接下來,建立一個空檔案來測試。這個檔案可以被用來驗證samba的共享已經被挂載。
<code>$ sudo touch /shared/file1</code>
接下來,我們需要再次配置selinux。在fedora和centos發行版中selinux是預設開啟的。selinux僅在正确的安全配置下才允許samba讀取和修改檔案或檔案夾。(例如,加上'sambasharet'屬性标簽)。
下面的指令為檔案的配置添加必要的标簽:
<code>$ sudo semanage fcontext -a -t samba_share_t "<directory>(/.*)?"</code>
将替換為我們之前為samba共享建立的本地檔案夾(例如,/shared):
<code>$ sudo semanage fcontext -a -t samba_share_t "/shared(/.*)?"</code>
我們必須執行restorecon指令來激活修改的标簽,指令如下:
<code>$ sudo restorecon -r -v /shared</code>
為了通過samba共享在我們home檔案夾内的檔案夾,我們必須在selinux中開啟共享home檔案夾的選項,該選項預設被關閉。下面的指令能達到該效果。如果您并未共享您的home檔案夾,那麼您可以跳過該步驟。
<code>$ sudo setsebool -p samba_enable_home_dirs 1</code>
下面的指令用來打開防火牆中samba共享所需的tcp/udp端口。
如果您在使用firewalld(例如,在fedora和centos7下),接下來的指令将會永久的修改samba相關的防火牆規則。
<code>$ sudo firewall-cmd --permanent --add-service=samba</code>
如果您在防火牆中使用iptables(例如,centos6或者更早的版本),可以使用下面的指令來打開samba必要的向外的端口。
<code>$ sudo vi /etc/sysconfig/iptables</code>
<code>-a rh-firewall-1-input -m state --state new -m tcp -p tcp --dport 445 -j accept</code>
<code>-a rh-firewall-1-input -m state --state new -m udp -p udp --dport 445 -j accept</code>
<code>-a rh-firewall-1-input -m state --state new -m udp -p udp --dport 137 -j accept</code>
<code>-a rh-firewall-1-input -m state --state new -m udp -p udp --dport 138 -j accept</code>
<code>-a rh-firewall-1-input -m state --state new -m tcp -p tcp --dport 139 -j accept</code>
然後重新開機iptables服務:
<code>$ sudo service iptables restart</code>
後面的步驟用來配置samba以将本地檔案夾導出為samba共享檔案夾。
使用檔案編輯器打開samba配置檔案,并将下面的行添加到檔案的末尾。
<code>$ sudo nano /etc/samba/smb.conf</code>
<code>[myshare]</code>
<code>comment=my shared files</code>
<code>path=/shared</code>
<code>public=yes</code>
<code>writeable=yes</code>
上面在括号内的文本(例如,"myshare")是samba共享的資源的名字,它被用來從遠端主機存取samba共享。
建立samba使用者帳戶,這是挂載和導出samba檔案系統所必須的。我們可以使用smbpasswd工具來建立一個samba使用者。注意,samba使用者帳戶必須是已有的linux使用者。如果您嘗試使用smbpasswd添加一個不存在的使用者,它會傳回一個錯誤的消息。
如果您不想使用任何已存在的linux使用者作為samba使用者,您可以在您的系統中建立一個新的使用者。為安全起見,設定新使用者的登入腳本為/sbin/nologin,并且不建立該使用者的home檔案夾。
在這個例子中,我們建立了一個名叫"sambaguest"的使用者,如下:
<code>$ sudo useradd -m -s /sbin/nologin sambaguest</code>
<code>$ sudo passwd sambaguest</code>
在建立一個新使用者後,使用smbpasswd指令添加samba使用者。當這個指令詢問一個密碼時,您可以鍵入一個與其使用者密碼不同的密碼。
<code>$ sudo smbpasswd -a sambaguest</code>
激活samba服務,并檢測samba服務是否在運作。
<code>$ sudo systemctl enable smb.service $ sudo systemctl start smb.service $ sudo systemctl is-active smb</code>
使用下面的指令來檢視samba中共享的檔案夾清單。
<code>$ smbclient -u sambaguest -l localhost</code>
接下來是在thunar檔案管理器中通路samba共享檔案夾以及對file1進行拷貝複制的截圖。注意,samba的共享内容可以通過在thunar中通過 <code>smb://<samba-server-ip-address>/myshare</code> 這個位址來通路。
<b>原文釋出時間為:2015-0-01</b>
<b>本文來自雲栖社群合作夥伴“linux中國”</b>