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 //查看目标主机共享资源,可以匿名查看,回车即可

1
2
3
4
5
6
7
Server               Comment
---------            -------
WOLF                 Samba 4.4.4     //WOLF 是主机名NETBIOS的主机名
Workgroup            Master
---------            -------
MYGROUP              MT
SAMBA                WOLF

三、smb.conf详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[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打印机选项

共享配置:

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

可用的宏列表:

1
2
3
4
5
6
7
8
     %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 详细信息
    
实验一:权限测试    

1
2
3
4
5
6
7
8
[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

1
2
3
4
5
6
     [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方案。
    
针对其他的命令请自行了解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@wolf ~] # 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
[root@wolf 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
[root@wolf 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










本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/2065710 ,如需转载请自行联系原作者
相关文章
|
JavaScript Apache 前端开发
|
Ubuntu 网络协议 安全
|
网络协议 Ubuntu 安全
|
安全 Linux Shell
|
安全 网络协议 Linux
|
Linux 数据安全/隐私保护