Samba 網路芳鄰伺服器雜記

之前在配置這台CubieTruck時,頭一個設定的就是 Samba Server。因為那時要準備的服務很多,就沒多花心思在這上面,心想能運行就可以了。現在回頭看看之前的配置才發現,的確是草率了一些。現在補上一些文件以供後人使用參考。

首先安裝完  Samba 套件之後,一些重要的設置檔案都在 /etc/samba 目錄底下,裡面最重要的就是 /etc/samba/smb.conf 這個檔案了,幾乎所有的設置都在裡面,所以更改後要先使用 testparm 測試一下是否有問題,然後再重新啟動服務。

#testparm
#service smbd restart

在講/etc/samba/smb.conf檔案之前,我們得說說使用者密碼。Samba使用者帳號和密碼是與Linux本身的帳號系統分開的,所以必須另外設置,而且帳號密碼系統有兩套,必須先看看 /etc/samba/smb.conf 裡面 passdb backend是什麼來決定。新的 Samba 應該都是採用 tdbsam了,不會把密碼明碼方式寫到 smbpasswd檔案裡面了,所以建議各位把passdb backend改為 tdbsam。

passdb backend = tdbsam

如果改用tdbsam 帳號密碼系統後,那麼你要用 pdbedit 來處理新增帳號,密碼之類的。以下列舉其語法:

命令 功能
pdbedit -L 列出使用者列表。
pdbedit -Lv 列出詳細的使用者列表。
pdbedit -Lw 列出同 smbpasswd 格式的使用者列表。
pdbedit -a user 新增 user 這個帳號。
pdbedit -x user 刪除 user 這個帳號。
pdbedit -c "[D]" -u user 暫時停用 user 這個帳號。
pdbedit -c "[]" -u user 恢復使用 user 這個帳號。

例如新增一個叫 linaro 使用者的話,那麼就得輸入

pdbedit -a linaro

之後會讓你確認密碼的。之後就可以使用 pdbedit -Lv 來查看新增使用者的狀況。

我想很多人都忽略這一點,但是系統卻跑的好好的,其實真正的原因是 Samba 系統根本沒設好權限,所以連 guest 都可以使用。所以我們講講 /etc/samba/smb.conf 這個檔案的設定吧!

第一個部分就是 [global] ,屬於全域設定的參數。

參數 說明
workgroup 類似微軟網路芳鄰所採用的工作群組。
server string 主機的註解說明。
netbios name 主機的 NetBIOS 名稱,在同一工作群組中必須是唯一,否則會衝突,在微軟系統裡面可以採用 \\name來存取。
log file 登錄檔的存放位置。
max log size 登錄檔的最大容量 (單位:KBytes),若大於此容量,登錄檔會被取代掉。
security = share 使用者不需輸入帳號與密碼,即可登入 SAMBA 伺服器。
security = user 預設安全等級,使用者必須先輸入帳號與密碼,經 SAMBA 伺服器驗證通過後,才可登入使用分享的資源。
security = server 使用者需經登入驗證程序,但驗證工作會由另一台指定的 SAMBA 伺服器或 Windows 伺服器執行。
security = domain 若 SAMBA 伺服器要加入網域而非工作群組,則可使用此等級。使用者登入驗證工作則由網域中的 Windows 伺服器來執行。
security = ads 若 SAMBA 伺服器要加入網域,並使用 AD 目錄服務,則可使用此等級 (SAMBA 3.0 以上版本)。
encrypt passwords 等於 Yes 表示密碼要加密。
smb passwd file 密碼存放檔案,預設是 /etc/samba/smbpasswd。
passdb backend = smbpasswd 代表採用舊方式管理帳號密碼
passdb backend= tdbsam 代表使用pdbedit方式管理帳號密碼。
hosts allow 代表可以存取的機器範圍,可以更嚴格地管理機器能存取 Samba Server,例如 hosts allow=192.168.1.0/24

然後後面要分享的資料夾每一個都以 []包括著,例如我要在網路芳鄰中看到 sdcard 這個目錄,那麼一開頭就要寫 [sdcard]來表示,後面帶下面參數。

參數 說明
comment 註解,沒有設定沒有關係。
path 共用目錄在 Linux 主機的實際路徑。
public 是否讓登入者看到此分享目錄。
readonly 是否唯讀。
writable 是否可以寫入。若與 readonly 設定值相抵觸,以最後出現的設定為主。
browseable 是否可以讓微軟網路芳鄰看到。
create mode 設定新建檔案的預設權限。
directory mode 設定新建目錄的預設權限。
valid users 白名單,指定可以使用此分享目錄的使用者。
invalid users 黑名單,指定不可以使用此分享目錄的使用者。
force user 強制轉換成某個使用者
force group 強制轉換成某個族群

範例:

[sdcard]
path = /mnt/sdcard
available = yes
browseable = yes
writable = yes
guest ok = no
valid users = linaro, paulwang
create mask = 0755
directory mask = 0755
force user = root
force group = root

如果修改好之後,記得一定要先用 testparm 測試看看哪個地方是否有錯。若確定無誤,方能重起服務。

#testparm
#service smbd restart

CubieTruck 掛載 Samba 發生CIFS VFS: default security mechanism requested 訊息

不知道是不是最近升級 Ubuntu 13.10 時才發生的,反正最近一直在看 log,像是 /var/log/syslog,/var/log/kern.log,/var/log/apache2/error.log,記錄裡面多出一行

CIFS VFS: default security mechanism requested. The default security mechanism will be upgraded from ntlm to ntlmv2 in kernel release 3.3

大約是在講 CubieTruck 用 CIFS 掛載 Windows 網路芳鄰 Samba 資料夾有一些設定不太符合系統期望,但是我還是可以掛載成功。但是總覺得是要知道原因,所以我找了一下當初掛載 Windows 網路芳鄰 Samba 資料夾的命令

mount -t cifs -o file_mode=0777,dir_mode=0777,uid=1000,gid=1000,username='accountName',password='password' //192.168.1.xxx/FolderName /mnt/smb

上面的accountNamepassword代表登入遠端Windows 網路芳鄰帳號密碼,以及路徑 //192.168.1.xxx/FolderName 都因人而異。我在猜想會發生這個訊息是否因為我們把帳號密碼用明碼方式寫出來,可能會導致不安全的問題(別人可以讀取像是 /etc/fstab檔案內容)。所以我們必須做一些修正。

首先在自己家目錄,應該就是 /root 目錄底下創建一個檔案,檔名可以自己取,我自己把它命名為 .credentials,記住屬性必須是 0600,只有自己可以讀寫,這樣別人才看不到啊!

-rw------- 1 root root 100 Jan 1 00:00 .credentials

然後再用編輯器編輯 .credentials 檔案填入下面訊息,

username=accountName
password=password
domain=WORKGROUP

其中,accountNamepassword是你遠端 Windows 網路芳鄰 Samba 資料夾可以登入(最好有可以寫入權限)的帳號和密碼,路徑是 //192.168.1.xxx/FolderName,然後把掛載命令改為

mount -t cifs //192.168.1.xxx/FolderName /mnt/smb -o file_mode=0777,dir_mode=0777,uid=1000,gid=1000,credentials=/root/.credentials

然後看看 log ,是不是 CIFS VFS: default security mechanism requested. The default security mechanism will be upgraded from ntlm to ntlmv2 in kernel release 3.3 警告訊息消失了呢?

tail /var/log/kern.log

Samba Server檔案名稱排序問題

最近老婆大人迷上了韓劇”來自星星的你”,所以我把所有的檔案都捉下來到CubieTruck裡面,本來是想邀功一下,說這台機器比起之前那台好多了。結果,悲劇了…

連是沒有問題,但是Samba Server送出來的檔名順序好像是隨機的,不像之前用Windows的網路芳鄰一樣,照著檔名順序排下來的,關於這點,老婆大人表示很不滿意。

所以又上網找了一下資料,Samba Server是有支援檔名排序的,但是要編輯 /etc/samba/smb.conf 檔案,在 [global]這個設定裡面增加

[global]
vfs objects = dirsort #預設值沒有,必須自己增加

記得要重新啟動 Samba Server

service smb restart

CubieTruck請您不要再讓我出糗了,拜託拜託。

如何讓CubibeTruck掛載Window的網路芳鄰資料夾

因為想要把CubieTruck的一些資料給備份起來,所以點子又想回Windows了。如果在固定時間(Crontab)把某些資料 rsync 到 Windows的網路芳鄰資料夾裡面,看起來比較保險,正所謂狡兔有三窟嗎!

所以立刻試了一下 mount -t smbfs …..

啊?出現?unknown filesystem type ‘smbfs’,無所不能的 Linux 竟然不認識 smbfs這種檔案系統,這有點不可思議。所以上網查了一下,原來 smbfs 已經荒廢不用了,現在都改用 cifs 了,所以立刻安裝 cifs 到 CubieTruck

apt-get install cifs-utils

不一會兒就安裝好了,現在就著手來掛載 Windows 的網路芳鄰吧!假定

1. Windows的網路芳鄰路徑為 //192.168.1.100/share –> 不要告訴我不知道,你用別台機器連進去,檔案總管出現那些目錄就是啦

2. CubieTruck 掛載點 /mnt/smb ;如果沒有,自己 mkdir 一下,看你想掛到哪個地方。

命令就是

mount -t cifs -o username='你的Windows可以登入的帳號',password='搭配剛才Windows帳號的密碼' //192.168.1.100/share /mnt/smb

這樣就大功告成了,測試一下,cd /mnt/smb,哇,連中文檔名都可以顯示,不必指定 iocharset=utf8了。再來 mkdir test,成功,也可以寫入。那就可以好好研究一下 rsync 了。

p.s. 是不是要寫入 /etc/fstab ,正在考慮有沒有這個必要。