NAS是我覺得家里必不可少的一台設備,NAS 全稱 Network Attached Storage,即網絡附加存儲服務器,它通過自身的操作系統和 SMB/NFS/CIFS/FTP 等多種通信協議來給各種設備和平台提供數據的存儲、訪問和管理的服務,詳細可見百度、維基。而家用 NAS 廠家都給我們提供了友善的圖形化 Web 操作界面,定制化程度很高,可以很方便的進行服務部署、端口設置、權限管理等操作。主要品牌有群暉 Synology 和威聯通 QNAP 。
OpenWRT作為最靈活和強大的路由器操作系統,基於它搭建簡單易用的家庭網絡共享,可以滿足一般的日常使用。
下面我們看下如何使用OpenWRT搭建SMB家庭共享,實現基礎的共享功能。
Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它為局域網內的不同計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。通過設置“NetBIOS over TCP/IP”使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。
OpenWRT掛載完U盤/移動硬盤后,可以通過Samba實現局域網共享。
每次ssh登陸OpenWRT安裝新軟件時,都必須更新opkg
opkg update
前提
- 確定你已經連接、並掛載了U盤/移動硬盤。 掛載過程可參考上一章【OpenWRT 掛載U盤、移動硬盤】
2. 配置防火牆策略,保證137 、138 、139、445 端口是打開的。
vi /etc/config/firewall 增加以下內容 config 'rule' option 'src' 'lan' option 'proto' 'udp' option 'dest_port' '137-138' option 'target' 'ACCEPT' config 'rule' option 'src' 'lan' option 'proto' 'tcp' option 'dest_port' '139' option 'target' 'ACCEPT' config 'rule' option 'src' 'lan' option 'proto' 'tcp' option 'dest_port' '445' option 'target' 'ACCEPT' 保存並退出
安裝SMB服務
Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。Samba支持DOS、Windows、OS/2,Linux以及其他平台訪問。
opkg update opkg install samba36-server
/etc/init.d/samba enable /etc/init.d/samba start
配置SMB
Samba的配置文件為/etc/samba/smb.conf,但是我們配置時不應該直接編輯/etc/samba/smb.conf,而應該編輯/etc/samba/smb.conf.template文件。 因為每次samba重啟時,/ 配置為開機啟動etc/samba/smb.conf都會從/etc/samba/smb.conf.template重新創建,導致我們的配置丟失。
下面開始簡單的配置:
vi /etc/samba/smb.conf.template
例如要添加一個名稱為smb的共享,共享路徑為/smb2,允許匿名用戶讀寫操作,在/etc/samba/smb.conf.template 配置文件最下方增加如下信息:
[smb] path = /smb2 read only = no guest ok = yes create mask = 0750 directory mask = 0750
重新啟動samba
/etc/init.d/samba restart
訪問
完成如上配置,一個簡單的smb共享就完成了。
Windows 輸入 \192.168.1.1\smb Mac 系統輸入 smb://192.168.1.1/smb 既可以訪問到我們的smb共享,且不需要輸入密碼
如果在網絡上搜索‘ OpenWRT Samba ’,會發現很多文章的配置是不清晰的。一般會開始就上來讓你 修改配置文件/etc/samba/smb.conf,注釋掉 invalid users = root, 這其實是完全沒有必要的。 只有需要賬號密碼訪問時才需要這些操作。
看下如何正確的使用賬號密碼訪問smb共享
取消匿名訪問
如果想為我們的smb共享增加用戶名、密碼訪問功能。則需要如下設置
vi /etc/samba/smb.conf.template
將[global]中的invalid users = root注掉,guest ok = yes注釋掉,像下面的樣子:
[global] netbios name = OpenWrt display charset = UTF-8 interfaces = 127.0.0.1/8 lo 192.168.1.1/24 br-lan server string = OpenWrt unix charset = UTF-8 workgroup = WORKGROUP browseable = yes deadtime = 30 domain master = yes encrypt passwords = true enable core files = no guest account = nobody #guest ok = yes #invalid users = root local master = yes load printers = no map to guest = Bad User max protocol = SMB2 min receivefile size = 16384 null passwords = yes obey pam restrictions = yes os level = 20 passdb backend = smbpasswd preferred master = yes printable = no security = user smb encrypt = disabled smb passwd file = /etc/samba/smbpasswd socket options = TCP_NODELAY IPTOS_LOWDELAY syslog = 2 use sendfile = yes writeable = yes
同時將剛剛的smb共享部分調整如下:
[smb] path = /smb2 read only = no #guest ok = yes #注釋掉guest匿名訪問 valid users = root #允許root用戶訪問 create mask = 0750 directory mask = 0750
重啟
/etc/init.d/samba restart
這時我們發現//192.168.1.1/smb 無法直接訪問了,需要輸入用戶名密碼。 但是我們輸入用戶root 和它的密碼時仍然無法登陸。 那是因為需要單獨為samba設置用戶密碼。
smbpasswd -a root New SMB password: Retype SMB password:
/etc/init.d/samba restart
設置好密碼后 重啟 訪問 輸入密碼,是不是好了。 如果不想使用root用戶,可以參考如下步驟,創建新用戶,並為新用戶創建smbpasswd
User level access At user level access a username and password are needed to access the share. Steps: 1. Add user to system To access a samba share with user level access there must be a user added to the system. Edit /etc/passwd and add a line for the new user. Choose a user id (the first number in the line) of 1000 or higher that does not exist yet. Set the group identification number (the second number) to the same number as the user nobody. Copy the rest. root:!:0:0:root:/root:/bin/ash nobody:*:65534:65534:nobody:/var:/bin/false daemon:*:65534:65534:daemon:/var:/bin/false newuser:*:1000:65534:newuser:/var:/bin/false Note: keep in mind that the user(s) and group(s) utilized by Samba need to have the proper permissions for their shares, i.e. they need write access in order to write via smb. 2. Add samba password to user smbpasswd -a newuser 3. Change samba config to accept users with null passwords Edit /etc/samba/smb.conf.template and add null passwords = yes: [global] netbios name = |NAME| workgroup = |WORKGROUP| server string = |DESCRIPTION| syslog = 10 encrypt passwords = true passdb backend = smbpasswd obey pam restrictions = yes socket options = TCP_NODELAY unix charset = ISO-8859-1 local master = yes preferred master = yes os level = 20 security = user null passwords = yes guest account = nobody invalid users = root smb passwd file = /etc/samba/smbpasswd 4. Add a share Then add a share to /etc/config/samba. Make shure that guest ok is set to no config 'samba' option 'name' 'openwrt' option 'workgroup' 'WORKGROUP' option 'description' 'openwrt' option 'homes' '1' config 'sambashare' option 'read_only' 'no' option 'create_mask' '0700' option 'dir_mask' '0700' option 'name' 'name-of-share' option 'path' '/path/of/share' option 'guest_ok' 'no' This share should now be accessible by \\ip-adress-openwrt\name-of-share (windows, correct username and password are needed).
參考