简介
Samba的主要功能是使Windows与Linux之间能够共享文件和打印服务。Samba采用客户端/服务器端架构模式,使用SMB协议。本节将介绍Samba服务器的安装与运行管理,以及Samba服务配置文件,学习可匿名访问与带用户验证访问的共享文件配置。
Samba服务器的安装与运行管理
1.Samba服务器的安装
使用yum或者apt命令安装Samba服务器,命令如下:
root@fff-PC:~# apt install samba
2.Samba服务器的运行管理
Samba服务器的守护进程为smb。
1)启动smb服务
root@fff-PC:~# systemctl start smbd.service
2)关闭smb服务
root@fff-PC:~# systemctl stop smbd.service
3)重启smb服务
systemctl restart smbd.service
4)设置smb服务自启
systemctl enable smbd.service
5)关闭smb服务自启
systemctl disable smbd.service
Samba服务配置文件
在Samba服务器安装成功后,系统会创建/etc/samba目录并在此目录中创建3个文件,命令如下:
root@fff-PC:~# ll /etc/samba/
总用量 20
-rw-r--r-- 1 root root 8 8月 28 2020 gdbcommands
-rw-r--r-- 1 root root 8743 7月 24 14:34 smb.conf
drwxr-xr-x 2 root root 4096 8月 28 2020 tls
在centos中,lmhosts文件负责Samba服务主机IP地址与域名的解析,与hosts文件的功能类似;smb.conf文件为Samba的主配置文件;smb.conf.example文件为Samba配置的示例文件,而我的试验机是deepin所以有些不一样,下面对常用的配置项进行说明。
Samba配置可以分为全局配置和共享配置:
全局配置主要针对服务器的运行、认证和访问限制等进行设置,作用范围是整个服务器;共享配置主要针对共享目录的路径、访问权限等进行设置,作用范围只针对本共享目录。
下面是一个简化的Samba配置文件,这里展示了4个配置单元,第1个配置单元名称为[global],是全局配置,并不会真正展示给客户。从第2个配置单元开始就是共享配置,第2个配置单元名称为[homes],是用户家目录的共享配置,在默认情况下,Samba会共享系统用户的家目录给用户个人,当系统用户登录后就能看到以自己名字命名的家目录。第3个配置单元名称为[printers],是默认的打印机共享配置。
上述3个配置单元的名称是Samba系统定义的,不能修改,但可以修改里面的配置项。第4个配置单元名称为[userfile],是用户自定义的配置单元,该单元名称就是用户登录Samba服务器时看到的共享文件的名称。
Samba配置文件内容如下:
Samba的配置项非常丰富,有兴趣的读者可以查阅官方手册,这里介绍常用的全局配置项及功能。如下表:
Samba常用的全局配置项及功能
Samba常用的共享配置项及功能
可匿名访问的共享文件配置
可匿名访问的Samba服务器是指不需要输入用户名和密码就可以访问的服务器。下面介绍配置过程。这里的实验环境使用deepin
1.配置IP地址和安装Samba服务器
2.修改主配置文件
配置工作组为WORKGROUP,并且不需要认证就可以登录,自定义共享目录为public,路径位置为/publicdir,允许匿名访问且匿名用户有写入权限,内容如下:
也可以根据需要,进行修改。
要实现匿名访问,最重要的是在全局配置中加入map to guest=Bad User,并在共享目录中加入guest ok=yes或public=yes,其他配置可以根据需要修改。
注意:不同版本的samba,配置文件部分参数不同
3.创建共享目录并调整目录权限
根据需要创建共享目录并调整目录权限,由于本实验开放了匿名用户的写入权限,因此调整共享目录权限为777,命令如下:
4.测试在以上配置成功后,使用testparm命令测试主配置文件的语法,并重启smb服务,命令如下:
root@fff-PC:~# testparm
使用Windows作为客户端进行测试,打开“运行”对话框,输入“\10.160.0.199”即可。
使用Linux作为客户端进行测试,必须先安装Samba的客户端程序samba-client,命令如下:
root@fff-PC:~# apt install smbclient
在安装成功后,就可以使用smbclient工具了,首先列出Samba服务器共享目录列表,命令格式如下:
其中,username%password是Samba用户名和密码,中间以“%”分隔。当不输入用户名和密码时,默认以匿名用户登录,系统还是会提示输入密码,直接按Enter键即可登录,命令如下:
root@fff-PC:~# smbclient -L 192.168.58.102
Enter WORKGROUP\root's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.9.5-Debian)
hhh Disk
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP FFF-PC
root@fff-PC:~#
还可以把Samba服务器的共享目录挂载到客户端本地,由于挂载的文件格式为CIFS,因此要安装cifs-utils包,命令如下:
apt install cifs-utils
挂载的命令格式如下:
其中,username和password是Samba用户名和密码,如果是匿名登录,则使用如下命令:
以guest用户的身份登录就不需要输入用户名和密码了。本例的挂载过程如下:
root@fff-PC:~# mount -t cifs //192.168.58.102/hhh /root/test -o guest
root@fff-PC:~# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
udev devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 391M 3.2M 388M 1% /run
/dev/sda3 ext4 121G 8.0G 107G 8% /
tmpfs tmpfs 2.0G 14M 1.9G 1% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 ext4 1.5G 107M 1.3G 8% /boot
tmpfs tmpfs 391M 48K 391M 1% /run/user/1000
tmpfs tmpfs 391M 0 391M 0% /run/user/0
//192.168.58.102/hhh cifs 121G 15G 107G 12% /root/test
带用户验证的共享文件配置
在默认情况下,Samba服务器是需要验证用户身份才可以登录的,而且服务器中的每个共享目录都可以独立控制用户的访问权限。
1.Samba用户管理
Samba后台默认以tdbsam的形式存储用户信息,Samba用户必须是系统用户(Samba虚拟用户也有对应的系统用户),可以使用smbpasswd或pdbedit工具来管理Samba用户,命令如下:
2.带用户验证的共享文件配置过程
1)修改主配置文件在安装好Samba服务器后,修改主配置文件,设定采用user认证模式,共享目录名称为sharedoc,路径位置为/sharedoc,该目录为大家可见却只允许u1用户访问,内容如下:
2)添加系统用户和Samba用户
无论是使用smbpasswd还是pdbedit添加Samba用户,都要为该Samba用户设置一个密码,该密码可以与它的系统登录密码不一样。
注:在添加系统用户时,可以不给该用户设置密码,该用户就不可以登录系统。这样一来,即使不法分子知道了用户名,也不能登录。
3)创建共享目录
4)测试
在Windows中连接Samba服务器,会弹出如图1所示的对话框,输入正确的用户名和密码,单击“确定”按钮即可进入Samba用户共享列表窗口查看共享目录,如图2所示。由于sharedoc目录设置了只允许u1用户访问,所以其他用户在登录时是无法进入该目录的,强行进入会弹出“Windows安全”对话框并提示“拒绝访问”,如图3所示。
图1
图2
图3
3.Samba虚拟用户配置
Samba支持把一个或多个非系统用户名映射到一个Samba用户名,当用户使用这些非系统用户名登录时就相当于使用了映射到的Samba用户名来登录,这些非系统用户也称为Samba虚拟用户。
1)修改主配置文件
在全局配置中增加如下配置:
2)编辑smbusers文件
3)登录测试
使用虚拟用户登录与使用普通Samba用户登录的方法是一样的,但用户名使用虚拟用户的,密码使用映射到的实际用户的,以本例来说,虚拟用户vu1在登录时使用的密码是实际用户u1的登录密码。在虚拟用户登录成功后,系统会认为是实际用户登录的,如果实际用户共享了家目录,那么虚拟用户在登录时也会看到实际用户的家目录,Samba虚拟用户共享列表窗口如图所示。
Samba虚拟用户共享列表窗口