关闭SELINUX

       sed -i 's/SELINUX=enforcing/SELINUX=disabled/'   /etc/selinux/config

       setenforce 0

安装 smb

       yum -y install samba samba-client

启动并设置我开机自运行

       systemctl start smb nmb

       systemctl enable smb nmb

防火墙 开启samba默认端口

       firewall-cmd --permanent --add-service=samba

       firewall-cmd --reload

查看samba版本号

       smbd -V

添加访问用户

        先创建操作系统用户

           useradd -s /sbin/nologin  user01

       创建smb登录用户

           smbpasswd -a user01

修改SMB配置文件

vi  /etc/samba/smb.conf    追加

[sharefile-user01]
    comment = Shared Directories
    path = /user01
    public = no
    admin users = user01
    valid users = user01
    browseable = yes
    writable = yes
    create mask = 0777
    directory mask = 0777
    force directory mode = 0777
    force create mode = 0777

创建要共享的路径,这里的/user01

mkdir /user01

设置文件访问权限

chown -R 777  /user01

重启smb服务

systemctl restart smb nmb

windows测试访问

运行输入\\192.168.53.26

共享管理

列出用户列表 pdbedit -L

列出用户详细信息的列表pdbedit -Lv

  • 修改smb登录密码

smbpasswd  user01

systemctl restart smb nmb

注:

  1. restart了,如该重置密码用户正在访问,马上无法访问,需要注销一次系统,再次进入才有验证弹窗;
  2. 如不restart,被重置密码的用户重置前已经登录,那依然可以继续访问,只有下一次登录才被阻止;
  3. 该用户未登录,重置后,不重启,可用新密码登录。
  • 添加smb用户,并允许访问上面创建的共享

一样的先创建操作系统用户 > 创建smb登录用户;

useradd -s /sbin/nologin  user02  &&  smbpasswd -a user02

在/etc/samba/smb.conf 中的共享区的valid users 追加用户

                     valid users = @ user01  user02

只追加valid users仅可访问,无法写入,需admin users行也追加用户名(对该共享具有完全控制权限)

  • 删除SMB用户

smbpasswd -x user01

systemctl restart smb nmb

这个时候/etc/passwd 还有存在用户,继续删除

userdel user01

  • 关闭用户home目录的共享

当共享目录名为非用户名时,用户的home/user01“家目录” 也会被共享了,并可读写权限,这是不安全的,

   关闭方式:

在/etc/samba/smb.conf 中将[homes]及其区间配置都注释了即可。

  • 定义用户组访问权限

valid users和admin users都支持以添加组和用户方式,组为@后带组名表现形式,下面是操作流程:

  

groupadd   IT
useradd IT001  -g  IT  -s /sbin/nologin
useradd IT002  -g  IT  -s /sbin/nologin
cat /etc/passwd
smbpasswd -a IT001
cat /etc/samba/smb.conf | grep IT

valid users = @ IT  user01  user02

systemctl restart smb nmb

即可使用IT组的用户IT001或IT002登录访问

如需黑名单一个组用户,添加

         invalid users = IT002

  • 禁用与恢复用户

   禁用用户 pdbedit -c '[D]' -u user01 | grep  Flags

   恢复用户 pdbedit -c '[ ]' -u user01 | grep  Flags

   已登录用户,不会受到影响,需重启systemctl restart smb nmb

  • 共享目录指定用户可见

需求:用户kevin登录后只能看到他有权限的共享目录,而其他用户登录也不能看到kevin的共享目录。

操作方式:

在/etc/samba下建立一个文本文件其名称为kevin.smb.conf

cat /etc/samba/kevin.smb.conf

[kevin]
    security = user
    path = /data/kevin
    valid users = @kevin
    read list = @kevin
    write list = @kevin
    writable = yes
    create mask = 0777
    directory mask = 0777

在/etc/samba/smb.conf文件中引用子配置文件

       [global]区间中添加

     config file = /etc/samba/%U.smb.conf

创建共享目录

mkdir -p /data/kevin

授权目录权限

chown kevin.kevin -R  /data/kevin

新建用户kevin

useradd -s /sbin/nologin  kevin  &&  smbpasswd -a  kevin

当以kevin的身份访问Samba服务器,只能看到共享目录kevin,其他在smb.conf中定义的共享资源都无法看到。

  • 访问控制

允许/禁止来源地址客户端的访问

可在[global]全局或指定作用共享区间中添加

       ip白名单 hosts allow=192.168.53.0/255.255.255.0  EXCEPT 192.168.53.63

       ip黑名单 hosts deny=192.168.53.99/255.255.255.255

监听绑定设置

在[global]全局参数中添加

bind interfaces only = yes

如绑定网卡interfaces =eth0  #可以多个

如绑定网络地址interfaces = 192.168.53.26  #可以多个

修改通信端口smb ports = 4455

限制客户端访问连接数目

可在[global]全局或指定作用共享区间中添加

max connections = 0

0表示不限制,超出连接数目,则新的连接请求将被拒绝

设置无操作断开会话时间

deadtime = 10

隐藏点.文件

hide dot files = yes

隐藏指定文件/夹

 hide files = /*.exe/*档案/

禁止上传类型文件,并带隐藏文件功能

veto files  = /*.exe/*.rar/*.zip/  

  • centos作客户端挂载SMB共享盘

安装Samba客户端软件

yum -y install cifs-utils

手动挂载

mount -t cifs -o username=kevin,password=passwd,uid=0,gid=0 //192.168.53.26/kevin /mnt

mount.cifs -o  username=kevin,password=passwd  //192.168.53.26/kevin  /mnt

 注意mount.cifs 指定挂载用的uid,gid无效

uid=0,gid=0 指定用户,组去挂载,0 0为root,当为root时,其他用户进入共享可读不可写;

在已经挂载的samba存储内,chown更改归属和chomd修改权限都无作用

如需隐藏密码,不带password=即可手动输入

挂载免验证共享

mount.cifs //192.168.53.26/guestfile /mnt

Password for root@//192.168.53.26/guestfile:  (直接回车)

查看挂载

df -hT

文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        37G  2.1G   35G    6% /
devtmpfs                devtmpfs  1.5G     0  1.5G    0% /dev
tmpfs                   tmpfs     1.5G     0  1.5G    0% /dev/shm
tmpfs                   tmpfs     1.5G  9.5M  1.5G    1% /run
tmpfs                   tmpfs     1.5G     0  1.5G    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  155M  860M   16% /boot
tmpfs                   tmpfs     300M     0  300M    0% /run/user/0
//192.168.53.26/kevin   cifs       37G  2.1G   35G    6% /mnt

卸载挂载

umount //192.168.53.26/kevin

设置开机自动挂载

将用户名、密码、共享域的信息写入到一个认证文件中

vi  /root/auth.smb

username=kevin

password=passwd

domain=SAMBA

更改密码文件权限

chmod  600  /root/auth.smb

将挂载信息写入/etc/fstab,实现开机挂载

//192.168.53.26/kevin  /mnt  cifs  credentials=/root/auth.smb 0 0

测试挂载是否成功,无报错即成功

mount -a

挂载非445端口的smb

mount.cifs -o  username=kevin,password=kevin,port=4455    //192.168.53.26/kevin  /mnt

以只读方式挂载

mount.cifs -o  username=kevin,password=kevin --ro  //192.168.53.26/kevin  /mnt

  • 创建win免登录访问的共享

 [global]全局参数中

security = user下一行添加

map to guest = Bad User

再新建guest访问的区间

[guestfile]
comment=Shared guest Dir
path=/guestfile
browseable=yes
writable=yes
guest ok=yes
create mask = 0775
directory mask = 0775

创建目录与更改目录权限

mkdir  /guestfile 

chown -R  nobody:nobody  /guestfile

systemctl restart smb nmb

win免验证直接访问guestfil成功,点击其他需验证的共享才跳验证窗口

  • 日志

[global]全局参数中添加

log file = /var/log/samba/log.%m

log level=3     #等级越大,记录内容越多

日志文件默认存放/var/log/samba/中,以客户端计算器名字或ip命名的文件
       查看登录成功的记录

cat  log.PC8  | grep  'connect to service'

pc8 (ipv4:192.168.53.99:63047) connect to service sharefile-user01 initially as user user01 (uid=0, gid=1000) (pid 12105)

查看登录失败的记录

cat  log.PC8  | grep  'request_error_ex'

查看操作文件的记录

cat log.z97esx-2008-f | grep 123.doc

  • 在windows连接非445端口smb

  1. 因win默认也固定只访问TCP445为目标,可本机或其他机器,起一个端口转发服务:如本机监听445转发远端的4455(太多方式了,不细说了)访问\\127.0.0.1即可。
  2. Android可使用“FX文件管理器8.0及其以上版本”。

案例参数说明

[kevin]                             # 自定义共享名
      comment = Home Directories        # 描述符,是给系统管理员看的
      path = /home/kevin                # 共享的路径
      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. # 指定允许访问 samba 服务器的主机  
      security = share                           # 定义安全级别
      log file = /var/log/samba/log.%m           # 定义日志文件,每个访问的主机会产生独立的日志文件,%m 是客户端主机名
      max log size = 50                 # 定义单个日志的最大容量(KB)
      passdb backend = tdbsam           # 用户的存储方式,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                        # 设置共享目录的管理员,具有完全权限

smbclient

       smbclient主要用在Linux访问SMB共享文件,实现文件的传输,也方便应用于脚本运作。

安装

yum install -y samba-client

列出目标服务器的共享目录

smbclient -L   //192.168.53.26   -U  user01%user01

连接进入共享目录

[root@localhost ~]# smbclient  //192.168.53.26/kevin   -U  kevin%passwd

smb: \> ls

查看共享目录下的文件

smbclient -c "ls"  //192.168.53.26/kevin -U kevin%passwd

在共享目录创建文件

smbclient -c "mkdir $(date "+%Y%m%d%H%M")" //192.168.53.26/kevin -U kevin%passwd

下载文件

smbclient -c "get  a.exe" //192.168.53.26/kevin -U kevin%passwd

上传文件

smbclient -c "put  a.exe" //192.168.53.26/kevin -U kevin%passwd

注意:下载上传是覆盖目标/合并目录,(put  a.exe  a.exe1)是上传并重命名批量上传(多个单文件用,批量prom)

smbclient -c "prom; mput  a.exe  b.exe" //192.168.53.26/kevin -U kevin%passwd

批量命令mgetmput

批量下载 [不含递归]

smbclient -c "prom; mget  * "  //192.168.53.26/kevin -U kevin%passwd

批量上传[含递归文件,递归用recurse ON]

smbclient -c "prom;recurse ON; mput  *"  //192.168.53.26/kevin -U kevin%passwd

批量下载[含递归文件]

smbclient -c "prom;recurse ON; mget  *"  //192.168.53.26/kevin -U kevin%passwd

批量下载指定目录

smbclient -c "prom;recurse ON; cd 20201010/; mget  *" //192.168.53.26/kevin -U kevin%passwd

批量上传到共享中的目录

smbclient -c "prom; cd 20201010;mput  *"  //192.168.53.26/kevin -U kevin%passwd

批量上传到共享以今天日期的文件夹

smbclient -c "prom; mkdir $(date "+%Y%m%d");cd $(date "+%Y%m%d");mput  *"  //192.168.53.26/kevin -U kevin%passwd

链接非默认端口

smbclient -p 4455 -c "ls"   //192.168.53.26/kevin   -U  kevin%passwd

参看文献

Samba服务的配置总结 - 散尽浮华 - 博客园

Logo

更多推荐