大家都知道ftp是跨平台的服务,但是不能在线修改,编辑,只能上传、下载。而nfs是unix网络文件系统,它可以将目录远程挂载到服务器上,但是不能跨平台。而samba弥补这两种服务的不足,它不仅实现了linux与windows 跨平台文件共享,而且也可以实现挂载。
一、samba服务简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
二、samb服务基础
软件包:samba
Samba-client 客户端软件
samba-common 通用软件
cifs-utils smb客户端工具
协议:SMP(TCP139)CIFS(445)
配置文件路径:/etc/samba/smb.conf
所需服务器:centos7 (172.18.254.254)
三、samba服务器的配置步骤
1、安装软件
[root@localhost ~]# yum -y install samba
2、起服务
[root@localhost ~]# systemctl restart smb
3、samba帐号的管理
samba用户:a、提前建立同名的系统用户(可不设置密码)
b、采用独立于系统的密码
管理工具:pdbedit
添加用户:-a
查询用户:-L
删除用户:-x
[root@localhost ~]# systemctl restart smb [root@localhost ~]# useradd -s /sbin/nologin smb1 [root@localhost ~]# smbpasswd -a smb1 New SMB password: Retype new SMB password: Added user smb1. [root@localhost ~]# pdbedit -L //查看系统中所有的smb账户 smb1:2002:
4、配置文件及参数
[root@svr7 ~]# vim /etc/samba/smb.conf [global] //全局配置 workgroup = MYGROUP [homes] //家目录共享 [printers] //打印机共享 [samba] path = /smb/ //共享目录路径 public = yes|no //默认no;公用的 browseable = yes|no //默认yes;是否可以浏览 read only = yes|no //默认yes;只读 writable = yes|no //默认yes;可写 write list = user //默认无;可写入的用户列表 valid users = user,user1//默认所有用户;有效的用户列表 hosts allow = 客户地址 //允许的客户机地址 hosts deny = 客户地址 //禁止的客户机地址 comment = 注释 //说明
5、修改用户对目录的读写执行权限
[root@localhost ~]# mkdir /smb [root@localhost ~]# setfacl -m u:smb1:rwx /smb
6、SELinux对samba共享的保护
a、用getseboolbool查看selinux开关
[root@localhost ~]# getsebool -a|grep samba_export samba_export_all_ro --> off samba_export_all_rw --> off
b、用setsebool控制SELinux开关
[root@localhost ~]# setsebool -P samba_export_all_ro=on [root@localhost ~]# setsebool -P samba_export_all_rw=on
四、客户端访问共享目录
所需软件包:samba-client
1、列出共享资源:smbclient -L 服务器地址
[root@centos6 ~]#smbclient -L 172.18.254.254 Enter root's password: //匿名登录,可以不输密码,直接回车 Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.7.1) Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Server Comment --------- ------- Workgroup Master --------- -------
注意:在没有配置主配置文件的情况下,用用户登录时,会登录到用户的家目录。
[root@localhost ~]# smbclient -L //172.18.254.254 -U smb1%centos Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.7.1) smb1 Disk Home Directories Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- -------
2、连接到目标主机的共享目录
[root@centos6 ~]#smbclient //172.18.250.55/leifengta -U xuxian Enter xuxian's password: Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.7.1] smb: \> ls . D 0 Mon Oct 8 20:52:38 2018 .. D 0 Mon Oct 8 20:14:25 2018 xuxian.txt A 3 Mon Oct 8 20:45:52 2018 lost+found D 0 Mon Oct 8 19:16:01 2018 suzhen.txt A 12 Mon Oct 8 20:45:19 2018 aquota.user 7168 Mon Oct 8 20:11:47 2018 2.samba.avi A 396617646 Mon Oct 8 18:45:48 2018 51200 blocks of size 4096. 51199 blocks available smb: \>
五、配置过程中可能遇到的问题
1、客户端登录samba时出现以下提示:
session setup failed: NT_STATUS_LOGON_FAILURE
该错误提示表示用户有误,可能是用户不存在,也可能是密码错误,或者只是在samba用户和系统用户及密码出现错误,总之就是用户和密码的问题。
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
该错误表示坏的网络名,表示共享目录不存在,或共享目录权限问题
可用setfacl -m给用户加权限
Connection to 192.168.4.7 failed (Error NT_STATUS_HOST_UNREACHABLE)
2、客户端连接到samba共享目录时出现以下提示:
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*
文件权限不足,或者存在selinux限制
调整文件的权限,并打开selinux开关
3、执行setsebool -P 操作启用SElinux开关参数时失败,提示:Killed
内存不足,而且交换空间也不足
添加交换分区(1GB)在重试
六、多用户SMB挂载
SAMBA共享默认只支持同时用一个用户挂载SMB共享 ,但CentOS7中可启用多用户挂载功能 ,客户端挂载samba共享目录后,在客户端登录的不同用户访问同一个 samba的挂载点,可获得不同权限 。
实验:多用户smb挂载
服务端:
1.新建两个smb用户,修改其密码
[root@localhost ~]# useradd -s /sbin/nologin xiaoma [root@localhost ~]# useradd -s /sbin/nologin xiaomao [root@localhost ~]# smbpasswd -a xiaoma New SMB password: Retype new SMB password: Added user xiaoma. [root@localhost ~]# smbpasswd -a xiaomao New SMB password: Retype new SMB password: Added user xiaomao.
2.新建一个共享目录,并修改它的contect值及设置acl权限
[root@localhost ~]# mkdir /app/smbshared [root@localhost ~]# chcon -t samba_share_t /app/smbshared/ [root@localhost ~]# setfacl -m u:xiaoma:rwx /app/smbshared/ [root@localhost ~]# setfacl -m u:xiaomao:rwx /app/smbshared/
3.修改samba主配置文件
[root@localhost ~]# vim /etc/samba/smb.conf [gongxiang] comment = My Gongxiang path = /app/smbshared browseable = yes writeable = no write list = xiaoma,xiaomao public = yes
4.重启服务
[root@localhost ~]# systemctl restart smb
客户端:
1、新建两个用户
[root@localhost ~]# useradd xiaoma [root@localhost ~]# useradd xiaomao
2、编辑身份认证文件
[root@localhost ~]# vim /etc/multiuser username=smb1 password=centos
3、开机自动挂载到服务器上
[root@localhost ~]# vim /etc/fstab //172.18.250.55/gongxiang /mnt/ cifs credentials=/etc/multiuser,multiuser,sec=ntlmssp 0 0 [root@localhost ~]# mount -a
credentials=/etc/multiuser 指定挂载时用到的用户身份认证文件
multiuser 支持多用户认证
sec=ntlmssp 认证方式为smb认证
4、切换用户,进入到挂载的目录下,
[root@localhost ~]# su - xiaoma [xiaoma@localhost ~]$ cd /mnt [xiaoma@localhost mnt]$ ls ls: reading directory .: Permission denied //因为没有做smb的认证所以无法访问smb共享 [xiaoma@localhost mnt]$ cifscreds add 172.18.250.55 //对用户进行smb的认证 Password:
5、测试
[xiaoma@localhost mnt]$ ls [xiaoma@localhost mnt]$ touch masai [xiaoma@localhost mnt]$ ll total 0 -rw-r--r--. 1 1009 1010 0 Oct 11 09:56 masai [xiaoma@localhost mnt]$ exit logout
七、一个samba的综合性实验
实验:创建baisuzhen,xuxian,fahai,xiaoqing,xushilin,guanyin 六个用户
1.要求以上六个用户都可以浏览并访问目标主机的共享目录leifengta,匿名用户可访问但不可浏览。大小2GB。未来可自动扩展
2.baisuzhen,xuxian,xushilin 可以在该共享目录下创建及删除文件,且彼此之间创建的文件,可以相互修改,其他用户不可创建文件。
3.xuxian,xushilin最多能各自创建200M的数据,且不能删除其他人创建的文件,baisuzhen不受限制.
4.六个用户各自都 有一个以自己名字为名的共享目录,仅自己可见可访问可创建,他人不可见,guanyin对所有目录均有完整权限。
1、创建六个用户,并设置密码
[root@localhost ~]# for username in baisuzhen xuxian fahai xiaoqing xushilin guanyin ;do useradd -s /sbin/nologin $username ; (echo redhat;echo redhat) |smbpasswd -a $username ;done
2、创建共享目录,建议用逻辑卷挂载
[root@localhost ~]# mkdir /app/baishezhuan [root@localhost ~]# fdisk /dev/sda [root@localhost ~]# partprobe /dev/sda [root@localhost ~]# pvcreate /dev/sda6 [root@localhost ~]# vgcreate vgbaishe /dev/sda6 [root@localhost ~]# lvcreate -l +100%FREE -n lvbaishe vgbaishe [root@localhost ~]# mkfs.ext4 /dev/vgbaishe/lvbaishe [root@localhost ~]# vim /etc/fstab /dev/vgbaishe/lvbaishe /app/baishezhuan ext4 defaults,usrquota 0 0 [root@localhost ~]# mount -a
3、为baisuzhen,xuxian,xushilin三个用户设置acl权限,使其可以在共享目录下创建删除文件
[root@localhost ~]# setfacl -m u:baisuzhen:rwx /app/baishezhuan/ [root@localhost ~]# setfacl -m u:xuxian:rwx /app/baishezhuan/ [root@localhost ~]# setfacl -m u:xushilin:rwx /app/baishezhuan/
4、配置samba的主配置文件
[root@localhost ~]#vim /etc/samba/smb.conf [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw config file = /etc/samba/conf.d/%U.conf //子配置文件 [leifengta] comment = xi hu leifengta path = /app/baishezhuan public = yes //可访问 browseable = no //不能浏览 writeable = no //不可写
5、将baisuzhen,xuxian,xushilin三个用户加入到同一个组中,使彼此之间创建的文件,可以相互修改,其他用户不可创建文件
[root@localhost conf.d]# groupadd baishezhuan [root@localhost conf.d]# usermod -aG baishezhuan baisuzhen [root@localhost conf.d]# usermod -aG baishezhuan xuxian [root@localhost conf.d]# usermod -aG baishezhuan xushilin [root@localhost conf.d]# chgrp baishezhuan /app/baishezhuan [root@localhost conf.d]# chmod g+s /app/baishezhuan/ //对一个目录作用了sgid权限后,任何人在该目录下创建的文件的所属组,均与该目录的所属组相同。 [root@localhost conf.d]# chown baisuzhen /app/baishezhuan/ [root@localhost conf.d]# chmod o+t /app/baishezhuan/ //对一个目录作用了stickey权限后,该目录下文件仅其所属人和目录所属人及root可删除
6、创建与六个用户名字相同的目录,并编辑子配置文件
[root@localhost samba]# mkdir conf.d [root@localhost samba]# cd conf.d/ [root@localhost conf.d]# vim baisuzhen.conf [leifengta] comment = xi hu leifengta path = /app/baishezhuan browseable = yes writeable = yes force create mode = 0664 [baisuzhen] comment = baisuzhen path = /app/common/baisuzhen browseable = yes writeable = yes [root@localhost conf.d]# vim xiaoqing.conf [leifengta] comment = xi hu leifengta path = /app/baishezhuan browseable = yes writeable = no [xiaoqing] comment = xiaoqing path = /app/common/xiaoqing browseable = yes writeable = yes [root@localhost conf.d]# cat guanyin.conf [leifengta] comment = xi hu leifengta path = /app/baishezhuan browseable = yes writeable = no [baisuzhen] comment = baisuzhen path = /app/common/baisuzhen browseable = yes writeable = yes [fahai] comment = fahai path = /app/common/fahai browseable = yes writeable = yes [xiaoqing] comment = xiaoqing path = /app/common/xiaoqing browseable = yes writeable = yes [xushilin] path = /app/common/xushilin browseable = yes writeable = yes [xuxian] comment = xuxian path = /app/common/xuxian browseable = yes writeable = yes [guanyin] comment = guanyin path = /app/common/guanyin browseable = yes writeable = yes
7、 为xuxian,xushilin设置quota
[root@localhost ~]# quotacheck -cum /app/baishezhuan/ //生成quota数据库 [root@localhost ~]# quotaon /app/baishezhuan/ //开启quota [root@localhost ~]# edquota -u xuxian Filesystem blocks soft hard inodes soft hard /dev/mapper/vgbaishe-lvbaishe 4 0 200M 1 0 0 [root@localhost ~]# edquota -p xuxian xushilin [root@localhost common]# mkdir baisuzhen xiaoqing fahai xuxian xushilin guanyin
8、设置共享目录所属人,使其仅自己可见可访问可创建,他人不可见,guanyin对所有目录均有完整权限
[root@localhost common]# chown baisuzhen baisuzhen/ [root@localhost common]# chown fahai fahai/ [root@localhost common]# chown guanyin guanyin/ [root@localhost common]# chown xiaoqing xiaoqing/ [root@localhost common]# chown xushilin xushilin/ [root@localhost common]# chown xuxian xuxian/ [root@localhost common]# chmod 700 * [root@localhost common]# setfacl -m u:guanyin:rwx *
9、测试