CentOS 7.9上搭建samba共享服务器注意事项
Samba文件共享服务器是能够与windows系统共享文件的服务器,使用非常的广泛,最近参考了《鸟哥的linux私房菜》--服务器篇--samba服务器,在虚拟机上演练了搭建过程,记录一下。
操作系统:CentOS 7.9
Samba版本:4.10.16
主配置文件:/etc/samba/smb.conf,配置前最好先备份一个。另外修改此文件后,注意用 testparm 检查一下语法的正确性
1.samba安装
[root@localhost ~]# yum install samba samba-client
如果有网络,可直接使用以上命令安装,samba-client默认应该安装了的。
如果没有网络(我的虚拟机暂时无网络),可使用iso映像来安装,使用方法为:先挂载光盘到/mnt目录(也可以是其他目录)例如:# mount /dev/cdrom /mnt,然后添加此挂载目录到yum源中(在 /etc/yum.repos.d/ 目录中添加一个repo文件,(其它文件可先移动到另一个文件夹中,以避免报错)),本地源repo文件示例如下:
[root@localhost ~]# vim /etc/yum.repos.d/Local-CDROM.repo [Local-CDROM] #repo名称 name=Local-CDROM #这个与上面一样即可 baseurl=file:///mnt/ #光盘映像所挂载的目录位置 gpgcheck=0 #是否校验,此处关闭 enabled=1 #启用此源
2.3. 服务器端的服务启动与埠口观察
服务启动与开机启动:
[root@localhost ~]# systemctl start smb.service [root@localhost ~]# systemctl enable smb.service
正常会开启 tcp 139 和 445端口
[root@localhost ~]# netstat -tunlp | grep smbd tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1399/smbd tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 1399/smbd tcp6 0 0 :::445 :::* LISTEN 1399/smbd tcp6 0 0 :::139 :::* LISTEN 1399/smbd
3. 无密码共享设置注意事项
[global]
workgroup = SAMBA
security = user #注意samba新版本已不支持 share参数,要加上下面一行
map to guest = Bad User #注意要加上这一行,
; passdb backend = tdbsam #这一行先注释掉,使用用户名密码共享时再启用吧
force user = root #这一行很重要,没加这一行前,一直不能访问/tmp,此行意义为创建的文件默认为roo
#t用户所有,如果是其它目录,若权限设置为777,可以不要这一行。(/tmp的
#权限比较特殊
[tmp] #共享名称,可以与实际路径名称不同,例如temp
comment = Temporary file space #描述信息
path = /tmp #要共享的实际目录路径
writable = yes #可写入
browseable = yes #可浏览的共享
guest ok = yes #任何人可访问
4. 使用帐号密码共享文件
1)修改 /etc/samba/smb.conf
[global] workgroup = SAMBA security = user ; map to guest = Bad User #注释或删除这一行和下面一行 ; force user = root passdb backend = tdbsam #使用TDB数据库存放帐号与密码 [homes] #此处默认共享家目录,如果不想共享,可以注释掉或删除 comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes
[project] #假设共享/home/project目录
comment = smbuser's project
path = /home/project #实际的目录位置
browseable = yes
writable = yes #可写
write list = @users #可写入的有哪些用户或用户组,用户直接写,用户组名前要加@,此处是user组
编辑完 /etc/samba/smb.conf,记得用 testparm测试一下语法的正确性。
2)注意共享文件夹的权限设置
[root@www ~]# mkdir /home/project [root@www ~]# chgrp users /home/project [root@www ~]# chmod 2770 /home/project [root@www ~]# ll -d /home/project drwxrws---. 2 root users 4096 Jul 29 13:17 /home/project
5. 设定可使用 Samba 的用户账号与密码 (pdbedit)
# 1. 先来建立所需要的各个账号,但假设 student 已经存在了喔! [root@www ~]# useradd -G users smb1 [root@www ~]# useradd -G users smb2 [root@www ~]# useradd -G users smb3 [root@www ~]# echo 1234 | passwd --stdin smb1 [root@www ~]# echo 1234 | passwd --stdin smb2 [root@www ~]# echo 1234 | passwd --stdin smb3 # 2. 使用 pdbedit 指令功能 [root@www ~]# pdbedit -L [-vw] <==单纯的察看帐户信息 [root@www ~]# pdbedit -a|-r|-x -u 账号 <==新增/修改/删除账号 [root@www ~]# pdbedit -a -m -u 机器账号 <==与 PDC 有关的机器码 选项与参数: -L :列出目前在数据库当中的账号与 UID 等相关信息; -v :需要搭配 -L 来执行,可列出更多的讯息,包括家目录等数据; -w :需要搭配 -L 来执行,使用旧版的 smbpasswd 格式来显示数据; -a :新增一个可使用 Samba 的账号,后面的账号需要在 /etc/passwd 内存在者; -r :修改一个账号的相关信息,需搭配很多特殊参数,请 man pdbedit; -x :删除一个可使用 Samba 的账号,可先用 -L 找到账号后再删除; -m :后面接的是机器的代码 (machine account),与 domain model 有关! # 2.1 开始新增使用者吧! [root@www ~]# pdbedit -a -u smb1
6、最后,重新启动 Samba 并进行自我测试
[root@www ~]# /etc/init.d/smb restart #重新启动samba服务 [root@www ~]# /etc/init.d/nmb restart #使用mount挂载测试一下 [root@www ~]# mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1
7、关于设置SELINUX
如果共享目录位于 /home下,需要打开一个setsebool开关
#先查看一下与samba有关的sebool [root@localhost home]# getsebool -a | grep samba samba_create_home_dirs --> off samba_domain_controller --> off samba_enable_home_dirs --> off #按下面方法设置为on samba_export_all_ro --> off samba_export_all_rw --> off samba_load_libgfapi --> off samba_portmapper --> off samba_run_unconfined --> off samba_share_fusefs --> off samba_share_nfs --> off sanlock_use_samba --> off tmpreaper_use_samba --> off use_samba_home_dirs --> off virt_use_samba --> off #设置samba_enable_home_dirs为on [root@localhost home]# setsebool -P samba_enable_home_dirs=1 [root@localhost home]# getsebool -a | grep samba_enable_home_dirs samba_enable_home_dirs --> on
8、防火墙设置
1)使用 iptables 开放防火墙
[root@localhost home]# iptables -I INPUT -i ens33 -p tcp -m multiport --dport 139,445 -j ACCEPT #参数说明 [root@www ~]# iptables [-AI 链名] [-io 网络接口] [-p 协议] \ > [-s 来源IP/网域] [-d 目标IP/网域] -j [ACCEPT|DROP|REJECT|LOG] 选项与参数: -AI 链名:针对某的链进行规则的 "插入" 或 "累加" -A :新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则, 使用 -A 就可以加上第五条规则! -I :插入一条规则。如果没有指定此规则的顺序,默认是插入变成第一条规则。 例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5 号 链 :有 INPUT, OUTPUT, FORWARD 等,此链名称又与 -io 有关,请看底下。 -io 网络接口:设定封包进出的接口规范 -i :封包所进入的那个网络接口,例如 eth0, lo 等接口。需与 INPUT 链配合; -o :封包所传出的那个网络接口,需与 OUTPUT 链配合; -p 协定:设定此规则适用于哪种封包格式 主要的封包格式有: tcp, udp, icmp 及 all 。 -s 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,例如: IP :192.168.0.100 网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。 若规范为『不许』时,则加上 ! 即可,例如: -s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源; -d 目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。 -j :后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)
2)建议使用firewalld图形化防火墙设置,如图