Samba 文件共享服务
Samba 服务程序现在已经成为在 Linux 系统与Windows 系统之间共享文件的最佳选择
详细配置请转Samba服务
安装
[root@localhost ~]# yum install samba -y
Samba 服务程序的主配置文件,只有 37 行。
第 5~8 行参数中所提到的 cups的全称为 Common UNIX Printing System(通用 UNIX 打印系统),依然是用于打印机或打印服务器的。
第 17~22 行代表共享每位登录用户的家目录内容。虽然在某些情况下这可以更方便地共享文件,但这个默认操作着实有些危险,
第 24~29 行是用 SMB 协议共享本地的打印机设备,方便局域网内的用户远程使用打印机设备。当前我们没有打印机设备,
第 31~37 行依然为共享打印机设备的参数,
上面说的都可以删掉
[root@localhost ~]# cat /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
[root@localhost ~]#
security 参数代表用户登录 Samba 服务时采用的验证方式。总共有 4种可用参数。
- share:代表主机无须验证密码。这相当于 vsftpd 服务的匿名公开访问模式,比较方便,但安全性很差。
- user:代表登录 Samba 服务时需要使用账号密码进行验证,通过后才能获取到文件。这是默认的验证方式,最为常用。
- domain:代表通过域控制器进行身份验证,用来限制用户的来源域。
- server:代表使用独立主机验证来访用户提供的密码。这相当于集中管理账号,并不常用。
配置共享资源
Samba 服务程序的主配置文件包括全局配置参数和区域配置参数。
全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。
区域配置参数则用于设置单独的共享资源,且仅对该资源有效。
创建共享资源的方法很简单,只要将参数写入到 Samba 服务程序的主配置文件中,然后重启该服务即可。
[database] 共享名称为 database
comment = 。。。。 注释,说明
path = /home/database 共享目录为/home/database
public = no 关闭“所有人可见”
writable = yes 允许写入操作
Samba 服务程序默认使用的是用户密码认证模式(user)。只有建立账户信息数据库之后,才能使用用户密码认证模式。另外,Samba 服务程序的数据库要求账户必须在当前系统中已经存在,
pdbedit
用于管理 Samba 服务程序的账户信息数据库,“pdbedit [选项]账户”。
在第一次把账户信息写入到数据库时需要使用-a 参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。
-a 用户名 建立 Samba 用户
-x 用户名 删除 Samba 用户
-u
用户名,不会 再询问你这些信息以创建新的用户账号。
-L 列出用户列表
-Lv 列出用户详细信息的列表
[root@localhost ~]# pdbedit -a -u trick
new password:
retype new password:
Unix username: trick
NT username:
Account Flags: [U ]
User SID: S-1-5-21-4277232344-3989409239-715028539-1000
Primary Group SID: S-1-5-21-4277232344-3989409239-715028539-513
Full Name: trick
Home Directory: \\localhost\trick
HomeDir Drive:
Logon Script:
Profile Path: \\localhost\trick\profile
Domain: LOCALHOST
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 23:06:39 CST
Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
Password last set: Wed, 31 Jan 2024 18:13:04 CST
Password can change: Wed, 31 Jan 2024 18:13:04 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@localhost ~]#
创建用于共享资源的文件目录。在创建时,要考虑到文件读写权限的问题,而且/home 目录是系统中普通用户的家目录。
递归地将 /home/database
目录下的所有文件和子目录的所有者(owner)和所属组(group)都修改为 trick
[root@localhost ~]# mkdir /home/database
[root@localhost ~]# chown -Rf trick:trick /home/database/
正确的文件上下文值应该是 samba_share_t,所以只需要修改完毕后执行restorecon 命令,就能让应用于目录的新SELinux 安全上下文立即生效。
[root@localhost ~]# semanage fcontext -a -t samba_share_t /home/database/
[root@localhost ~]# restorecon -Rv /home/database/
执行 getsebool 命令,筛选出所有与 Samba 服务程序相关的 SELinux 域策略,根据策略的
名称(和经验)选择出正确的策略条目进行开启
[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_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
[root@localhost ~]# setsebool -P samba_enable_home_dirs on
配置文档
[root@localhost ~]# vim /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
[database]
comment = 不能删除数据库里面的文件
path = /home/database
public = no
writable = yes
重启 smb 服务并加入到启动项中
[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
将 iptables 防火墙清空,再把 Samba 服务添加到firewalld 防火墙中,
[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables-save
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-service=samba
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# systemctl status smb ● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service>
Active: active (running) since Wed 2024-01-31 18:25>
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 78883 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 4 (limit: 12391)
Memory: 33.6M
lines 1-10
测试
输入用户名,密码(Samba 服务程序使用的账户信息数据库中trick的密码,不是系统用户trick的Miami)
可以执行查看、写入、更名、删除文件操作
Linux 挂载共享
Samba 服务程序还可以实现 Linux 系统之间的文件共享。
# dnf install cifs-utils
安装好软件包后,在 Linux 客户端创建一个用于挂载 Samba 服务共享资源的目录。这个
目录可以与服务器上的共享名称同名,
mount 命令中的-t 参数用于指定协议类型,
-o 参数用于指定用户名和密码,最后追加上服务器 IP 地址、共享名称和本地挂载目录即可。
mkdir /database
mount -t cifs -o username=linuxprobe,password=redhat //192.168.2.100/database /database
可以按照 Samba 服务的用户名、密码、共享域的顺序将相关信息写入一个认证文
件中,然后让/etc/fstab 文件和系统自动加载它
vim auth.smb
username=trick
password=trick
domain=SAMBA
将挂载信息写入/etc/fstab 文件中,以确保共享挂载信息在服务器重启后依然生效
//192.168.2.100/database database cifs credentials=/root/auth.smb 0 0
NFS(网络文件系统)
autofs 自动挂载服务
autofs 自动挂载服务可以帮我们解决。与 mount 命令不同,autofs 服务程序是一种 Linux 系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统,autofs 服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。
安装
dnf install autofs
在 autofs 服务程序的主配置文件中需要按照“挂载目录 子配置文件”的格式进行填写。挂载目录是设备挂载位置的上一级目录。
例如,光盘设备一般挂载到/media/cdrom 目录中,那么挂载目录写成/media 即可。
对应的子配置文件则是对这个挂载目录内的挂载设备信息作进一步的说明。子配置文件需要用户自行定义,文件名字没有严格要求,但后缀建议以.misc 结束。
vim /etc/auto.master
1 #
2 # Sample auto.master file
3 # This is a 'master' automounter map and it has the following format:
4 # mount-point [map-type[,format]:]map [options]
5 # For details of the format look at auto.master(5).
6 #
7 /media /etc/iso.misc
8 /misc /etc/auto.misc
在子配置文件(iso.misc)中,应按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。
例如,要把光盘设备挂载到/media/iso 目录中,可将挂载目录写为 iso,而-fstype 为文件系统格式参数,iso9660 为光盘设备格式,ro、nosuid 及 nodev 为光盘设备具体的权限参数,/dev/cdrom则是定义要挂载的设备名称。
vim /etc/iso.misc
iso -fstype=iso9660,ro nosuid,nodev, :/dev/cdrom
配置完成后再顺手将 autofs 服务程序启动并加入到系统启动项中:
systemctl start autofs
systemctl enable autofs
我们可以使用 cd 命令切换到这个 iso 子目录中,而且光盘设备会被立即自动挂载上,然后也就能顺利查看光盘内的内容了。