一、Samba的简介

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。

    SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但与局域网络主机分享资源,还能与全世界的电脑分享资源。

二、Samba服务配置

1、安装软件

yum -y install samba   安装samba包

image.png

2、启动服务

systemctl restart smb

image.png

3、Samba账号的管理

    Samba用户:

         (1)提前建立同名的系统用户,可不设置密码

         (2)采用独立于系统的密码

    管理工具:pdbedit

           pdbedit -a   添加用户

           pdbedit -L   查询用户

           pdbedit -x   删除用户

useradd -s /sbin/nologin smb1  创建用户,并设置shell
useradd -s /sbin/nologin smb2
useradd -s /sbin/nologin smb3
pdbedit -L    查看已存在的smb账号

image.png

smbpasswd -a smb1   设置密码  已存在的系统用户通过smbpasswd命令设置为smb用户
smbpasswd -a smb2
smbpasswd -a smb3

image.png

image.png

pdbedit -L     再次查看smb账号    设置smb账号已添加

image.png

image.png

systemctl stop firewalld.service       清除防火墙
systemctl disable firewalld.service
iptables -L      查看防火墙策略

image.png

4、同台机器不同终端测试

ifconfig ens34   查询ens34 的ip地址

image.png

smbclient -L //192.168.230.131   客户端测试

image.png

smbclient -L //192.168.230.131 -U smb1%centos   smbclient只用于测试,实际生产过程中并不常用

image.png

5、windows系统测试

image.png

image.png

    可以看到其家目录文件

image.png

6、配置文件及参数

vim /etc/samba/smb.conf    Samba服务的配置文件

image.png

image.png

    宏定义:
    %m :客户端主机的NetBIOS名
    %H :当前用户家目录路径
    %g :当前用户所属组
    %L :samba服务器的NetBIOS名
    %T :当前日期和时间
    %M :客户端主机的FQDN
    %U :当前用户用户名
    %h :samba服务器的主机名
    %I :客户端主机的IP
    %S :可登录的用户名

image.png

systemctl restart smb  重启smb服务   (只要修改过配置文件就要重启服务)

image.png

7、测试前的环境准备

mkdir /app/gongxiang   创建共享目录/app/gongxiang
cd /app/gongxiang/     进入该目录
cp /etc/issue .        将/etc/issue 文件复制到本地
setenforce 0           关闭selinux
iptables -F            关闭防火墙

image.png

chmod 775 gongxiang   其他人的权限至少为5

image.png

setfacl -m u:smb1:rwx gongxiang     为该文件设置特殊权限

image.png

8、上传文件(客户端)

ssh 172.18.251.127  远程连接工具

image.png

ifconfig ens33  查询ens33网卡的地址

image.png

smbclient //172.18.251.86/gongxiang -U smb1   用另一台机器当作客户端进行测试,ip为服务器地址

image.png

vim /etc/fstab  增加一行内容

image.png

mkdir /app/gongxiang1       创建目录   (为测试环境做准备)
mount -a             新写入/etc/fstab文件中的挂载内容,通过mount -a 可实现自动挂载
df           查看挂载情况    可看到已自动挂载

image.png

su - smb2     切换到用户smb2,进行各项测试

image.png

三、Samba配置参数小总结

[global]
    netbios name = HARDY            设置服务器的netbios名字
    server string = my server          对samba服务器的描述
    workgroup = DEBIAN_FANS     samba服务器属于哪个工作组名或域名
    encrypt passwords = yes          密码需要加密
    message command = /bin/sh -c 'xedit %s ; rm %s' &       当winpopup向网络用户发消息时,此参数可用来接收消息,可惜没有发送
    security = user                          用于登陆域,或用户验证登陆
    wins support = yes                   设置本地为wins服务器,当WINS SERVER没有启动,SAMBA利用广播来进行名字解析,而WINS SERVER是通过udp协议来进行包的传送和不同网络中的路由.因此在不同的网络中进行NETbios解析,要打开wins server
    remote browse sync                 用来和远程的local master browser进行信息的同步
    name resolve order = wins lmhosts hosts bcast # 解析netbios的顺序 (lmhosts-lan manager file)(hosts-unix的/etc/hosts,dns,nis)(wins)(bcast,广播) 
    wins server = 192.168.0.22       指定wins服务器的网络地址
    wins proxy =  yes                     如果指定的wins服务器在不同的网断,就需要打开
    dns proxy = yes                       当wins服务器在wins中找不到名字的话,就会查找dns
    admin users = hardy                samba的管理用户,默认是root
    add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false  %u         代替手工的添加计算机账号(看pdc配置文件)
    prefered master = yes             强制使samba成为local master
    local master = yes                   使nmbd试着在子网中成为master browse(储存子网中所有的netbios name 所对应ip的列表)
    domain master = yes              使nmbd成为广域网的netbios name 所对应ip的列表,任务是同步所有子网中local master的列表。因此使各终端得到整个域的浏览列表,如果设置了domain logons = yes 那么domain master默认是yes
    os level = 33                            操作系统级别,winNT4.0服务器-33  如果数值高于33,samba就成为local master browers不管网络中是否存在winNT4.0
                                            winNT3.51服务器-32
                                            winNT4.0客户机-17
                                            winNT3.51客户机-16
                                            win98 - 2
                                            win95 - 1
                                            win3.1- 1 
    time server  = yes                  nmbd将会告知windows的客户端自己是作为smb的时间服务器,可以用net time /yes /set 来同步时间
    domain logons = yes            设置samba为win98/95所登陆的域服务器
    printer admin = hardy
    username map = /etc/samba/smbusers               用户别名文件
    logon path =                         看[profiles]的说明
    logon drive = Z:                    把用户的home目录映射成z:盘,只适用于NT
    logon home =             指定客户端登陆的home目录的位置,当然[homes]目录需要定义,为了同时支持9x和nt登陆.该项要设置成为, 并且指定logon path =  
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192       据说可以提高samba性能
    password server =                其他的NT 服务器,或samba服务器但security=server或domain 的ntbios 名字
    hosts allow = 192.168.0.         指定那些主机或网络段可以访问
    hosta deny =  192.168.8.        指定那些主机或网络段不可以访问
    interfaces = 192.168.0.100/255.255.255.0               设置samba将对哪些网络接口进行服务
    bind interface only = yes                     如果设置成是,samba只对这几个网络接口服务
    socket address = 192.168.0.10                 强制samba只在该端口监听
    netbios aliases = yao xiao ping                设置3个samba虚拟服务器
    include = /etc/samba/smb.conf.another         包括另外的samba配置文件
    show add printer wizard= yes         当用户添加打印机时,显示安装向导 
    printcap name = /etc/printcap
    load printers = yes
    log file = /var/log/samba/%m.log              日志文件
    max log size = 0                                  日志文件的大小
    log level = 0                                  日志级别 0 表示没有,3 一般比较合理
    syslog = 2                                     syslog的日志级(0,err)(1,warning)(2,notice)(3,ifno)(4或以上,debug)
    syslog only = yes                             只使用系统日志,关闭samba日志
    smb passwd file = /etc/samba/smbpasswd
    unix password sync = yes                      当用户改变samba加密的密码时,SAMBA会试着更新UNIX用户密码
    passwd program = /usr/bin/passwd %u            指定更改密码的命令
    passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*    更改密码时的对话
    password level = "数字" 在win9x下密码最多出现大写字母的个数,因为9X是使用平文传送密码的。
    null password = yes           是否允许空密码
    pam password change = no         为samba打开pam改变密码控制机制的支持
    obey pam restrictions = no     当encrypt passwords = yes 时,samba 会忽略pam的验证,因为pam不支持(挑战/回答)验证机制,他只用来做平文密码的验证
    nt acl support = yes           允许NT用户修改unix文件的属性
    announce as = NT             告诉客户端,samba是以winNT的身份来运行的
    announce version = 4.0     告诉客户端,samba是以4.0版本来运行的
    remote announce = 192.168.33.33/DEBIAN_FANS         子网和工作组,允许SAMBA和子网同步浏览(local master)
    browse list = yes                samba将在服务器上生成浏览列表
    remote browse sync = 192.168.222.22 # samba         将会同步在其他子网(local master)的列表,但子网的(LOCAL MASTER)必须是SAMBA服务器
    unix realname                   在客户端是否采用unix全文件名
    nis homedir = yes             SAMBA 采用NIS的/etc/nsswitch.conf 文件,而不用/etc/passwd,来找用户的home目录
    logon script = %U.bat          指定客户端登陆文件名
[netlogon]
    path = /home/samba/netlogon                  该目录中存放用户登陆脚本(logon script = %U.bat)
    writable = no
    guest ok = yes
    share modes = no                  打开dos的锁全文件的方式,在比较繁忙的服务器上关闭它,会提高性能
    ;write list = hardy,root             指定哪些用户可以在该只读共享文件上有写的权限
[profiles]                           设置每个登陆用户的环境,包括桌面的属性,开始菜单上应用程序,以及其他项目。它是储存在服务器的
    path = /home/samba
    writable = yes                允许写操作
    browsable = yes              允许该目录被显示在系统资源中
    create mask = 0600
    directory mask = 0700
[printers]
    path = /var/spool/samba
    guest ok = yes
    browseable = yes
    printable = yes
    read only = yes
[cdrom]
    path = /mnt/cdrom
    read only = yes
    gue  st ok = yes
    locking = no          由于是只读文件
    public = yes
    preexec = /bin/mount /dev/cdrom                在链接共享文件之前,要执行的命令
    postexec = /bin/umount /dev/cdrom            在断开共享文件之前,要执行的命令  但我不知道什么时候才算断开 
[homes]
   comment = Home
   magic script = hardy.sh                    当用户打开该共享文件hardy.sh将被执行,结果将被重定向到客户端
   magic output = /var/log/magicoutput                指定结果输出到该文件
   volume = user-at-home                                        dos的盘符卷标
   read list = badguy                                                 限制这些用户在可写文件上的些操作权限
   valid users = %S                                 可登陆用户
   invalid users = root                            不可登陆用户
   max connections = 0                         最大连接数
   read only = no
   writable = yes
   create mode = 0777
   directory mode = 0775
   browseable = no
[public]
   path = /var/ftp
   dont descend = etc bin lib             指定这些在/var/ftp目录下的目录是不可访问的 
   follow symlinks = yes                     指定是否允许文件的链接
   wide links = yes                             指定是否可以链接到/var/ftp以外的文件或目录
   hide dot files = yes                        是否隐藏点文件
   hide files = /*.java/*.cpp/               隐藏指定文件
   veto files = /*config/*secret/         完全隐藏文件,比隐藏要强硬。重要文件使用
   delete veto files = no                     当用户删除有veto files的目录时, 是否允许删除veto files以及目录 
   delete readonly = no                      是否允许dos用户删除只读文件
   security mask = 0777                     0 表示允许修改,1 表示不允许
   create mask = 0777                        如果上面的(security mask)没设,则按照这个模式
   force security mode = 0                 当修改文件的属性,指定哪些模式必须设置
   force create mode = 0                   如果上面的(force security mode)没设,则按照这个模式的设置
   directory security mask = 0777     目录,同上
   directory mask = 0777
   force directory security mode = 0777
   force directory mode =0777
   case sensitive = no                       是否区分文件名的大小写(windows 是不区分的)
   default case = upper/lower          设置默认的是大写还是小写
   preserve case = yes                    不进行大小写的转换,不转换成默认(default case)
   short preserve case = yes            将文件名转成8.3的dos端文件名
   locking = yes                              由于文件只能同时被打开一次,当文件打开时,samba会自动让其他访问守候,为了文件不被破坏
   oplocks = no                               本地缓存,如果设置成yes,会提高samba的速度,据说在linux-2.5以前的版本有bug,所以在2.4中还是设置成no
   level2 oplocks = no                    同上