红帽7 Samba服务实现文件共享
Samba 文件共享服务
首先需要先通过Yum 软件仓库来安装 Samba 服务程序(Samba 服务程序的名字也恰巧是软件包的名字)
[root@localhost ~]# yum install samba Loaded plugins: langpacks, product-id, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. Resolving Dependencies --> Running transaction check ---> Package samba.x86_64 0:4.1.1-31.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: samba x86_64 4.1.1-31.el7 rhel7 527 k Transaction Summary ================================================================================ Install 1 Package Total download size: 527 k Installed size: 1.5 M Is this ok [y/d/N]: y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : samba-4.1.1-31.el7.x86_64 1/1 rhel7/productid | 1.6 kB 00:00 Verifying : samba-4.1.1-31.el7.x86_64 1/1 Installed: samba.x86_64 0:4.1.1-31.el7 Complete!
去除Samba服务主配置文件中的注释信息,先把主配置文件改个名字,然后使用 cat 命令读入主配置文件,再在 grep 命令后面添加-v 参数(反向选择),分别去掉所有以井号(#)和分号(;)开头的注释信息行,对于剩余的空白行可以使用^$参数来表示并进行反选过滤,最后把过滤后的可用参数信息通过重定向符覆盖写入到原始文件名称中。
[root@localhost ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf_bak [root@localhost ~]# cat /etc/samba/smb.conf_bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf [root@localhost ~]# cat /etc/samba/smb.conf [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
Samba服务程序中的参数以及作用
[global] | #全局参数。 | |
workgroup = MYGROUP | #工作组名称 | |
server string = Samba Server Version %v | #服务器介绍信息,参数%v为显示SMB版本号 | |
log file = /var/log/samba/log.%m | #定义日志文件的存放位置与名称,参数%m为来访的主机名 | |
max log size = 50 | #定义日志文件的最大容量为50KB | |
security = user | #安全验证的方式,总共有4种 | |
#share:来访主机无需验证口令;比较方便,但安全性很差 | ||
#user:需验证来访主机提供的口令后才可以访问;提升了安全性 | ||
#server:使用独立的远程主机验证来访主机提供的口令(集中管理账户) | ||
#domain:使用域控制器进行身份验证 | ||
passdb backend = tdbsam | #定义用户后台的类型,共有3种 | |
#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码 | ||
#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户 | ||
#ldapsam:基于LDAP服务进行账户验证 | ||
load printers = yes | #设置在Samba服务启动时是否共享打印机设备 | |
cups options = raw | #打印机的选项 | |
[homes] | #共享参数 | |
comment = Home Directories | #描述信息 | |
browseable = no | #指定共享信息是否在“网上邻居”中可见 | |
writable = yes | #定义是否可以执行写入操作,与“read only”相反 | |
[printers] | #打印机共享参数 | |
comment = All Printers | ||
path = /var/spool/samba | #共享文件的实际路径(重要)。 | |
browseable = no | ||
guest ok = no | #是否所有人可见,等同于"public"参数。 | |
writable = no | ||
printable = yes |
配置共享资源
用于设置 Samba 服务程序的参数以及作用
参数 | 作用 |
[database] | 共享名称为database |
comment = Do not arbitrarily modify the database file | 警告用户不要随意修改数据库 |
path = /database | 共享目录为/database |
public = no | 关闭“所有人可见” |
writable = yes | 允许写入操作 |
第一步:创建用于访问共享资源的账户信息。Samba 服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,只有建立账户信息数据库之后,才能使用用户口令认证模式。另外,Samba 服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。
pdbedit 命令用于管理 SMB 服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。在第一次把账户信息写入到数据库时需要使用-a 参数,以后在执行修改密码、删除账户等操
作时就不再需要该参数了。
用于 pdbedit 命令的参数以及作用
参数 | 作用 |
-a 用户名 | 建立Samba用户 |
-x 用户名 | 删除Samba用户 |
-L | 列出用户列表 |
-Lv | 列出用户详细信息的列表 |
[root@localhost ~]# id lisi uid=1001(lisi) gid=1001(lisi) groups=1001(lisi) [root@localhost ~]# pdbedit -a -u lisi new password: 输入该账户在Samba服务数据库中的密码 retype new password: 再次输入密码确认 Unix username: lisi NT username: Account Flags: [U ] User SID: S-1-5-21-914565673-3598972981-4268758770-1000 Primary Group SID: S-1-5-21-914565673-3598972981-4268758770-513 Full Name: Home Directory: \\localhost\lisi HomeDir Drive: Logon Script: Profile Path: \\localhost\lisi\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: Tue, 13 Nov 2018 16:40:45 CST Password can change: Tue, 13 Nov 2018 16:40:45 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
第二步:创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,还需考虑SELinux服务与策略,/database 目录是所有者是root不允许其他用户访问,所以可以把权限设置高些或者用chmod命令把所有者改成 lisi 即可。
[root@localhost ~]# mkdir /database [root@localhost ~]# ls -ld /database/ drwxr-xr-x. 2 root root 21 Nov 13 16:44 /database/ [root@localhost ~]# chmod 777 /database/
第三步:设置 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_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 ~]# setsebool -p samba_export_all_rw=on
第四步:在 Samba 服务程序的主配置文件中,根据上表中的信息写入。[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打印机设备,不需要可删除。
[root@localhost ~]# vim /etc/samba/smb.conf [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 [database] comment = Do not arbitrarily modify the database file path = /database public = no writable = yes
第五步:Samba 服务程序的配置工作基本完毕。接下来重启 smb 服务(Samba 服务程序在 Linux 系统中的名字为 smb)并清空 iptables 防火墙就可检验效果了。
[root@localhost ~]# systemctl restart smb [root@localhost ~]# systemctl enable smb ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user. target.wants/smb.service' [root@localhost ~]# iptables -F [root@localhost ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Windows 访问文件共享服务
Samba 服务器和 Windows 客户端使用的操作系统以及 IP 地址
主句名称 | 操作系统 | IP地址 |
Samba 共享服务器 | RHEL 7 | 192.168.10.10 |
Windows 客户 | Windows10 | 192.168.10.1 |
在 Windows 系统中访问共享资源,只需在 Windows 的“运行”命令框中输入两个反斜杠,然后再加服务器的 IP 地址即可。
输入 lisi 账户名和使用pdbedit命令设置的密码后,就可以登录到界面中了。
由于 Windows 系统的缓存原因,有可能在第二次登录时提供了正确的账户和密码,依然会报错,这时只需要重新启动一下 Windows 客户端就没问题了
Linux 访问文件共享服务
Samba 共享服务器和 Linux 客户端各自使用的操作系统以及 IP 地址
主机名称 | 操作系统 | IP地址 |
Samba 共享服务 | RHEL7 操作系 | 192.168.10.10 |
Linux 客户端 | RHEL7 操作系统 | 192.168.10.20 |
[root@localhost Desktop]# yum install cifs-utils Loaded plugins: langpacks, product-id, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. rhel7 | 4.1 kB 00:00 (1/2): rhel7/group_gz | 134 kB 00:00 (2/2): rhel7/primary_db | 3.4 MB 00:00 Resolving Dependencies --> Running transaction check ---> Package cifs-utils.x86_64 0:6.2-6.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: cifs-utils x86_64 6.2-6.el7 rhel7 83 k Transaction Summary ================================================================================ Install 1 Package Total download size: 83 k Installed size: 174 k Is this ok [y/d/N]: y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : cifs-utils-6.2-6.el7.x86_64 1/1 rhel7/productid | 1.6 kB 00:00 Verifying : cifs-utils-6.2-6.el7.x86_64 1/1 Installed: cifs-utils.x86_64 0:6.2-6.el7 Complete!
在 Linux 客户端,按照 Samba 服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中。为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅 root 管
理员才能够读写
[root@localhost ~]# vim auth.smb username=lisi password=123456 domain=MYGROUP
[root@localhost ~]# chmod 600 auth.smb
在 Linux 客户端上创建一个用于挂载 Samba 服务共享资源的目录,并把挂载信息写入到/etc/fstab 文件中,以确保共享挂载信息在服务器重启后依然生效
[root@localhost ~]# mkdir /database [root@localhost ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Tue Oct 2 18:32:33 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel-root / xfs defaults 1 1 UUID=e4edf9ea-99aa-4c91-8c9b-c13549216c84 /boot xfs defaults 1 2 /dev/mapper/rhel-swap swap swap defaults 0 0 /dev/cdrom /media/cdrom iso9660 defaults 0 0 //192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0
第一个database指的是共享的名称,也就是samba主配置文件里中括号里的名称
[root@localhost ~]# mount -a
Linux 客户端成功地挂载了 Samba 服务的共享资源。进入到挂载目录/database 后就可以看到 Windows 系统访问 Samba 服务程序时留下来的文件了
[root@localhost database]# cat /database/readme.txt
asds