Samba服务器        

        在早期的网络世界中,文件数据输大多是使用FTP服务,但是FTP服务传输档案时我们无法直接去修改主机上面的档案数据。NFS服务可以实现在客户端的机器上直接使用服务器上面的文件,但是NFS主要在unix系列操作系统上使用,而为了实现windows和unix系列系统之间能够相互沟通,就产生了samba服务。

        samba是架构在NetBIOS通信协议上面所开发出来的。NetBIOS是无法跨越路由,而现在Samba不仅能与局域网主机分享资源,还能与全世界的电脑分享资源,就是由NetBIOS over TCP/IP技术解决。由于NetBIOS在局域网内实在是很好用,所以微软的网络架构就使用了这个协议。而samba最早发展的时候,其实是想要让linux系统可以加入windows的系统当中来共享使用彼此的文件数据,所以samba就架构在NetBIOS发展出来了。

samba的主要功能如下:

  • 进行文件共享
  • 可以提供使用者登入samba主机时的身份认证,以提供不同身份的个别资料
  • 可以进行windows网络上的主机名称解析(NetBIOS name)

Samba服务搭建:

        Samba服务需是基于两个服务来进行控制和共享目录的:

  • nmbd:主要用于管理工作组、NetBIOS Name等的解析

        主要利用UDP协议开启port137、port138来负责名称解析的任务

  • smbd:主要功能是用来管理samba主机共享的目录、文件等

        主要利用可靠的TCP协议来传输数据,开放的端口为139和445(需要分配)

 Samba服务内容:

//安装samba包
[root@lxb ~]# yum install samba -y

//samba的主配置文件在/etc/samba/smb.conf
[root@lxb ~]# vim /etc/samba/smb.conf
[global]                           #全局配置
        workgroup = SAMBA          #设定samba服务要配置的工作组
        security = user            #用户认证登录方式 (share,user,server,domain)

        passdb backend = tdbsam       
        #认证文件格式(数据库格式为tdbsam,位置在/var/lib/samba/private/passwd.tdb)

        #打印机配置
        printing = cups                
        printcap name = cups
        load printers = yes
        cups options = raw

[homes]                                #家目录(用户对自己家目录的共享配置)
        comment = Home Directories     #描述
        valid users = %S, %D%w%S       #允许查阅用户
        browseable = No                #是否共享家目录
        read only = No                 #只读权限  (no为读写,yes为只读)
        inherit acls = Yes             #用户的ACL权限是否继承

[printers]                    #打印机
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No
    
[print$]                        #打印机配置
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775


//samba的创建用户指令
    ①smbpasswd:使用SMB服务的smbpasswd命令给系统用户设置SMB密码
            smbpasswd -a增加用户
            smbpasswd -x删除用户
    ②管理samba用户的数据库
            pdbedit -a username:新建samba账户
            pdbedit -x username:删除samba账户
            pdbedit -L:列出samba用户列表,读取passdb.tdb数据库文件
[root@server ~]# smbpasswd -a xiaoming
    //创建xiaoming用户  --- 需要设置密码
New SMB password:
Retype new SMB password:
Added user xiaoming.

[root@server ~]# pdbedit -a xiaohong
    //管理xiaohong用户的数据库
new password:
retype new password:
Unix username:        xiaohong
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-151211106-1360945331-4267571139-1001
Primary Group SID:    S-1-5-21-151211106-1360945331-4267571139-513
Full Name:            
Home Directory:       \\LXB\xiaohong
HomeDir Drive:        
Logon Script:         
Profile Path:         \\LXB\xiaohong\profile
Domain:               LXB
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          三, 06 2月 2036 23:06:39 CST
Kickoff time:         三, 06 2月 2036 23:06:39 CST
Password last set:    二, 28 12月 2021 22:26:52 CST
Password can change:  二, 28 12月 2021 22:26:52 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

[root@server ~]# pdbedit -L
        //列出samba用户列表
xiaoming:2002:
xiaohong:2003:



//而想要查看samba的客户端则需要下载samba-client这个包
[root@lxb ~]# yum install samba-client -y
//这个包主要是提供samba服务端的认知登录

//关于smbclient的用法
[root@lxb ~]#  smbclient  ?
用法: smbclient [-?EgqBVNkPeC] [-?|--help] [--usage] [-R|--name-resolve=NAME-RESOLVE-ORDER]
        [-M|--message=HOST] [-I|--ip-address=IP] [-E|--stderr] [-L|--list=HOST]
        [-m|--max-protocol=LEVEL] [-T|--tar=<c|x>IXFvgbNan] [-D|--directory=DIR]
        [-c|--command=STRING] [-b|--send-buffer=BYTES] [-t|--timeout=SECONDS]
        [-p|--port=PORT] [-g|--grepable] [-q|--quiet] [-B|--browse]
        [-d|--debuglevel=DEBUGLEVEL] [-s|--configfile=CONFIGFILE]
        [-l|--log-basename=LOGFILEBASE] [-V|--version] [--option=name=value]
        [-O|--socket-options=SOCKETOPTIONS] [-n|--netbiosname=NETBIOSNAME]
        [-W|--workgroup=WORKGROUP] [-i|--scope=SCOPE] [-U|--user=USERNAME] [-N|--no-pass]
        [-k|--kerberos] [-A|--authentication-file=FILE] [-S|--signing=on|off|required]
        [-P|--machine-pass] [-e|--encrypt] [-C|--use-ccache] [--pw-nt-hash]
        service <password>

//smbclient 后面携带挂载信息(ip)  [-U 用户]  
//如果用户没有则默认为查看

[root@lxb ~]# smbclient -L //192.168.220.129
Enter WORK\root's password: 
Anonymous login successful

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	IPC$            IPC       IPC Service (Samba 4.14.5)
SMB1 disabled -- no workgroup available

 samba服务器的文件配置:

//配置在/etc/samba/smb.conf [XXX] #文件名称 comment = XXX #文件描述 path = XXX #共享文件路径 --- 产生映射 (/home/$u --- 对应在/home/下的用户产生映射) public = yes/no #是否允许账号访问共享 guest ok = yes/no #功能同public一样 browseable = yes/no #是否让所有用户看到这个项目(如果是no就表示隐藏) writable = yes/no #用户是否具有可写权限 read only = yes/no #writable = yes #设置共享是否具有只读权限read only=no类似于writable = yes #如果同时设置,则放在后面的设置生效 admin user = root #设置共享的管理员,多用户之间使用逗号隔开 valid users = username #设置允许访问共享的用户,如果为空,将允许所有用户访问 #如valid users = user1,user2,@group1 (多用户和组用逗号分开,@group表示组) invalid users = username #设置不允许访问共享的用户 write list = username #如果前面标注writable=no,但是该字段中用户或组仍旧可读写 #如write list = user1,@group1 create mask = 0700 #创建文件的权限为700 directory mode = 0700 #创建的目录权限为700

 关于Samba的有效用户的变量:

符号

解释

%m

客户端主机的NetBIOS名

%M

客户端主机的FQDN

%H

当前用户家目录路

%g

当前登录的用户所属组

%L

samba服务器的NetBIOS名

%T

当前的日期和时间

%U

当前登录的用户的用户名

%h

samba服务器的主机名

%I

客户端主机的IP

%S

取代当前的[]里面的内容

用户家目录共享

//samba服务器测试用户为xiaoming和xiaohong

//添加用户与组
[root@lxb ~]# groupadd work 
[root@lxb ~]# useradd xiaoming -g work
[root@lxb ~]# useradd xiaohong -g work

//修改samba配置
[root@lxb ~]# vim /etc/samba/smb.conf
    [global]
            workgroup = work
    [homes]
        browseable = No
        read only = No

//关闭防火墙和seliunx,并重启服务
[root@lxb ~]# systemctl stop firewalld
[root@lxb ~]# getenforce 
Permissive
[root@lxb ~]# systemctl restart smb nmb

//然后添加samba用户
[root@lxb ~]# smbpasswd -a xiaoming
New SMB password:
Retype new SMB password:
Added user xiaoming.
[root@lxb ~]# smbpasswd -a xiaohong
New SMB password:
Retype new SMB password:
Added user xiaohong.

//然后创建xiaohong和xiaoming的家目录下文件,并输入文件
[root@lxb ~]# touch /home/xiaoming/ming
[root@lxb ~]# touch /home/xiaohong/hong
[root@lxb ~]# echo "xiaoming" > /home/xiaoming/ming
[root@lxb ~]# cat /home/xiaoming/ming
xiaoming
[root@lxb ~]# echo "xiaohong" > /home/xiaohong/hong
[root@lxb ~]# cat /home/xiaohong/hong 
xiaohong

//此时查看xiaoming和xiaohong
[root@lxb ~]# smbclient -L //192.168.220.129 -U xiaoming
Enter WORK\xiaoming's password: 

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	IPC$            IPC       IPC Service (Samba 4.14.5)
	xiaoming        Disk      Home Directories
SMB1 disabled -- no workgroup available
[root@lxb ~]# smbclient -L //192.168.220.129 -U xiaoming
Enter WORK\xiaoming's password: 

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	IPC$            IPC       IPC Service (Samba 4.14.5)
	xiaoming        Disk      Home Directories
SMB1 disabled -- no workgroup available
[root@lxb ~]# smbclient -L //192.168.220.129 -U xiaohong
Enter WORK\xiaohong's password: 

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	IPC$            IPC       IPC Service (Samba 4.14.5)
	xiaohong        Disk      Home Directories
SMB1 disabled -- no workgroup available


//客户端先下载samba-client包
[root@localhost ~]# yum install samba-client -y

//此时去客户端挂载这两个文件
[root@localhost guazai]# mkdir -pv /{xiaohong,xiaoming}
mkdir: created directory '/xiaohong'
mkdir: created directory '/xiaoming'
[root@localhost /]# mount //192.168.220.129/xiaoming /xiaoming -o username=xiaoming,password=123 
[root@localhost /]# mount //192.168.220.129/xiaohong /xiaohong -o username=xiaohong,password=123 
[root@localhost /]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    872M     0  872M   0% /dev
tmpfs                       901M     0  901M   0% /dev/shm
tmpfs                       901M   52M  849M   6% /run
tmpfs                       901M     0  901M   0% /sys/fs/cgroup
/dev/mapper/rhel-root        37G  5.5G   32G  15% /
/dev/nvme0n1p1             1014M  229M  786M  23% /boot
tmpfs                       181M  1.2M  179M   1% /run/user/42
tmpfs                       181M  4.6M  176M   3% /run/user/0
/dev/sr0                    7.9G  7.9G     0 100% /run/media/root/RHEL-8-2-0-BaseOS-x86_64
//192.168.220.129/xiaoming   17G  6.0G   12G  35% /xiaoming
//192.168.220.129/xiaohong   17G  6.0G   12G  35% /xiaohong

//此时在客户端的挂载点下分别创建文件
    //   /xiaoming下创建client_xiaoming
[root@localhost /]# cd /xiaoming/
[root@localhost xiaoming]# ll
total 4
-rwxr-xr-x. 1 root root 9 Dec 28 09:39 ming
[root@localhost xiaoming]# touch client_xiaoming
[root@localhost xiaoming]# ll
total 4
-rwxr-xr-x. 1 root root 0 Dec 28 10:13 client_xiaoming
-rwxr-xr-x. 1 root root 9 Dec 28 09:39 ming

    //  /xiaohong下创建client_xiaohong
[root@localhost xiaoming]# cd /xiaohong/
[root@localhost xiaohong]# ll
total 4
-rwxr-xr-x. 1 root root 9 Dec 28 09:40 hong
[root@localhost xiaohong]# touch client_xiaohong
[root@localhost xiaohong]# ll
total 4
-rwxr-xr-x. 1 root root 0 Dec 28 10:16 client_xiaohong
-rwxr-xr-x. 1 root root 9 Dec 28 09:40 hong

//此时前往服务端查看xiaohong和xiaoming的home下文件

    //此时客户端创建的client_xiaoming在服务端显示的是xiaoming用户和work组
[root@lxb xiaoming]# cd /home/xiaoming/
[root@lxb xiaoming]# ll
总用量 4
-rwxr--r--. 1 xiaoming work 0 12月 28 23:13 client_xiaoming
-rw-r--r--. 1 root     root 9 12月 28 22:39 ming
-rwxr--r--. 1 xiaoming work 0 12月 28 23:14 server_xiaoming

    //此时客户端创建的client_xiaohong在服务端显示的是xiaohong用户和work组
[root@lxb xiaoming]# cd ../xiaohong/
[root@lxb xiaohong]# ll
总用量 4
-rwxr--r--. 1 xiaohong work 0 12月 28 23:16 client_xiaohong
-rw-r--r--. 1 root     root 9 12月 28 22:40 hong

//原因:在客户端挂载时,使用的是samba下的xiaohong的id和password(我没有设置xiaoming的用户密码)
使用客户端创建文件显示的是xiaoming和xiaohong

 共享自定义目录

//SMB服务器必须是work工作组的一个成员,共享目录为/public
//任何人都可以浏览,读取该目录下的文件
//但是不能删除别人创建的文件,可删除自己创建的文件

//分析:此时要求其他人可以创建但是不能删除别人的东西 --->权限固定rwxt
//此时去修改samba的配置文件,增加一个public
[root@lxb home]# vim /etc/samba/smb.conf
[public]
        comment = gongyong
        path = /public
        writeable = yes
        browseable = yes

//然后去创建/public的文件夹,并给予其他人rwxt权限
[root@lxb /]# mkdir /public
[root@lxb /]# chmod o=rwxt /public 

//服务端在/public下创建一个文件server_root
[root@lxb /]# cd /public/
[root@lxb public]# ll
总用量 0
[root@lxb public]# touch server_root
[root@lxb public]# ll
总用量 0
-rw-r--r--. 1 root root 0 12月 29 00:03 server_root

//重启服务
[root@lxb xiaoming]# systemctl restart nmb smb

//客户端查看
[root@localhost /]# smbclient  -L //192.168.220.129
Enter SAMBA\root's password: 
Anonymous login successful

	Sharename       Type      Comment
	---------       ----      -------
	homes           Disk      Home Directories
	print$          Disk      Printer Drivers
	public          Disk      gongyong
	IPC$            IPC       IPC Service (Samba 4.14.5)
SMB1 disabled -- no workgroup available

//此时用xiaoming去挂载/public
[root@localhost /]# mkdir /public
[root@localhost /]# mount //192.168.220.129/public /public -o username=xiaoming,password=123

//xiaoming去创建文件client_xiaoming,但是删不了服务端的文件server_root
[root@localhost /]# cd /public/
[root@localhost public]# ll
total 0
-rwxr-xr-x. 1 root root 0 Dec 28 11:03 server_root
[root@localhost public]# touch client_xiaoming
[root@localhost public]# rm server_root 
rm: remove regular empty file 'server_root'? y
rm: cannot remove 'server_root': Permission denied

//xiaohong同理