智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享)

对着背影说爱祢 提交于 2020-01-22 10:56:11

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
 

前提

  1. 确定你已经连接、并挂载了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).

参考

Samba How To

Samba (smb)

 

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。
转载请注明:文章转载自 「 微桔智居   http://wizju.com 
本文标题: 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!