Samba 文件共享服务(第261页)
-
安装samba:yum install -y samba
-
将表下面中的参数写入到 Samba 服务程序的主配置文件中,然后重启该服务即可
参数 | 作用 |
---|---|
[database] | 共享名称为 database |
comment = Do not arbitrarily modify the database file | 警告用户不要随意修改数据库 |
path = /home/database | 共享目录为/home/database |
public = no | 关闭“所有人可见” |
writable = yes | 允许写入操作 |
- 第一步:创建用于访问共享资源的账户信息。在 centos 7 系统中,Samba 服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且验证过程也十分简单。不过,只有建立账户信息数据库之后,才能使用用户口令认证模式。另外,Samba 服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。pdbedit 命令用于管理 SMB 服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。在第一次把账户信息写入到数据库时需要使用-a 参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。pdbedit 命令中使用的参数以及作用如表所示
参数 | 作用 |
---|---|
-a | 用户名 建立 Samba 账户 |
-x | 用户名 删除 Samba 账户 |
-L | 列出账户列表 |
-Lv | 列出账户详细信息的列表 |
[root@localhost ~]# useradd -M lws
uid=1000(lws) gid=1000(lws) 组=1000(lws),10(wheel)
#创建用户,-M 不创建主目录
[root@localhost ~]# pdbedit -a -u lws #创建 samba 账户
new password: #创建 samba 密码
retype new password: #确认密码
Unix username: lws
#...略...
- 第二步:创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,而且由于/home 目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的 SELinux 安全上下文所带来的限制。在前面对 Samba 服务程序配置文件中的注释信息进行过滤时,这些过滤的信息中就有关于 SELinux 安全上下文策略的说明,我们只需按照过滤信息中有关 SELinux安全上下文策略中的说明中给的值进行修改即可。修改完毕后执行 restorecon 命令,让应用于目录的新 SELinux 安全上下文立即生效。
[root@localhost ~]# mkdir /home/database
#在 home 目录下创建一个 database 目录
[root@localhost ~]# chown -Rf lws:lws /home/database
#创此目录的 (所有者)和(所属组)都设置为指定的用户,-R:递归, -f:强制
[root@localhost home]# semanage fcontext -a -t samba_share_t /home/database
[root@localhost ~]# restorecon -Rv /home/database
#执行 restorecon 命令,让应用于目录的新 SELinux 安全上下文立即生效
- 第三步:设置 SELinux 服务与策略,使其允许通过 Samba 服务程序访问普通用户家目录。执行 getsebool 命令,筛选出所有与 Samba 服务程序相关的 SELinux 域策略,根据策略的名称(和经验)选择出正确的策略条目进行开启即可:
[root@localhost ~]# getsebool -a | grep samba
#筛选出所有与 Samba 服务程序相关的 SELinux 域策略
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_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_enable_home_dirs on
#修改 SELinux 域策略
- 第四步:在 Samba 服务程序的主配置文件中,根据表上面表所提到的格式写入共享信息。在原始的配置文件中,[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打印机设备。这两项如果在今后的工作中不需要,可以手动删除,这没有任何问题。
[root@localhost ~]# vim /etc/samba/smb.conf
#修改 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 = /home/database
public = no
writeble = yes
- 第五步:Samba 服务程序的配置工作基本完毕。接下来重启 smb 服务(Samba 服务程序在 Linux 系统中的名字为 smb)并清空 iptables 防火墙,然后就可以检验配置效果了。
[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb
#重启并开启 smb 服务
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ 确定 ]
#清空防火墙
- 第六步:在 windows 7 访问
打开计算机,在上面的地址栏输入(\192.168.1.184)这里是我服务器的IP,然后在弹出的对话框中输入刚刚为 samba 创建的账号和密码
- 注意:这时出弹出(用户名或密码错误),在 win7客户端如下设置即可
第1步:修改注册表:在(开始)-(运行)-输入:regedit
然后在弹出的注册表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA 直接删除 LMCompatibilityLevel 键。确定删除后
第2步:修改安全策略:在(开始)-(运行)-输入:secpol.msc
然后,单击“安全选项”。 双击“网络安全:LAN Manager 身份验证级别”;
最后,单击列表中:发送LM和NTLMv2,如果已协商,则使用NTLMv2协议
- 第七步:在 centos 7 访问
[root@localhost ~]# yum install cifs-utils
#安装 Samba 客户端
[root@localhost ~]# vim auth.smb
#建立一个 smb 文件,写入登陆信息
username=lws
password=aa888888
domain=MYGROUP
[root@localhost ~]# chmod 600 auth.smb
#修改 auth.smb 文件权限
[root@localhost ~]# vim /etc/fstab
## /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
## 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=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /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
#在此配置文件最后一行添加远程目录挂载,挂载的那个目录就是远程共享目录
[root@linuxprobe ~]# mount -a
NFS(网络文件系统)(第270页)
-
安装NFS: yum install nfs-utils
-
第一步:清空 NFS 服务器上面 iptables 防火墙的默认策略,以免默认的防火墙策
略禁止正常的 NFS 共享服务
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
- 第二步:在 NFS 服务器上建立用于 NFS 文件共享的目录,并设置足够的权限确保其他人也有写入权限
[root@localhost ~]# mkdir /nfsfile
[root@localhost ~]# chmod -Rf 777 /nfsfile
[root@localhost ~]# echo "aaa" > /nfsfile/readme
- 第三步:NFS 服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们可以按照“共享目录的路径 允许访问的 NFS 客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。例如,如果想要把/nfsfile 目录共享给 192.168.10.0/24 网段内的所有主机,让这些主机都拥有读写权限,在将数据写入到 NFS 服务器的硬盘中后才会结束操作,最大限度保证数据不丢失,以及把来访客户端 root 管理员映射为本地的匿名用户等,则可以按照下面命令中的格式,将表 12-7 中的参数写到 NFS 服务程序的配置文件中。
- 用于配置 NFS 服务程序配置文件的参数
参数 | 作用 |
---|---|
ro | 只读 |
rw | 读写 |
root_squash | 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户 |
no_root_squash | 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员 |
all_squash | 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户 |
sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
请注意,NFS 客户端地址与权限之间没有空格。
[root@localhost ~]# vim /etc/exports
/nfsfile 192.168.1.*(rw,sync,root_squash)
- 第四步:启动和启用 NFS 服务程序。由于在使用 NFS 服务进行文件共享之前,需要使用 RPC(Remote Procedure Call,远程过程调用)服务将 NFS 服务器的 IP 地址和端口号等信息发送给客户端。因此,在启动 NFS 服务之前,还需要顺带重启并启用 rpcbind 服务程序,并将这两个服务一并加入开机启动项中。
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl start nfs-server
[root@localhost ~]# systemctl enable nfs-server
NFS客户端(第272页)
NFS 客户端的配置步骤也十分简单。先使用 showmount 命令(以及必要的参数,见表 12- 8)查询NFS 服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。
参数 | 作用 |
---|---|
-e | 显示 NFS 服务器的共享列表 |
-a | 显示本机挂载的文件资源的情况 |
-v | 显示版本号 |
- 第一步:查询服务器信息
[root@localhost ~]# showmount -e 192.168.1.184 #184为服务器地址
Export list for 192.168.1.184:
/nfsfile 192.168.1.*
- 第二步:端创建一个挂载目录。使用 mount 命令并结合-t 参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的 IP 地址、服务器上的共享目录以及要挂载到本地系统(即客户端)的目录。
[root@localhost ~]# mkdir /mnt/nfsfile
#创建一个新目录
[root@localhost mnt]# mount -t nfs 192.168.1.184:/nfsfile /mnt/nfsfile
#将服务器的nfsfile目录挂载到客户端的 /mnt/nfsfile
[root@localhost mnt]# cd /nfsfile
[root@localhost nfsfile]# ll
总用量 4
-rw-r--r--. 1 root root 4 7月 8 22:40 readme
#进入刚挂载的目录查看文件,这时发现在服务器建立的 readme文件
autofs 自动挂载服务(第273页)
-
无论是 Samba 服务还是 NFS 服务,都要把挂载信息写入到/etc/fstab 中,这样远程共享资源就会自动随服务器开机而进行挂载。虽然这很方便,但是如果挂载的远程资源太多,则会给网络带宽和服务器的硬件资源带来很大负载。如果在资源挂载后长期不使用,也会造成服务器硬件资源的浪费。可能会有读者说,“可以在每次使用之前执行 mount 命令进行手动挂载”。这是一个不错的选择,但是每次都需要先挂载再使用,您不觉得麻烦吗?autofs 自动挂载服务可以帮我们解决这一问题。与 mount 命令不同,autofs 服务程序是一种 Linux 系统守护进程,当检测到用户视图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。换句话说,我们将挂载信息填入/etc/fstab 文件后,系统在每次开机时都自动将其挂载,而 autofs 服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。
-
安装 autofs:yum install autofs
-
处于生产环境中的 Linux 服务器,一般会同时管理许多设备的挂载操作。如果把这些设备挂载信息都写入到 autofs 服务的主配置文件中,无疑会让主配置文件臃肿不堪,不利于服务执行效率,也不利于日后修改里面的配置内容,因此在 autofs 服务程序的主配置文件中需要按照“挂载目录 子配置文件”的格式进行填写。挂载目录是设备挂载位置的上一级目录。例如,光盘设备一般挂载到/media/cdrom 目录中,那么挂载目录写成/media 即可。对应的子配置文件则是对这个挂载目录内的挂载设备信息作进一步的说明。子配置文件需要用户自行定义,文件名字没有严格要求,但后缀建议以.misc 结束。具体的配置参数如第 7 行的加粗字所示。
[root@localhost nfsfile]# 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
9 #
10 # NOTE: mounts done from a hosts map will be mounted with the
11 # "nosuid" and "nodev" options unless the "suid" and "dev"
12 # options are explicitly given.
13 #
14 /net -hosts
15 #
16 # Include /etc/auto.master.d/*.autofs
17 # The included files must conform to the format of this file.
18 #
19 +dir:/etc/auto.master.d
20 #
21 # Include central master map if it can be found using
22 # nsswitch sources.
23 #
24 # Note that if there are entries for /net or /misc (as
25 # above) in the included master map any keys that are the
26 # same will not be seen as the first read key seen takes
27 # precedence.
28 #
29 +auto.master
- 在子配置文件中,应按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。例如,要把光盘设备挂载到/media/iso 目录中,可将挂载目录写为 iso,而-fstype 为文件系统格式参数,iso9660 为光盘设备格式,ro、nosuid 及 nodev 为光盘设备具体的权限参数,/dev/cdrom 则是定义要挂载的设备名称。配置完成后再顺手将 autofs 服务程序启动并加入到系统启动项中:
[root@localhost nfsfile]# vim /etc/iso.misc
iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
[root@localhost nfsfile]# systemctl start autofs
[root@localhost nfsfile]# systemctl enable autofs
#启动 autofs 服务
- 接下来将发生一件非常有趣的事情。我们先查看当前的光盘设备挂载情况,确认光盘设备没有被挂载上,而且/media 目录中根本就没有 iso 子目录。但是,我们却可以使用 cd 命令切换到这个 iso 子目录中,而且光盘设备会被立即自动挂载上。我们也就能顺利查看光盘内的内容了。
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 36G 4.0G 32G 11% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 76K 1.9G 1% /dev/shm
tmpfs 1.9G 8.9M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 497M 121M 377M 25% /boot
192.168.1.184:/nfsfile 36G 4.0G 32G 11% /mnt/nfsfile
#这里查看没有光盘挂载
[root@localhost ~]# cd /media
[root@localhost media]# ls
#进入/media 也没有内容
[root@localhost media]# cd iso
[root@localhost iso]# ll
总用量 607
-rw-r--r--. 1 500 502 14 7月 5 2014 CentOS_BuildTag
drwxr-xr-x. 3 500 502 2048 7月 4 2014 EFI
-rw-r--r--. 1 500 502 611 7月 5 2014 EULA
-rw-r--r--. 1 500 502 18009 7月 5 2014 GPL
drwxr-xr-x. 3 500 502 2048 7月 4 2014 images
drwxr-xr-x. 2 500 502 2048 7月 4 2014 isolinux
drwxr-xr-x. 2 500 502 2048 7月 4 2014 LiveOS
drwxr-xr-x. 2 500 502 581632 7月 5 2014 Packages
drwxr-xr-x. 2 root root 4096 7月 5 2014 repodata
-rw-r--r--. 1 500 502 1690 7月 5 2014 RPM-GPG-KEY-CentOS-7
-rw-r--r--. 1 500 502 1690 7月 5 2014 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root 2883 7月 7 2014 TRANS.TBL
#这里 iso出现了光盘内容