Samba文件共享

 

cifs是实现文件共享服务的一种文件系统,主要用于实现windows系统中的文件共享,linux系统中用的比较少

linux系统中利用cifs文件系统实现文件共享,需要安装smaba服务

samba

samba是在linux和unix系统上实现smb协议的一个免费软件,由服务器及客户端程序构成smb(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。smb协议是 客户机/服务器型协议,客户及通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源smaba实现的是linux和windows不同平台的资源共享.

服务器端:

1.安装smb服务
  yum install samba samba-client samba-common -y

Samba文件共享

  systemctl start smb                      ##开启服务

  systemctl stop firewalld             ##关闭火墙
  smbclient -L //172.25.254.145     ##查看172.25.254.145主机的smb共享,匿名用户登陆
  enter                                                 ##不需要密码

Samba文件共享

2.添加smb用户

  smbpasswd -a westos          ##此用户必须是主机已有用户,否则无效
  pdbedit -L                                 ##查看smb用户信息
  pdbedit -x westos                 ##删除smb用户
   
Samba文件共享
  smbclient -L //172.25.254.145 -U student      ##-L是列出的意思 使用smb用户查看172.25.254.145共享列表

                                                                                  ##默认共享出来的是用户的加目录Samba文件共享
  smbclient //172.25.254.145/student -U student #student查看自己的家目录 但是不能看到student家目录里面的内容,是由于selinux的限制.有两种方法可以解决
1.此时将selinux限制打开(setenforce 1),就可以看到student家目录里边的内容

Samba文件共享

 

Samba文件共享

2.在enforcing状态下登陆smb用户

Samba文件共享

getsebool -a | grep samba                                

setsebool -P samba_enable_home_dirs on   ##开启家目录的访问权限

Samba文件共享

Samba文件共享 

ls             ## 查看当前目录下的文件及目录
  !ls            ##当前用户在系统中所处路径下存在的文件及目录(从根下登陆smb)

 put:只能上传相对路径下的文件

3.挂载 

挂载后上传及创建文件比起使用smbclient命令更方便

临时挂载文件系统:
mount -o username=student,password=student //172.25.254.145/student /mnt     
 df

Samba文件共享
永久挂载该文件系统

vim /etc/fstab

//172.25.254.145/student /mnt cifs defaults,username=student,password=student 0 0

mount -a

Samba文件共享

切换到挂载在目录/mnt下,建立一个文件,再次用student登陆samba服务,ls可以看到建立的文件

Samba文件共享

在服务端/home/student下也看到,三者同步,客户端的一个文件保存

Samba文件共享

 

二 、自定义添加共享目录  

第一种情况:自建目录的共享

服务端:(172.25.254.145)

 1.添加新的共享目录的基本设定
   mkdir /westos                                         ##新建目录
   touch /westos/westosfile{1..3}           ##新建目录下新建文件
   vim /etc/samba/smb.conf                   ##将新建的文件目录编辑进去
    [DATA]                                                   ##共享名称 使用smbclient命令进入此目录时,需使用linux而不是westos
     comment=对共享目录的描述
     path=共享目录的绝对路径
     browseable=yes ##隐藏共享文件,yes时不隐藏

Samba文件共享
 
  systemctl restart smb   ##重启服务

客户端:(172.25.254.245)

  smbclient -L //172.25.254.145 -U student ##查看共享信息,可
                         以看到刚刚编辑的DATA(也就是westos目录)

此时虽然可以看到共享目录(出现linux),但用户却无法访问

Samba文件共享

方法一:setenforce 0(这里指的是服务端的selinux)

Samba文件共享

方法二:改变/westos的安全上下文(服务端:172.25.254.145)

semanage fcontect -a -t samba_share_t '/westos(/.*)?'     ##改变此目录的安全上下文列表

restorecon -RvvF /westos                                                         ##改变完成后记得刷新查看

Samba文件共享

修改完客户端安全上下文之后在客户端(172.25.254.245)查看

Samba文件共享

方法三:修改服务端(172.25.254.145)setsebool -P samba_export_all_ro on打开这个权限 就可以进行访问(172.25.254.245),并且自己建立的目录不改变安全上下文也可以进行访问(因为这个开放的权限大)

Samba文件共享

Samba文件共享

第二种情况:系统级目录的共享(/mnt为例)

服务端(172.25.254.145):

vim /etc/samba/smb.conf   ##在主配置文件里编辑好相关配置信息:名字、说明、绝对路径

Samba文件共享

重启服务后,使用student用户登陆/mnt目录时(客户端172.25.254.245),查看不到共享的文件file1,file2,file3

Samba文件共享

设置  setsebool -P samba_export_all_ro on(服务端)  权限比给单独文件设置安全上下文大

Samba文件共享

客户端测试:

Samba文件共享

三、挂载共享目录权限的设定

 1.本地用户访问配置
   rpm -qc  samba                     ##查看smb服务相关配置文件
   vim /etc/samba/smb.conf
   91 hosts allow = 172.25.254.45     ##仅允许该ip主机进行访问
   92 hosts deny = 172.25.254.45      ##仅拒绝该用户主机访问

    systemctl restart smb
   测试:
   在测试主机 sbmclient //172.25.254.145/student -U student

1)设置只允许172.25.254.45主机访问

基本配置信息

workgroup ##工作组的设定

server string  ##全局共享信息

hosts deny    ##客户端黑名单

Samba文件共享

在已经安装了samba-client的客户机测试(172.25.254.45)

Samba文件共享

2)设置只拒绝172.25.254.45主机访问服务器端smb共享文件

Samba文件共享

在已经安装了samba-clent的客户机(172.25.254.245)中访问

Samba文件共享
   3)如果设置为
   hosts allow = 172.25.254.0/24  ##表示服务重启后ip为172.25.254这个网段的ip都可以挂载

Samba文件共享

在客户端(172.25.254.245)中测试;

Samba文件共享
2,本地用户挂载配置

1) valid users= westos   设置有效用户为westos(westos必须是系统中存在且添加到smb服务中的用户)

Samba文件共享

Samba文件共享

5)valid users= @westos   用户在westos组中都为有效用户

Samba文件共享

Samba文件共享

3.本地用户写权限配置

1)writeable = yes  允许用户可写(选项为no时即使给777的权限也不能有写权限)

Samba文件共享

Samba文件共享

2)writelist = westos  设置可写的用户名单

Samba文件共享

Samba文件共享
 2.匿名用户挂载配置
 1)vim /etc/samba/smb.conf
   map to guest = bad user   ##匿名用户为除了本地用户外的用户
   writeable = yes           ##可写权限
   guest ok = yes            ##匿名用户可登陆
   systemctl restart smb

Samba文件共享

##进行这一步时需要将上一步本地用户权限注释掉

Samba文件共享

Samba文件共享

2)browseable = no   用户在查询目录时不隐藏linux目录

Samba文件共享

Samba文件共享

browseable = yes   用户在查询目录时隐藏linux目录

Samba文件共享

Samba文件共享

3)admin users = westos  设置westos为超级用户

设定student用户为当前共享的root(因为将文件改为755只有超级用户可以建立文件而且不用重启服务即可生效)

chmod  755  /westos/              

Samba文件共享

Samba文件共享

 2) 在服务端进行匿名用户挂载,挂载上以后载/mnt目录下新建文件的所属人和所属组都为nobody说明为匿名用户:
  mount  //172.25.254.145/linux /mnt -o username=guest

Samba文件共享
  cd /mnt
  ls
  touch sj
  ls -l

Samba文件共享

##客户端也可以进行挂载

 2) 在服务端进行匿名用户挂载,挂载上以后载/mnt目录下新建文件的所属人和所属组都为nobody说明为匿名用户:
  mount  //172.25.254.145/linux /mnt -o username=guest

 smb多用户挂载(在客户端中完成):

 在客户端下载认证插件:yum install cifs-utils

Samba文件共享
 1.在客户端/root下新建文件:vim /root/smbauth(文件名自定义),将用户身份和密码编辑进去,
  username=shijin
  password=shijin

Samba文件共享
 chmod 600 /root/smbauth   ##文件设置权限设置
 
Samba文件共享
 然后挂载:

mount      -o credentials=rootsmbauth,multiuser,sec=ntlmssp //172.25.254.145/DATA /mnt
    ##credendtials=/root/smbauth  ##为指定挂载时用到的用户文件,即用户名和密码

    ##multiuser 表示多用户认证

   ##sec=ntlmssp表示认证方式为标准smb认证方式
df

Samba文件共享
ls /mnt
然后切换到新建的本地用户tom,tom想要查看/mnt目录的文件。或者写入,则需要经过用户认证,
输入/root/smbauth中的密码才可以进入:
su - tom
cifscreds add -u shijin  172.25.254.145
shijin        ##密码
ls /mnt

Samba文件共享