redhat 7中配置samba服务实现文件共享
SMB(全称是Server Message Block)是一个网络协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。
实验准备
软件:VMware Workstation Pro
虚拟机:Red Hat Enterprise Linux 7 64 位
实例一
已知,某公司需要构建一台Samba服务器,该计算机IP地址为192.168.1.X,现在要求配置
- 根据自己的学号设置服务器IP地址和windows的IP地址(同一网段);
- Samba服务器新建三个目录:公共目录/share,结算中心/counter,技术部/tech。
公司员工情况如下:
主管:总经理lizhang
结算中心:结算中心主任lisan,员工lisi,员工liwu。
技术部:技术部经理zhangsan,员工zhangsi,员工zhangwu
要求:公共目录/share所有人可以访问,权限只读。结算中心目录/counter和技术部目录/tech 分别只允许总经理和对应部门员工访问(本部门员工对应目录有写入权限),并且公司员工无法在网络邻居查看到非本部共享目录。 - 通过windows正常访问三个共享目录;
1、配置网络环境,设置服务器模式为NAT模式,在VMware中设置虚拟网络编辑器中NAT模式子网IP为192.168.1.0
[root@localhost 桌面]# nmtui
[root@localhost Desktop]# nmcli device connect eno16777736
Device 'eno16777736' successfully activated with '303e763d-da53-48bf-a882-efc83be3551d'.
[root@localhost Desktop]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:feb2:532c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:b2:53:2c txqueuelen 1000 (Ethernet)
RX packets 39 bytes 4865 (4.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 75 bytes 9240 (9.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2、挂载镜像,配置YUM源,下载安装samba软件包
[root@localhost Desktop]# mkdir /mnt/cdrom
[root@localhost Desktop]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost Desktop]# vim /etc/yum.repos.d/a.repo
[a]
name=a
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
[root@localhost 桌面]# yum install samba -y
samba服务器默认的配置文件为smb.conf,该文件存放在/etc/samba目录下。编辑完毕后,可以利用restparm命令测试配置的正确性。smb.conf根据功能上划分,大致可以分为三个部分,即配置简介,全局变量和共享服务。
在配置简介部分的行首出现两个符号,即“#”和“;”,其含义如下所示:
(1)以“#”开头的为注释,为用户提供相关的配置解释信息,方便用户参考,不用修改它。
(2)以“;”开头的为 samba 配置的格式范例,默认是不生效的,可以通过去掉相关行前面的“;”并加以修改来设置需要使用的功能。需要注意的是“;”是英文字符下的“;”
配置文件利用“字段=设定值”格式实现对相应功能的设置,利用grep过滤出有效参数。
[root@localhost 桌面]# grep "#" -v /etc/samba/smb.conf | grep ";" -v | grep "^$" -v
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
上述代码详细的注释说明
参数 | 作用 |
---|---|
[global] | 全局参数 |
workgroup = MYGROUP | 工作组名称 |
server string = Samba Server Version %v | 设定 Samba的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号 |
log file = /var/log/samba/log.%m | 设置Samba日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba的机器都单独记录一个日志文件。 |
max log size = 50 | 设置Samba 日志文件的最大容量,单位为kB,0代表不限制 |
security = user | 安全验证的方式,总共有4种*(1) |
passdb backend = tdbsam | 说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。 |
load printers = yes | 设置是否在启动Samba时就共享打印机。 |
cups options = raw | 打印机相关设置 |
[homes] | 共享名称 |
comment = Home Directories | 描述信息 |
browseable = no | 指定共享信息是否在“网上邻居”中可见 |
writable = yes | writable用来指定该共享路径是否可写。 |
[printers] | 共享名称 |
comment = All Printers | 描述信息 |
path = /var/spool/samba | 共享路径 |
browseable = no | 指定共享信息是否在“网上邻居”中可见 |
guest ok = no | 意义同“public”用来指定该共享是否允许guest账户访问。 |
writable = no | writable用来指定该共享路径是否可写。 |
printable = yes | 是否可打印 |
(1)security = user的4种安全验证的方式。
1. share:用户访问Samba不需要提供用户名和口令, 安全性能较低。
2. user:Samba共享目录只能被授权的用户访问。
3. server:依靠其他Windows NT/2000或Samba来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
4. domain:域安全级别,使用主域控制器(PDC)来完成认证。
(2)
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。
3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
常用的其他参数
valid users = 允许访问该共享的用户
说明:valid users用来指定允许访问该共享资源的用户。
例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)
invalid users = 禁止访问该共享的用户
说明:invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
write list = 允许写入该共享的用户
说明:write list用来指定可以在该共享下写入文件的用户。
例如:write list = bobyuan,@bob
public = yes/no
说明:public用来指定该共享是否允许guest账户访问
3.创建好需要的用户账号和共享目录
部门 | 管理员账号 | 部门员工账号1 | 部门员工账号2 | 共享目录 | 权限 |
---|---|---|---|---|---|
主管 | 总经理lizhang | 公共目录/share | 所有人可以访问,权限只读 | ||
结算中心 | 结算中心主任lisan | lisi | liwu | /counter | 只允许总经理和本部门员工访问,权限读写 |
技术部 | 技术部经理zhangsan | zhangsi | zhangwu | /tech | 只允许总经理和本部门员工访问,权限读写 |
[root@localhost opt]# groupadd share
[root@localhost opt]# groupadd counter
[root@localhost opt]# groupadd tech
[root@localhost opt]# cd /opt
[root@localhost opt]# vim userlist
[root@localhost opt]# cat userlist
lizhang
lisan
lisi
liwu
zhangsan
zhangsi
zhangwu
[root@localhost opt]# vim a.sh
[root@localhost opt]# cat a.sh
for a in $(cat /opt/userlist)
do
useradd -G share $a
echo redhat | passwd --stdin $a
done
[root@localhost opt]# chmod 777 a.sh
[root@localhost opt]# ./a.sh
[root@localhost /]# gpasswd -M lizhang,zhangsan,zhangsi,zhangwu tech
[root@localhost /]# gpasswd -M lizhang,lisan,lisi,liwu counter
[root@localhost Desktop]# mkdir /share
[root@localhost Desktop]# mkdir /counter
[root@localhost Desktop]# mkdir /tech
[root@localhost opt]# chown lizhang:share /share
[root@localhost opt]# ll -d /share/
drwxr-xr-x. 2 lizhang share 6 Nov 19 01:24 /share/
[root@localhost opt]# chown lizhang:counter /counter
[root@localhost opt]# ll -d /counter/
drwxr-xr-x. 2 lizhang counter 6 Nov 19 01:25 /counter/
[root@localhost opt]# chown lizhang:tech /tech
[root@localhost opt]# ll -d /tech/
drwxr-xr-x. 2 lizhang tech 6 Nov 19 01:25 /tech/
[root@localhost opt]# chmod 550 /share
[root@localhost opt]# chmod 770 /counter
[root@localhost opt]# chmod 770 /tech
4. 修改Samba的主配置文件,配置共享的目录。
[root@localhost 桌面]# vim /etc/samba/smb.conf
[share]
path = /share
browseable = yes
writable = no
[counter]
path = /counter
browseable = no
writable = yes
valid users = @counter
[tech]
path = /tech
browseable = no
writable = yes
valid users = @tech
[root@localhost opt]# systemctl start smb
5. 转化系统用户为Samba用户
[root@localhost opt]# yum install -y samba-client.x86_64
[root@localhost opt]# smbpasswd -a lizhang
New SMB password:
Retype new SMB password:
Added user lizhang.
[root@localhost opt]# smbpasswd -a lizhang
New SMB password:
Retype new SMB password:
Added user lizhang.
[root@localhost opt]# smbpasswd -a lisan
New SMB password:
Retype new SMB password:
Added user lisan.
[root@localhost opt]# smbpasswd -a zhangsan
New SMB password:
Retype new SMB password:
Added user zhangsan.
[root@localhost opt]# smbpasswd -a lisi
New SMB password:
Retype new SMB password:
Added user lisi.
[root@localhost opt]# smbpasswd -a liwu
New SMB password:
Retype new SMB password:
Added user liwu.
[root@localhost opt]# smbpasswd -a zhangsi
New SMB password:
Retype new SMB password:
Added user zhangsi.
[root@localhost opt]# smbpasswd -a zhangwu
New SMB password:
Retype new SMB password:
Added user zhangwu.
[root@localhost opt]# pdbedit -L
lizhang:1001:
zhangsan:1005:
liwu:1004:
lisan:1002:
lisi:1003:
zhangsi:1006:
zhangwu:1007:
6.设置防火墙
设置SEliunx安全策略
[root@localhost /]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off
[root@localhost /]# chcon -t samba_share_t /share
[root@localhost /]# chcon -t samba_share_t /counter
[root@localhost /]# chcon -t samba_share_t /tech
[root@localhost /]# setsebool -P samba_enable_home_dirs on
7.测试
开启一台liunx客户机,设置好网络,配置yum软件源,安装好samba-client.x86_64客户端程序 。
1、/share,各部门都可以访问
[root@localhost Desktop]# smbclient //192.168.1.10/share -U lizhang
Enter lizhang’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: > exit
[root@localhost Desktop]# smbclient //192.168.1.10/share -U lisan
Enter lisan’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: > exit
[root@localhost Desktop]# smbclient //192.168.1.10/share -U zhangsan
Enter zhangsan’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: > exit
2、/counter,技术部员工不能访问
[root@localhost Desktop]# smbclient //192.168.1.10/counter -U lizhang
Enter lizhang’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: > exit
[root@localhost Desktop]# smbclient //192.168.1.10/counter -U zhangsan
Enter zhangsan’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
tree connect failed: NT_STATUS_ACCESS_DENIED
[root@localhost Desktop]# smbclient //192.168.1.10/counter -U lisan
Enter lisan’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: >
3、/tesh,结算中心员工不能访问
[root@localhost Desktop]# smbclient //192.168.1.10/tech -U lizhang
Enter lizhang’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: > exit
[root@localhost Desktop]# smbclient //192.168.1.10/tech -U lisan
Enter lisan’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
tree connect failed: NT_STATUS_ACCESS_DENIED
[root@localhost Desktop]# smbclient //192.168.1.10/tech -U zhangsan
Enter zhangsan’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: > mkdir 1
smb: > mkdir 2
smb: > ls
. D 0 Sun Nov 19 02:39:40 2023
… D 0 Sun Nov 19 01:25:13 2023
1 D 0 Sun Nov 19 02:32:35 2023
2 D 0 Sun Nov 19 02:39:40 2023
8、windows挂载