Samba简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
在此之前我们已经了解了NFS,NFS与samba一样,也是在网络中实现文件共享的一种实现,但不幸的是,其不支持windows平台,而本章要提到的samba是能够在任何支持SMB协议的主机之间共享文件的一种实现,当然也包括windows。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB协议是C/S型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
Samba监听端口:
- TCP:相对应的服务是smbd服务,其作用是提供对服务器中文件、打印资源的共享访问。
- 139
- 445
- UDP:相对应的服务是nmbd服务,其作用是提供基于NetBIOS主机名称的解析。
- 137
- 138
samba进程:
- nmbd:对应netBIOS
- smbd:对应cifs协议
- winbindd+ldap:对应Windows AD活动目录
samba用户:
- 账户:都是系统用户/etc/passwd
- 密码:Samba服务自有密码文件,通过smbpasswd -a USERNAME命令设置
#smbpasswd命令:
-a Sys_User #添加系统用户为samba用户并为其设置密码
-d #禁用用户帐号
-e #启用用户帐号
-x #删除用户帐号
Samba安全级别:
- user:基于本地的验证
- server:由另一台指定的服务器对用户身份进行认证
- domain:由域控进行身份验证
- share:匿名访问(现版本已取消这个安全级别,匿名访问配置方式发生了改变)
Samba配置文件:
- /etc/samba/smb.conf
- [global]:全局配置,此处的设置项对整个samba服务器都有效
- [homes]:宿主目录共享设置,此处用来设置Linux用户的默认共享,对应用户的宿主目录。当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主目录中
- [printers]:打印机共享设置
常用配置文件参数:
参数 | 配置 |
---|---|
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 | 表示设置是否为打印机 |
可以使用testparm命令测试配置文件是否有语法错误,以及显示最终生效的配置
配置Samba
配置匿名共享
#安装Samba
[root@lynkser ~]# yum -y install samba
#编辑配置文件
[root@lynkser ~]# vim /etc/samba/smb.conf
[global]
map to guest = Bad_User
#创建共享目录
[root@lynkser ~]# mkdir /share
[root@lynkser ~]# chmod 777 /share/
#添加共享配置
[root@lynkser ~]# vim /etc/samba/smb.conf
[lynk]
comment = lynk
path = /opt/share
browseable = yes
guest ok = yes
writable = yes
public = yes
#检查下配置有没有问题
[root@lynkser ~]# testparm /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[lynk]"
Loaded services file OK.
Server role: ROLE_STANDALONE
#启动服务
[root@lynkser ~]# systemctl start smb
[root@lynkser ~]# systemctl enable smb
#添加用户
[root@Lynkser ~]# useradd Bad_User
[root@Lynkser ~]# smbpasswd -a Bad_User
New SMB password:
Retype new SMB password:
Added user BadUser.
#配置防火墙富规则
[root@lynkser ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.0/24 service name=samba accept' --permanent
success
[root@lynkser ~]# firewall-cmd --reload
success
#配置SElinux
[root@lynkser ~]# setsebool -P samba_enable_home_dirs on
[root@lynkser ~]# chcon -Rt samba_share_t /opt/share
在客户端验证服务
#安装Samba客户端
[root@lynk ~]# yum install -y samba-client
#配置防火墙富规则
[root@lynk ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.129 service name=samba accept' --permanent
success
[root@lynk ~]# firewall-cmd --reload
success
#查看共享的资源
[root@lynk ~]# smbclient -L 192.168.26.129 -U "Bad User"
Enter SAMBA\Bad User's password:
OS=[Windows 6.1] Server=[Samba 4.6.2]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
lynk Disk lynk
IPC$ IPC IPC Service (Samba 4.6.2)
OS=[Windows 6.1] Server=[Samba 4.6.2]
Server Comment
--------- -------
Workgroup Master
--------- -------
#挂载Samba服务端共享文件到本地
[root@lynk ~]# mkdir /opt/share
[root@lynk ~]# mount -t cifs //192.168.26.129/lynk /opt/share -o username='Bad User'
[root@lynk ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.4G 17G 8% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 297M 108M 190M 37% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 3.8G 3.8G 0 100% /cdrom
//192.168.26.129/lynk 18G 1.4G 17G 8% /opt/share
#测试文件权限
[root@lynk ~]# cd /opt/share
[root@lynk share]# touch a
[root@lynk share]# mkdir b
[root@lynk share]# ll
total 0
-rw-r--r--. 1 nobody nobody 0 Jan 14 18:23 a
drwxr-xr-x. 2 nobody nobody 0 Jan 14 18:23 b
配置用户认证共享
#安装samba
[root@lynkser ~]# yum -y install samba
#新建samba用户并设置密码
[root@lynkser ~]# useradd -M lynksmb
[root@lynkser ~]# smbpasswd -a lynksmb
New SMB password:
Retype new SMB password:
Added user lynksmb.
#将lynksmb映射为share用户
[root@lynkser ~]# echo 'lynksmb = share' >> /etc/samba/smbusers
#编辑配置文件
[root@lynkser ~]# vim /etc/samba/smb.conf
username map = /etc/samba/smbusers
#创建共享文件并更改属主
[root@lynkser ~]# mkdir /opt/share
[root@lynkser ~]# chown -R lynk.lynk /opt/share
#添加一个共享配置
[lynk]
comment = lynk
path = /opt/share
browseable = yes
guest ok = yes
writable = yes
write list = share
public = yes
#检查配置文件
[root@lynkser ~]# testparm /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[lynk]"
Loaded services file OK.
Server role: ROLE_STANDALONE
#启动服务
[root@lynkser ~]# systemctl start smb
[root@lynkser ~]# systemctl enable smb
#配置防火墙富规则
[root@lynkser ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.0/24 service name=samba accept' --permanent
success
[root@lynkser ~]# firewall-cmd --reload
success
#配置SElinux
[root@lynkser ~]# setsebool -P samba_enable_home_dirs on
[root@lynkser ~]# chcon -Rt samba_share_t /opt/share
在客户端验证服务
#安装Samba客户端
[root@lynk ~]# yum install -y samba-client
#配置防火墙富规则
[root@lynk ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.129 service name=samba accept' --permanent
success
[root@lynk ~]# firewall-cmd --reload
success
#查看共享资源
[root@lynk ~]# smbclient -L 192.168.26.129 -U share
Enter SAMBA\share's password:
Domain=[LYNKSER] OS=[Windows 6.1] Server=[Samba 4.6.2]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
lynk Disk lynk
IPC$ IPC IPC Service (Samba 4.6.2)
lynksmb Disk Home Directories
Domain=[LYNKSER] OS=[Windows 6.1] Server=[Samba 4.6.2]
Server Comment
--------- -------
Workgroup Master
--------- -------
#挂载Samba服务端共享文件到本地
[root@lynk ~]# mkdir /opt/share
[root@lynk ~]# mount -t cifs //192.168.26.129/lynk /opt/share/ -o username=share,password=wasdjkl
[root@lynk ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.4G 17G 8% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 297M 108M 190M 37% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 3.8G 3.8G 0 100% /cdrom
//192.168.26.129/lynk 18G 1.4G 17G 8% /opt/share
#测试文件权限
[root@lynk ~]# cd /opt/share
[root@lynk share]# touch a
[root@lynk share]# mkdir b
实例
需求:
- 在server上配置SAMBA服务
- SAMBA服务器必须是STAFF工作组的一个成员
- 共享/common目录,共享名为common
- 只有192.168.26.0/24域内的客户端可以访问common共享
- common共享必须是可以浏览的
- natasha可以浏览共享中的内容,验证密码为tangkai
[root@lynkser ~]# yum install -y samba-*
[root@lynkser ~]# vim /etc/samba/smb.conf
workgroup = STAFF
[common]
path = /common
browseable = yes
[root@lynkser samba]# mkdir /common
[root@lynkser samba]# systemctl mask iptables.service ebtables.service
Created symlink from /etc/systemd/system/iptables.service to /dev/null.
Created symlink from /etc/systemd/system/ebtables.service to /dev/null.
[root@lynkser samba]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.0/24 service
name=samba accept' --permanent
success
[root@lynkser samba]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.0/24 service name=samba-client accept' --permanent
success
[root@lynkser samba]# firewall-cmd --reload
success
[root@lynkser samba]# useradd natasha
[root@lynkser samba]# smbpasswd -a natasha
New SMB password:
Retype new SMB password:
Added user natasha.
[root@lynkser samba]# setfacl -m u:natasha:r-x /common
[root@lynkser samba]# setsebool -P samba_enable_home_dirs 1
[root@lynkser samba]# chcon -Rt samba_share_t /common
[root@lynkser samba]# systemctl start smb nmb
[root@lynkser samba]# systemctl enable smb nmb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
[root@lynk ~]# yum install -y samba-client*
[root@lynk ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.129 service name=samba-client accept' --permanent
success
[root@lynk ~]# firewall-cmd --reload
success
[root@lynk ~]# mount -t cifs -o username=natasha,password=tangkai //192.168.26.129/common /mnt
[root@lynk ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.4G 17G 8% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 297M 108M 190M 37% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 3.8G 3.8G 0 100% /cdrom
//192.168.26.129/common 18G 1.4G 17G 8% /mnt
[root@lynk ~]# cd /mnt
[root@lynk mnt]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 15 00:04 aa
- 在server通过samba共享目录/storage
- 共享名为share
- 共享目录只能被192.168.26.0/24内的用户使用
- 共享目录share可以浏览
- 用户sarah能以读的方式访问此共享,密码为tangkai
- 用户kitty能以读写的方式访问此共享,密码为tangkai
- 此共享永久挂载在客户机的/mnt/dev目录,并使用用户sarah进行认证,任何用户可以临时通过kitty获得读写权限
[root@lynkser common]# mkdir /storage
[root@lynkser common]# chcon -Rt samba_share_t /storage
[root@lynkser common]# adduser sarah
[root@lynkser common]# adduser kitty
[root@lynkser common]# smbpasswd -a sarah
New SMB password:
Retype new SMB password:
Added user sarah.
[root@lynkser common]# smbpasswd -a kitty
New SMB password:
Retype new SMB password:
Added user kitty.
[root@lynkser common]# setfacl -m u:sarah:r-x /storage
[root@lynkser common]# setfacl -m u:kitty:rwx /storage
[root@lynkser common]# vim /etc/samba/smb.conf
[common]
path = /common
browseable = yes
valid user = natasha
[share]
path = /storage
browseable = yes
valid user = sarah,kitty
writable = no
write list = kitty
[root@lynkser common]# systemctl reload smb nmb
[root@lynk /]# umount /mnt
[root@lynk /]# mkdir /mnt/dev
[root@lynk /]# vim /etc/fstab
//192.168.26.129/share /mnt/dev cifs multiuser,username=sarah,password=tangkai,sec=ntlmssp 0 0
[root@lynk /]# vim /etc/fstab
[root@lynk /]# yum -y install cifs-utils*
[root@lynk /]# ls /home
lynk
[root@lynk /]# su - lynk
[lynk@lynk ~]$ cifscreds add -u kitty 192.168.26.129
Password: