项目题:
工作任务:为企业搭建一个文件服务器
公司搭建一个公司内部文件服务器 使用samba
要求:每个部门用户访只能问自己部门文件夹,其他部门无法访问,老板(boss)可以访问全部
比如公司组织架构:人事部(rs) 技术部(js) 销售部(xs) 设计部(sj)
SAMBA介绍
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
samba服务的相关软件包说明
samba:该软件主要提供了smb服务器所需的各项服务程序(smbd及nmbd)、相关的文件。
samba-client:这个软件提供了当linux作为samba client时,所需要的工具命令。例如挂载samba文件格式的mount.cifs。
samba-common:这个软件提供的则是服务器与客户端都会使用到的数据包括samba的主要配置文件(smb.conf)等。
samba配置文件
[root@localhost ~]# vim /etc/samba/smb.conf
[global] #全局配置
workgroup = MYGROU #所要加入的工作组或者域
server string = SambaServerVersion %v #服务器描述字符串,主机的简易说明,这里%v代表版本。
netbios name = MYSERVER #当前所在工作组的中的主机的唯一名称,最大15个字符。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 #设置samba服务器监听的网卡,可以写网卡名称或ip地址,ip可以写成xxx.xxx.xxx.xxx/24.
hosts allow = 127. 192.168.12. 192.168.13. #设置允许连接到samba服务器的客户端
hosts deny = 192.168.14. #可以设置不允许连接到samba服务器的客户端
log file = /var/log/samba/log.%m #产生日志文件的路径和名称。
max log size = 50 #定义日志文件最大容量(单位是KB,如果是0表示不限制)
security = user #设置用户访问samba服务器的验证方式,一共四种,他们的验证方式如下:
1.share:用户访问samba server不需要提供用户名和密码,安全性 能较低,deprecated(已弃用)
2.user:samba server共享目录只能被授权的用户访问,由samba server负责检查账号和密码的正确性。账号和密码要在samba server中建立(smbpasswd、pdbedit)
3.server:和user安全级别类似,但用户名和密码是递交到另外的server去验证,如果递交失败,就退到user安全级别,deprecated(已弃用)
4.domain:这个安全级别要求网络上存在一台windows的主域控制器,samba把用户名和密码递交给它去验证。
passdb backend = tdbsam #密码文件已经转为使用数据库了,默认的数据库格式为tdbsam,默认的文件放置到/var/lib/samba/private/passwd.tdb
load printers = yes #设置在samba服务启动时是否共享打印机设备
cups options = raw #打印机的选项
[homes] #定义对用户家目录的共享配置(由于在linux上面每位用户均有家目录,例如user1的用户主目录为/home/user1,当user1使用samba时,就会发现多了个//127.0.0.1/user1/的资源可用,由于设置的不可浏览,除了自己能看见自己的家目录,别人是不可以浏览的)
comment = Home Directories
browseable = no
writable = yes
[printers] #定义打印机共享配置
comment = All Printers
path = /var/spool/samba #打印的文件队列暂时放到该目录下
browseable = no
guest ok = no #游客是否能打印
writable = no
printable = yes
[share] #自定义共享名称
comment = this is share text #共享描述
path = 目录位路径 #所共享的目录路径
public = yes/no #设置共享是否允许guest账号访问
guest ok = yes/no #功能同public一样
browseable = yes/no #是否让所有用户看到这个项目,如果是no就表示隐藏
writable = yes/no #用户是否具有可写权限
read only = yes/no #设置共享是否具有只读权限read only=no和writable = yes等价,如与以上设置发生冲突,放在后面的设置生效
admin user = root #设置共享的管理员,多用户之间使用逗号隔开。
valid users = username #设置允许访问共享的用户,如果为空,将允许所有用户访问。例如valid users = user1,user2,@group1(多用户和组用逗号分开,@group表示组)
invalid users = username #设置不允许访问共享的用户
write list = username #如果writable=no,该字段中用户或组可读写,例如write list = user1,@group1
create mask = 0700 #创建文件的权限为700
directory mode = 0700 #创建的目录权限为700
#注意:writeable = yes 行和后面的 write list行是有冲突的。writeable开启后,是所有用户都有写的权限,而write list 是只允许某些用户可写。如果两者都开启的话,writeable会覆盖后面的权限,即所有用户都可写
#注意:write list = teacher, +admin 其中teacher逗号后有空格,admin前的可以跟+、&、@三个符号,这三个符号后面的名字都代表用户组,三者的区别如下:
+ 只在本机的密码文件组中查找
& 只在nis服务中查找
@ 先通过NIS服务器查找,nis找不到再到本机查找,
Samba安装
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install samba # 只安装服务端
创建对应的用户组
[root@localhost ~]# groupadd rs
[root@localhost ~]# groupadd js
[root@localhost ~]# groupadd xs
[root@localhost ~]# groupadd sj
[root@localhost ~]# groupadd admin
创建对应的用户
[root@localhost ~]# useradd -g admin -M boss
[root@localhost ~]# useradd -g rs -M rs1
[root@localhost ~]# useradd -g rs -M rs2
[root@localhost ~]# useradd -g js -M js1
[root@localhost ~]# useradd -g js -M js2
[root@localhost ~]# useradd -g xs -M xs1
[root@localhost ~]# useradd -g xs -M xs2
[root@localhost ~]# useradd -g sj -M sj1
[root@localhost ~]# useradd -g sj -M sj2
建议samba用户
# 使用smbpasswd\pdbedit
[root@localhost ~]# smbpasswd -a boss
[root@localhost ~]# smbpasswd -a rs1
[root@localhost ~]# smbpasswd -a rs2
[root@localhost ~]# smbpasswd -a js1
[root@localhost ~]# smbpasswd -a js2
[root@localhost ~]# smbpasswd -a xs1
[root@localhost ~]# smbpasswd -a xs2
[root@localhost ~]# smbpasswd -a sj1
[root@localhost ~]# smbpasswd -a sj2
创建对应的文件夹
[root@localhost ~]# mkdir /samba
[root@localhost ~]# cd /samba/
[root@localhost ~]# mkdir rsdir
[root@localhost ~]# mkdir jsdir
[root@localhost ~]# mkdir xsdir
[root@localhost ~]# mkdir sjdir
编写配置文件
[root@localhost ~]# vim /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
encrypt passwords = yes
[homes]
comment = Home Directories
valid users = %S
browseable = No
read only = No
writable = yes
create mode = 0664
directory mode = 0775
inherit acls = Yes
[rs]
comment = rs
path = /samba/rsdir
public = no
valid users = @rs,@admin
write list = rs1
printable = no
[js]
comment = js
path = /samba/jsdir
public = no
valid users = @js,@admin
write list = js1
printable = no
[xs]
comment = xs
path = /samba/xsdir
public = no
valid users = @xs,@admin
write list = xs1
printable = no
[sj]
comment = sj
path = /samba/sjdir
public = no
valid users = @sj,@admin
write list = sj1
printable = no
[boss]
comment = boss
path = /samba
public = no
valid users = @admin
write list = boss
printable = no
启动samba服务
# 关闭防火墙和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
# 开启samba服务
[root@localhost ~]# systemctl start smb
windows测试
此时登录的是人事部的账号(rs)
如图所示,仅rs文件夹可以使用
\192.168.77.178
开启防火墙和selinux
[root@localhost samba]# systemctl start firewalld.service
[root@localhost samba]# firewall-cmd --add-service=samba --permanent
[root@localhost samba]# firewall-cmd --reload
[root@localhost samba]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client samba ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@localhost samba]# setenforce 1
# 开启Samba用户HOME目录权限
[root@localhost samba]# setsebool -P samba_enable_home_dirs=1
# 开启单个共享目录(path)权限
[root@localhost samba]# chcon -t samba_share_t path
# 开启所有共享目录,查看防火墙开启状态
[root@localhost samba]# getsebool -a | grep samba
# 只读权限
[root@localhost samba]# setsebool -P samba_export_all_ro on
# 读写权限
[root@localhost samba]# setsebool -P samba_export_all_rw on
# 查看某个目录(path)是否开启了权限
[root@localhost samba]# ls -ldZ path
目前只能对文件夹读,但是不能写,写文件的时候,需要权限设置,对相应的组或用户进行赋予相应的权限