什么是samba?
- samba与nfs作用相同,也是网络文件系统,还有一个是ftp。
- samba能够在任何支持SMB协议的主机之间共享文件的一种实现,也包括windows,弥补了nfs的弊端。
- SMB协议是C/S型协议,一种在局域网上共享文件和打印机的一种通信协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
1.服务端安装。
yum -y install samba*
2.客户端安装。
yum -y install samba-client
3.服务端关闭防火墙和selinux,并启动服务。
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
systemctl start smb nmb
4.客户都安关闭防火墙和selinux。
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
进程 | 作用 | 端口 |
---|---|---|
nmbd | 提供基于NetBIOS主机名称的解析。 | 139/tcp,445/tcp |
smbd | 提供对服务器中文件、打印资源的共享访问。 | 137/udp,138/udp |
winbindd + ldap | 对应Windows AD活动目录,现已淘汰使用。 |
账户 | 密码 |
---|---|
samba服务端系统用户 | Samba服务单独设置密码,与系统用户登录密码是单独分开的。 通过smbpasswd -a USERNAME命令设置 |
smbpasswd命令参数 | 释义 |
---|---|
-a Sys_User | 添加系统用户为samba用户并为其设置密码 |
-d | 禁用用户帐号 |
-e | 启用用户帐号 |
-x | 删除用户帐号 |
1.服务端创建samba账户tom,此时的tom账户就是服务器系统账户。
useradd -r -M -s /sbin/nologin tom
2.给samba用户设置密码,注意该密码与服务器登录密码不同。
3.登录。
- 配置文件地址:/etc/samba/smb.conf,为主配置文件。
配置文件三大组成 | 作用 |
---|---|
[global] | 全局配置,此处的设置项对整个samba服务器都有效 |
[homes] | 宿主机目录共享设置,此处用来设置Linux用户的默认共享,对应用户的宿主目录。 当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主目录中 |
[printers] | 打印机共享设置,一般不用。 |
1.testparm命令检查配置文件是否有语法错误,以及显示最终生效的配置,ok说明没有语法错误。
参数 | 释义 |
---|---|
workgroup | 表示设置工作组名称 |
server string | 表示描述samba服务器 |
security | 表示设置安全级别,其值可为share、user、server、domain |
passdb backend | 表示设置共享帐户文件的类型,其值可为tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(兼容旧版本samba密码文件) |
comment | 表示设置对应共享目录的注释,说明信息,即文件共享名 |
browseable | 表示设置共享是否可见 |
writable | 表示设置目录是否可写 |
path | 表示共享目录的路径 |
guest ok | 表示设置是否所有人均可访问共享目录 |
public | 表示设置是否允许匿名用户访问 |
write list | 表示设置允许写的用户和组,组要用@表示,例如 write list = root,@root |
valid users | 设置可以访问的用户和组,例如 valid users = root,@root |
hosts deny | 设置拒绝哪台主机访问,例如 hosts deny = 192.168.72.1 |
hosts allow | 设置允许哪台主机访问,例如 hosts allow = 192.168.72.2 |
printable | 表示设置是否为打印机 |
- Samba服务器的安全级别有三个,分别是user,server,domain
- 以前的samba版本支持的安全级别有四个,分别是share,user,server,domain.
- share是用来设置匿名访问的,但现在的版本已经不支持share了,但是还是可以实现匿名访问的,只是配置方式变了。
安全级别 | 作用 |
---|---|
user | 基于本地的验证 |
server | 由另一台指定的服务器对用户身份进行认证 |
domain | 由域控进行身份验证 |
1.服务端创建系统用户qingjun,并设置远程访问共享文件夹时的登录密码。
useradd qingjun
smbpasswd -a qingjun
2.测试配置文件参数browseable参数。不添加该参数时,客户端查看时会显示出共享目录。
3.添加该参数时,则不显示共享目录。
1.客户端查看配置信息,指定服务端系统用户查看。
smbclient -L 192.168.130.160 -U qingjun
2.客户端命令访问。
smbclient //192.168.130.160/qingjun -U qingjun
3.使用?查看操作命令。
4.客户端创建目录111,服务端查看。
1.将服务端的qingjun用户家目录目录挂载到客户端本地的/opt目录。
mount -t cifs //192.168.130.160/qingjun /opt -o username=qingjun,password=citms
2.客户端/opt目录下创建文件baimu,服务端查看效果。
1.将服务端的qingjun用户家目录挂载到客户端本地的/opt/111目录。
//192.168.130.160/qingjun /opt/111 cifs defaults,username=qingjun,password=citms 0 0
mount -a
2.查看挂载效果。已将服务端的/home/qingjun目录下的内容挂载到客户端的/opt/111目录下。
- 使用上面方式存在一定安全问题,用户会知道系统用户,这是非常不安全的,所以这时可以将服务端上的系统用户映射成一个不存在的假用户,客户端使用假用户访问。
1.此时服务端存在系统用户qingjun。
2.创建/etc/samba/smbusers文件,将左边的系统用户映射成右边不存在的假用户。
3.修改配置文件,指定刚才创建的文件,并配置共享目录。
systemctl restart smb nmb
6.客户端使用假用户查看共享资源。
smbclient -L 192.168.130.160 -U 999
vim /etc/fstab
//192.168.130.160/beijing /opt cifs defaults,username=999,password=citms 0 0
##############################################
mount -a
8.验证效果。此时客户端上显示的文件属主属组为1000普通用户创建,而服务端显示的文件属主属组为qingjun用户。
- 以上方式存在密码泄露问题,这种情况下可以使用匿名共享,不输入密码直接挂载访问。
1.创建共享目录/opt/baimu1,修改目录权限为777。
2.修改配置文件,指定使用BadUser用户访问,配置共享策略。
3.重启服务。
systemctl restart smb nmb
vim /etc/fstab
//192.168.130.160/wuhan /opt cifs defaults,username=BadUser 0 0
#######################################
mount -a