(1)samba服务简述
- Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。例如Windows和Linux,Windows和Unix等,这时可以使用sanba服务器来解决这个问题。
- Samba的工作方式
- SAMBA主要提供的是SMB/CIFS或者NETBIOS协议的。
- 所以只要使用了SAMBA,就能实现让Linux出现在Windows的网上邻居里,或者,让Windows的文件共享在Linux上。
一旦在linux上安装之后,有两个主要进程:
nmbd :提供NETBIOS 名称解析的
smdb : 提供文件共享的。
而由于NETBIOS协议对于windows来讲监听TCP的139端口和UDP的137,138端口 ,所以nmbd在linux上模拟出了udp的137和138端口,以及tcp的139端口,smdb上模拟出 tcp的445端口。而SAMBA将在Linux上同时监听这4个端口。
主配置文件:/etc/samba/smb.conf,由samba-common包提供;
[global]全局配置段
网络操作:
workgroup = '' #组名
server string = '' #服务器信息介绍
interfaces = lo eth0 或ip地址例如127. 172.16 #监听那个网卡地址
hosts allow = 127. 192.168.12. 192.168.13. #指定允许访问的主机IP
wins support=yes #支持Windows开启
日志操作:
log file = /var/log/samba/log.%m #指定日志存放路径,%m为来访的主机名
max log size = 50#定义日志文件最大容量为50K
标准服务操作:
security = user
设定安全级别:取值有四个;
share:匿名共享;
user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是系统用户,但密码非为/etc/shadow中的密码,而由samba自行管理的文件,其密码文件的格式由passdb backend进行定义;
server:由第三方服务进行统一认证;
domain:使用DC进行认证;基于kerberos协议进行;
passdb backend = tdbsam
Printing Options
load printers = yes
cups options = raw
共享文件系统配置
[SHARED_NAME]
有三类:
[homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录;
[printers]:定义打印服务;
[shared_fs]:定义共享的文件系统;
常用指令:
comment:注释信息;
path:当前共享所映射的文件系统路径;
browseable:是否可浏览,指是否可被用户查看;
guest ok:是否允许来宾账号访问;
public:是否公开所有用户;
writable:是否可写;
read only:是否为只读;
write list:拥有写权限的用户列表;
用户名
@组名
+组名
(2)samba服务的安装配置
环境为两台CentOS7虚拟主机
- 首先关闭selinux和防火墙
[root@samba-105 ~]# systemctl stop firewalld
[root@samba-105 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@samba-105 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@samba-105 ~]# systemctl reboot #重启生效
- 服务器端安装samba
[root@samba-105 ~]# yum -y install samba samba-client #安装samba服务和客户端
[root@samba-105 ~]cp /etc/samba/smb.conf{,.bak} #备份配置文件
[root@samba-105 ~]# vim /etc/samba/smb.conf #编辑配置文件()
# Global parameters
[global]
printcap name = cups
security = USER #设定security安全级别是user
workgroup = SAMBA #工作组名
idmap config * : backend = tdb
cups options = raw
[root@samba-105 ~]# testparm #语法检查,无异常后回车,会显示当前配置
- 由于设定security安全级别是user,用户必须是系统用户,所以接下来创建samba用户账号。
samba用户管理:smbpasswd
格式:smbpasswd [options] USERNAME
-a:添加
-x:删除
-d:禁用
-e:启用 - pdbedit
-L:列出samba服务中的所有用户;
-a, --create:添加用户为samba用户;
-u, --user=USER:要管理的用户;
-x, --delete:删除用户;
-t, --password-from-stdin:从标准输出接收字符串作为用户密码;
使用空提示符,而后将密码输入两次;
[root@samba-105 ~]#useradd smbuser1 #创建smbuser1用户账号
[root@samba-105 ~]# smbpasswd -a smbuser1 #添加samba用户和为用户修改密码
New SMB password: #创建密码
Retype new SMB password: #再次输入确认密码
[root@samba-105 ~]#systemctl start nmb.service smb.service #启动smb服务
(3)客户端测试
首先关闭客户端selinux和防火墙
[root@client-90 ~]# smbclient -L 172.16.15.105 -Usmbuser1 #查询samba服务器信息
Enter SAMBA\smbuser1's password:
Sharename Type Comment
--------- ---- -------
samba_dir Disk This is a new share directory
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.7.1)
smbuser1 Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
AOZHONG0 DSERP4
SAMBA TEST
WORKGROUP YUYUEKANBAN
[root@client-90 ~]# smbclient //172.16.15.105/smbuser1 -U smbuser1 #用户名登录samba
Enter SAMBA\smbuser1's password:
Try "help" to get a list of possible commands.
smb: \> ls #查询服务器home/smbuser1目录里面文件
. D 0 Wed Jun 27 11:26:53 2018
.. D 0 Wed Jun 27 11:26:53 2018
.bash_logout H 18 Tue Apr 10 20:53:01 2018
.bash_profile H 193 Tue Apr 10 20:53:01 2018
.bashrc H 231 Tue Apr 10 20:53:01 2018
17811456 blocks of size 1024. 16641032 blocks available
smb: \> lcd /etc #切换目录
smb: \> put fstab #上传fatab文件到服务器home/smbuser1目录
putting file fstab as \fstab (227.0 kb/s) (average 227.1 kb/s)
smb: \> exit
服务器端上:
[root@samba-105 ~]# ll /home/smbuser1 #查询/home/smbuser1目录中是否有上传文件
total 4
-rwxr--r-- 1 smbuser1 smbuser1 465 Jun 27 20:10 fstab
-
windows平台测试
(4)基于用户权限访问设置
- 所有用户都可访问测试目录有写权限
[root@samba-105 ~]# mkdir /data/samba/files -pv #创建测试目录
[root@samba-105 ~]# vim /etc/samba/smb.conf #编辑配置文件,所有用户都可访问测试目录
...
[myfiles]
comment = A test shared dir.
path =/data/samba/files
public=yes
writable =yes
[root@samba-105 ~]# testparm #语法检查
[root@samba-105 ~]#systemctl restart smb.service #重启samba
- 只有用户smbuser2可以访问读写测试目录
[root@samba-105 ~]# useradd smbuser2 #添加smbuser2用户
[root@samba-105 ~]# smbpasswd -a smbuser2 #添加samba用户和为用户修改密码
New SMB password:
Retype new SMB password:
Added user smbuser2.
[root@samba-105 ~]# setfacl -m u:smbuser2:rwx /data/samba/files #设置smbuser2读写此目录权限
[root@samba-105 ~]# getfacl /data/samba/files/ #查询此目录用户权限
getfacl: Removing leading '/' from absolute path names
# file: data/samba/files/
# owner: root
# group: root
user::rwx
user:smbuser2:rwx
group::r-x
mask::rwx
other::r-x
[root@samba-105 ~]# vim /etc/samba/smb.conf
...
[myfiles]
browseable = yes #登陆后是否可见
comment = A test shared dir. #描述
create mask = 0664 #默认权限
directory mask = 0775 #目录默认权限
path = /data/samba/files #共享目录
read only = No #是否只读
write list = smbuser2 #可写用户
[root@samba-105 ~]# testparm
[root@samba-105 ~]# systemctl start nmb.service smb.service
-
访问时候用smbuser1登录
-
访问时候用smbuser2登录