Samba详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Samba详解相关的知识,希望对你有一定的参考价值。

一、Samba简介
二、安装
三、smb.conf详解
四、实验
五、其他

一、Samba简介
实现Windows和Linux之间互相共享资源
SMB:service message block:服务信息块,SMB协议在局域网上用于服务器文件访问和打印的协议
    cifs:common internet filesystem//CIFS是开放的SMB协议版本,由microsoft提供
SMB的windows实现:CIFS
SMB的linux实现:Samba
    
windows《========》linux //之间互相访问
Linux为samba server,
    win:使用cifs作为客户端访问
    linux:作为samba client访问

Linux client-------[samba/cifs]-----------[Linux/windows]-server
Windows client------[cifs/samba]------------[Linux/windows]-server
    
功能:
    1.文件系统共享
    2.打印机共享
    3.NetBios协议,linux主机拥有一个windows名称,共享在windows的网上邻居中    //让linux主机变成windows主机
    实现方案:
        peer/peer/:点到点,工作站模式
        domain mode:域模式
    
二、安装        
1.yum安装
yum info smaba-client //linux可以访问windows的共享
yum -y install samba
    /usr/sbin/nmbd  //名称服务,NetBIOS,实现windows访问linux
    /usr/sbin/smbd    //文件共享,提供smb/cifs服务
    /etc/pam.d/samba //samba可基于pam认证
    
    /usr/lib/systemd/system/nmb.service
    /usr/lib/systemd/system/smb.servic    
    
    rpm -ql samba-common //提供配置文件
        /etc/samba/smb.conf
        /etc/samba/lmhosts //主机映射NetBIOS
yum -y install samba-client
    smbclient:交互式的命令行客户端
    mount -t cifs
        smb: 139,445/tcp
        nmb: 137,138/udp
        
2.samba简单配置:smb.conf
两类配置段
全局配置:
    [global]

每共享的专用配置:
    [共享资源的共享名称]
    directive = value

    [home] //用户的家目录
    [printers] //打印机
        
实现:
    [samba]
        comment = ftp root
        path = /tmp/samba
        browseable = yes
        guest ok = yes
        writable = no
    testparm   //samba-common-tools 提供的语法测试工具
    systemctl reload smb
    
访问smaba共享
    Linux:
        smbclient:交互式
        mount -t cifs 挂载
windows:
    浏览器:  \\Host or IP\shared_source_name
    win+e:空白处[右键]->添加一个网络位置[\\192.168.2.112\samba]
windows:
    删除网络位置
        上面-->工具--->断开网络驱动器即可
        
    smbclient //192.168.4.118/samba  //回车即可,匿名访问

smbclient -L 192.168.4.118 //查看目标主机共享资源,可以匿名查看,回车即可

Server               Comment
---------            -------
WOLF                 Samba 4.4.4    //WOLF是主机名NETBIOS的主机名
Workgroup            Master
---------            -------
MYGROUP              MT
SAMBA                WOLF

三、smb.conf详解

[pzk]                                      # 自定义共享名
comment = Home Directories                 # 描述符,是给系统管理员看的
path = /tmp                                # 共享的路径
public = yes                               # 是否公开,也就是是否能在网上邻居看到该共享
browseable = yes                           # 共享的目录是否让所有人可见
writable = yes                             # 是否可写
guest ok = no                              # 是否拒绝匿名访问,仅当安全级别为 share 时才生效
workgroup = WORKGROUP                      # 工作组,要设置成跟 Windows 的工作组一致
server string = Samba Server Version %v    # 其他 Linux 主机查看共享时的提示符
netbios name = MYSERVER                    # 用于在 Windows 网上邻居上显示的主机名
hosts allow = 127. 192.168.12. 192.168.13. EXCEPT 192.168.13.13   # 指定允许访问 samba 服务器的主机    
security = share                           # 定义安全级别;取值为{share,user,domain}
    share:匿名共享
    user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是OS用户,但密码为samab密码
    domain:使用DC进行用户认证;后面的--Domain Controler Options--将会生效
log file = /var/log/samba/log.%m           # 定义日志文件,每个访问的主机会产生独立的日志文件,%m 是客户端主机名
max log size = 50                          # 定义单个日志的最大容量(KB)
passdb backend = tdbsam                    # Samba 用户的存储方式,smbpasswd 表示明文存储,tdbsam 表示密文存储
deadtime = 10                              # 客户端在10分钟内没有打开任何 Samba 资源,服务器将自动关闭会话,在大量的并发访问环境中,这样的设置可以提高服务器性能
display charset = UTF8                     # 设置显示的字符集
max connections = 0                        # 设置最大连接数,0表示无限制,如果超过最大连接数则拒绝连接
guest account = nobody                     # 设置匿名账户为nobody
load printers = yes                        # 是否在启动 Samba 时就共享打印机    
cups options = raw                         # 设置打印机使用的方式
valid users = user1 user2    user3         # 指定哪些用户可以访问,如果不指定则所有用户都可访问
invalid users = user1 user2                # 指定哪些用户不可以访问
create mask = 0775                         # 客户端上传文件的默认权限
directory mask = 0775                      # 客户端创建目录的默认权限
write list = user1 user2 user3             # 设置可对文件进行写操作的用户
admin users = user1                        # 设置共享目录的管理员,具有完全权限    
unix charset = UTF8                           #当前Linux主机所用的字符集
dos charset =                                #windows端的字符集;gbk,gb2312等
passdb backend = tdbsam                //密码文件,tdbsam是一种非常安全的文件格式
cups options = raw                     //cups:通用unix打印机选项

共享配置:

    [共享名称]:此即为共享的服务名
    comment:注释信息
    path:此共享对应本地fs路径
    browseable:是否可浏览,是否可被所有用户看到
    writable:是否可写//
    read only: //谁在后面,谁最终生效
    writelist //可写用户列表或组列表
        用户名
        @组名
        +组名
    guest ok //是否允许来宾账号访问
    public //是否是公开的服务    //public = no 或者guest ok = no就关闭了来宾账号

可用的宏列表:

    %m :客户端主机的NetBIOS名称
    %M :客户端的internet主机名,即HOSTNAME
    %H :当前用户的家目录
    %U:当前用户的用户名
    %g:当前用户所属的组名
    %h:当前SAMBA主机的hostname
    %I:client端的ip
    %T:当前的日期时间

四、实验
基于用户做认证
    [home] //定义了用户是否能够访问自己的家目录
        browseable = no //每一个用户的家目录,不能被别人浏览
密码生成工具:smbpasswd,pdbedit
man smbpasswd
    -a //添加os用户为samba用户
    -e-d //enable/disable该用户
    -n //set-no-password,不设置密码
    -x //删除该用户
smbpasswd -a wolf //添加该用户
smbclient //192.168.4.118/samba -U wolf //
smbclient  -L 192.168.4.118 -U wolf //browseable = no 在这里是看不到的
pdbedit命令:
    类似于smbpasswd,管理本地用户成为samba用户
    -L //列出samba用
    -a //添加samba用户
    -u //指定用户名
    -x :删除该用户
    -r 修改用户的相关信息
    pdbedit -a -u wolf //添加wolf为samba用户
smbstatus:显示连接状态信息
    -b 简要信息
    -v 详细信息
    
实验一:权限测试    

[tt]
    comment = Test for test
    path = /tmp/test
    browseable = Yes
    guest ok = Yes
    writable = Yes        //定义所有用户可写,和write list只需一项就可以了         
    write list = @test    //定义哪些用户可写  
    注意:writable和write list不应该同时写

groupadd test
testparm
usermod -a -G test wolf //添加该用户到test组
    
client:
    smbclinet //192.168.4.118/tt -U wolf //测试
    get //可以下载文件,但是不能上传
    put //提示:NT_STATUS_ACCESS_DENIED opening remote file \resolv.conf
    
server:
    setfacl -m g:test:rwx /tmp/test/
    客户端再次put就可以实现了
    
windows访问:
    \\192.168.4.118\tt  //即可实现连接
    
    mount -t cifs //192.168.4.118/tt -o username=wolf /usr/tt
    mount -t cifs -o username=wolf,password=testwolf //192.168.4.118/tt /usr/smb/
    
实验二:权限测试
创建一个共享data,路径为/ftp/data
要求仅centos和fedora能上传文件
此路径队其他用户不可见
s:
    mkdir -pv /ftp/data
    vim /etc/samba/smb.conf

    [data]
            comment = DaTA
            path = /ftp/data
            browseable = Yes
            write list = centos,gento
            public = no //禁止来宾账户访问 smbclient  //192.168.4.118/data不输入账户名和密码将不能登录

    testparm
    
    useradd centos
    echo centos | passwd --stdin centos
    useradd fedora
    echo fedora | passwd --stdin fedora
    
    setfacl -m u:centos:rwx /ftp/data/
    setfacl -m u:fedora:rwx /ftp/data/    
        
    systemctl restart  smb
C:
    smbclient -L 192.16    8.4.118
    smbclient  //192.168.4.118/data -U fedora //可以上传
        
问题1:挂载mount 失败
    mount: block device //192.168.4.118/tt is write-protected, mounting r
    mount: cannot mount block device //192.168.4.118/tt read-only
    mount -t cifs -o username=wolf,password=testwolf //192.168.4.118/tt /usr/smb/

实验三:windows的共享设置
    右键该目录:共享-->共享[添加用户--读取/写入]
    smbclient -L 192.168.4.107
    mount -t cifs -o username=wolf,passwd=wolf //192.168.4.107/test /usr/win/
    
注意:NT_STATUS_LOGON_FAILURE
    原因:没有敲回车,使用匿名登录
    或者:samba和系统中同时有该用户,没有把该用户加入到smaba账户
            
    最终权限取决于:共享权限+fs权限

五、其他
winbind:在办公环境中一般windows AD域占据霸主地位,针对生产环境的linux集群机器才会选择LDAP,不过有时候在办公环境中也混杂了linux机器,为了规范管理,需要把linux机器加入window是 AD中的。
linux加入windows AD中方便操作的有两种方案(分为centos/ubuntu两种情况)。
1 likewise-open
    在debian/ubuntu中使用,可以使用apt安装,配置方便,但是由于likewise的公司被收购,likewise的相关产品不再是开源产品,更杯具的是网上连以前的源码包都找不到,还好ubuntu中目前还是可以通过apt安装的。
2 winbind+samba
    在centos上采用winbind+samba方案。
    
针对其他的命令请自行了解

[[email protected] ~]# rpm -ql samba-client
/usr/bin/findsmb
/usr/bin/nmblookup
/usr/bin/rpcclient
/usr/bin/sharesec
/usr/bin/smbcacls
/usr/bin/smbclient
/usr/bin/smbget
/usr/bin/smbprint
/usr/bin/smbspool
/usr/bin/smbta-util
/usr/bin/smbtar
/usr/bin/smbtree
[[email protected] html]# rpm -ql samba-common |egrep -v "share|lib|log"
/etc/samba/lmhosts
/etc/samba/smb.conf
/etc/sysconfig/samba
/usr/bin/net
/usr/bin/pdbedit
/usr/bin/profiles
/usr/bin/smbcontrol
/usr/bin/smbcquotas
/usr/bin/smbpasswd
/usr/bin/testparm
[[email protected] html]# rpm -ql samba |egrep -v "share|log|.so"
/etc/openldap/schema/samba.schema
/etc/pam.d/samba
/etc/samba/smbusers
/usr/bin/mksmbpasswd.sh
/usr/bin/smbstatus
/usr/sbin/nmbd
/usr/sbin/smbd


以上是关于Samba详解的主要内容,如果未能解决你的问题,请参考以下文章

samba 4.7.16 安装配置详解

samba 配置参数详解

Linux下的samba服务配置详解

Samba文件共享服务器搭建详解

Linux中samba共享服务的部署及安全优化详解

Samba 配置文件详解