##########################################################

  • 闲扯Samba

  • Windows作为服务端

  • Linux作为服务端

################################################################


闲扯Samba

   最近几个月看的东西有点多,事也多,一直抽不开身写博文。总结的东西倒是不少,但自己还未能完全消耗形成完善的体系,所以拿不出手的东西写了是一定会误导博友的,正好最近用到samba就顺便总结下基础服务。感觉自己欠下好多博文,深入浅出的博文确实不好写,只能慢慢来了,当作锻炼自己。

   windows和Linux之间通过FTP共享文件,不方便用户使用,于是samba就诞生了。啥是samba?samba是干啥的呢?简单的来说samba是CIFS/SMB协议的一种实现,CIFS/SMB协议实现了跨平台文件共享,windows的网上邻居就是使用CIFS协议,因此Samba可以实现linux和windows之间的文件共享。需要特别说明的是客户端访问samba服务的用户账户一定是系统用户,而密码则是由samba自己维护的,接下来通过介绍linux和windows之间共享文件的模式来进一步了解samba是什么。


Windows作为服务端

   这种工作模型下,linux将作为客户端访问windows,所以linux需要安装客户端软件,并且需要访问凭证,文件的最终访问权限为共享权限和文件系统权限二者的交集,首先我们看看windows作为服务端是如何共享出资源的。

   创建test用户

wKiom1M9ir2QjGA4AAIZfsYbrRc856.jpg

   添加文件系统权限

wKiom1M9i1mBACtWAAFpfZwrBuM968.jpg

   添加共享权限

wKiom1M9i3iTrM7XAAJ6kWwPB8c160.jpg

   linux作为客户端需要安装客户端工具

yum install samba-client -y

   列出服务共享的目录列表

smbclient -L 192.168.1.201 -U test

wKioL1M9jDiy6pTOAAK4e7FOeZw527.jpg

   进入共享目录进行上传、下载等操作

smbclient //192.168.1.201/testdir  -U test

wKioL1M9jQLTgANSAAGSPobm69k296.jpg

wKiom1M9jWHS6ICyAAEvorPE6cM037.jpg

   挂载共享目录至本地

mkdir /winfs
mount -t cifs -o username=test,password=123 //192.168.1.201/testdir /winfs
touch /winfs/test

wKioL1M9j3GTb1WSAAExfOfYVQA263.jpg


Linux作为服务端

   linux作为服务端需要安装samba主包,samba还支持web-gui化管理工具swat,samba的选项有很多,兴趣的朋友可以自行研究,这里以实际案例来演示samba的在工作中是如何使用的。    

   安装samba

yum install -y samba
setenforce 0            #samba会受到selinux的影响

   启动服务查看监听端口

for i in smb nmb; do service $i restart; done
netstat -tunlp
smbd负责文件共享   port 445
nmbd负责NetBIOS   port 137 138 139

实战需求:任何用户访问samba服务必须经过认证,每个用户有自己的目录并且只有自己可以看到,public为公共目录任何人都可以增删改,tom,lucy属于ios部门,ios部门有自己专属的同名目录并且只有所属职员有增删改权限;bob,jim属于web部门,web部门有专属的同名目录并且只有所属职员有增删改权限。

   创建公共目录

mkdir -pv /office/public
mkdir -pv /office/ios
mkdir -pv /office/web
mkdir -pv /office/users

   批量创建用户、用户目录、添加用户到指定组、修改用户目录权限脚本(如果在想在/home下就很简单,直接创建用户就可以,不用这么麻烦,这里只是为了更清楚的印证文件最终权限为共享权限和文件系统权限二者的交集)

#!/bin/bash
#
users='bob jim'
path='/office/users/'
group='web'
groupadd $group &>/dev/null
for i in $users;
do
    useradd -g $group -r $i &>/dev/null && echo "Add $i succeed in $group ."
    mkdir -pv $path$i &> /dev/null && echo "mkdir $path$i succeed ."
    setfacl -m u:$i:rwx $path$i && echo "$path$i permission ok"
done

   为ios、web目录设置权限,根据自己的需要做出设置

setfacl -m g:ios:rwx /office/ios    #为目录定义用户权限
setfacl -m g:web:rwx /office/web    #为目录定义组权限
chmod o-r /office/ios               #ios组以外的用户无法进入ios目录
chmod o-r /office/web               #web组以外的用户无法进入web目录
chmod o+r /office/ios               #ios组以外的用户只能查看,无法删、改
chmod o+r /office/web               #web组以外的用户只能查看,无法删、改

   主配置文件/etc/samba/smb.conf

[global]
    netbios name = Linux File Server        #辅助名称
    server string = Samba                   #服务名称
    smb passwd file = /etc/samba/smbpasswd  #密码文件存放位置
    log file = /var/log/samba/log.%m        #日志文件
    max log size = 500                      #日志大小
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    idmap config * : backend = tdb  
    printing = bsd
[homes]
    comment = user_home
    path = /office/users/%U                #用户家目录
    browseable = no                        #其他人无法浏览
    writable = yes                         #可写
    valid users = %S                       #允许访问的用户
    sync always = yes                      #同步模式工作
    create mask = 0755                     #创建文件权限
    directory mask = 0755                  #创建目录权限
[public]
    comment = public
    path = /office/public
    write list = +staff                   #共享写列表
    read only = No                        #非只读模式,就是可写
    sync always = yes
    create mask = 0777
    directory mask = 0777
    guest ok = Yes                        #所有人可见
[ios]
    comment = ios
    path = /office/ios
    write list = +ios
    #read only = No           
    sync always = yes
    create mask = 0777
    directory mask = 0777
    guest ok = yes
[web]
    comment = web
    path = /office/web
    write list = +web
    #read only = No
    sync always = yes   
    create mask = 0777
    directory mask = 0777
    guest ok = Yes

   使用ios部门tom登录测试

wKioL1M9pLDQo-2hAAFROviD2K0150.jpg

wKiom1M9pNjBlAyfAAFoxsaHRW4157.jpg

wKioL1M9pLDRM2dwAAFwg3HwMtc266.jpg

wKiom1M9pNiyEwWcAAEsBnWRwJo281.jpg

   使用web部门bob登录测试

wKioL1M9pjODcKlXAAFLmmqnecM643.jpg

wKiom1M9pluAra6hAAGYwNUh9m8616.jpg

wKioL1M9pjOT-iW1AAFC4efzR7k244.jpg

wKiom1M9plzAKWZrAAExMDrx4nU391.jpg

   使用test用户登录测试

wKioL1M9qRDCRVxUAAG6OIdlUes338.jpg

wKiom1M9qTji7Q6oAAFE-U9OB5w757.jpg

wKioL1M9qRCQlPxPAAE10_hBZ6A052.jpg

samba的使用介绍到此,欢迎博友提出疑问和指正。