sapliang 2020-07-29
使用 Samba 或 NFS 实现文件共享
--Samba 文件共享服务;
--NFS(网络文件系统);
--autofs 自动挂载服务。
1 Samba 文件共享服务
Samba 服务程序现在已经成为在 Linux 系统与 Windows系统之间共享文件的最佳选择。
安装
[ ~]# yum install samba -y [ ~]# cat /etc/samba/smb.conf # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run ‘testparm‘ to verify the config is correct after # you modified it. [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775
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] #打印机共享参数
[ ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak [ ~]# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf [ ~]# cat /etc/samba/smb.conf [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775
1.1 配置共享资源
Samba 服务程序的主配置文件,包括全局配置参数和区域配置参数。
全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。
区域配置参数则用于设置单独的共享资源,且仅对该资源有效。
用于设置 Samba 服务程序的参数以及作用
[database] 共享名称为 database comment = Do not arbitrarily modify the database file 警告用户不要随意修改数据库 path = /home/database 共享目录为/home/database public = no 关闭“所有人可见” writable = yes 允许写入操作
--1 创建用于访问共享资源的账户信息。在 RHEL 7 系统中, Samba 服务程序默认使用的是用户口令认证模式(user)。
pdbedit 命令用于管理 SMB 服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。
在第一次把账户信息写入到数据库时需要使用-a 参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。
用于 pdbedit 命令的参数以及作用
-a 用户名 建立 Samba 账户 -x 用户名 删除 Samba 账户 -L 列出账户列表 -Lv 列出账户详细信息的列表
[ ~]# id samba id: samba: no such user [root@iscsi ~]# useradd samba [ ~]# id samba uid=1012(samba) gid=1012(samba) groups=1012(samba) [root@iscsi ~]# pdbedit -a -u samba new password: ##输入密码 retype new password: ##确认密码 Unix username: samba NT username: Account Flags: [U ] User SID: S-1-5-21-2997122023-287577459-3228560404-1000 Primary Group SID: S-1-5-21-2997122023-287577459-3228560404-513 Full Name: Home Directory: \\iscsi\samba HomeDir Drive: Logon Script: Profile Path: \\iscsi\samba\profile Domain: ISCSI 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, 14 Jul 2020 09:42:12 CST Password can change: Tue, 14 Jul 2020 09:42:12 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--2 建用于共享资源的文件目录。
[ ~]# mkdir /home/database [ ~]# chown -Rf samba:samba /home/database/
--3 设置 SELinux 服务与策略
# semanage fcontext -a -t samba_share_t /home/database # restorecon -Rv /home/database # getsebool -a | grep samba # setsebool -P samba_enable_home_dirs on
--4 编辑samba主配置文件
[ ~]# vim /etc/samba/smb.conf [ ~]# cat /etc/samba/smb.conf [global] workgroup = MYGROUP log file=/var/log/samba/log.%m max log size 50 security = user passdb backend = tdbsam load printers = yes cups options = raw directory mask = 0775 [database] comment= do not arbitratily modify the database file path=/home/database public=no writable=yes [homes]参数为来访用户的家目录共享信息 [printers]参数为共享的打印机设备。 --5 [root@iscsi ~]# systemctl restart smb [ ~]# systemctl status smb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2020-07-20 10:04:37 CST; 7s ago Docs: man:smbd(8) man:samba(7) man:smb.conf(5) Main PID: 67555 (smbd) Status: "smbd: ready to serve connections..." CGroup: /system.slice/smb.service ├─67555 /usr/sbin/smbd --foreground --no-process-group ├─67557 /usr/sbin/smbd --foreground --no-process-group
1.2 Windows 访问文件共享服务 Samba共享服务器 centos7 10.15.7.20 windows win10 10.17.60 在windows使用\\10.15.7.20,输入用户名密码 samba 可以看到database文件夹,在该目录下进行查看、写入、更名、删除文件等操作 [root@iscsi ~]# cd /home/database/ [ database]# ll total 36 -rwxr--r-- 1 samba samba 28967 Jul 7 15:43 DNS.txt -rwxr--r-- 1 samba samba 6 Jul 20 10:08 new1.txt
1.3 Linux 访问文件共享服务 Samba共享服务器 centos7 10.15.7.20 linux客户端 centos7 10.15.7.22 [root@localhost ~]# yum install cifs-utils -y 在linux客户端,写入samba服务的用户名、密码、共享域的信息 [root@localhost ~]# vim auth.smb username=samba password=samba domain=MYGROUP [root@localhost ~]# chmod 600 auth.smb [ ~]# mkdir /database [ ~]# vim /etc/fstab //10.15.7.20/database /database cifs credentials=/root/auth.smb 0 0 [root@localhost ~]# ll /root/auth.smb -rw-------. 1 root root 45 Jul 19 22:20 /root/auth.sm [root@localhost ~]# mount -a [ ~]# df -h //10.15.7.20/database 40G 6.2G 34G 16% /database [root@localhost ~]# cd /database/ [ database]# ll total 36 -rwxr--r--. 1 1012 1012 28967 Jul 7 03:43 DNS.txt -rwxr--r--. 1 1012 1012 6 Jul 19 22:08 new1.txt
2 NFS(网络文件系统)--仅实现linux系统之间的共享
如果需要共享的文件的主机都是linux,建议在客户端部署NFS服务来共享文件。
NFS(网络文件系统)服务可以将远程 Linux 系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机
(Linux 客户端)基于 TCP/IP 协议,像使用本地主机上的资源那样读写远程 Linux 系统上的共享文件。
[ ~]# yum install nfs-utils -y #安装nfs软件包 --1 NFS 服务器 centos 7 10.15.7.20 NFS 客户端 centos 7 10.15.7.22 --2 创建目录和文件夹 [root@iscsi ~]# mkdir /nfsfile [ ~]# chmod -Rf 777 /nfsfile/ [ ~]# echo "i love x" >/nfsfile/readme --3 修改配置文件 用于配置 NFS 服务程序配置文件的参数 ro 只读 rw 读写 root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户 no_root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员 all_squash 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户 sync 同时将数据写入到内存与硬盘中,保证不丢失数据 async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 [root@iscsi ~]# vim /etc/exports [ ~]# more /etc/exports /nfsfile 10.15.7.*(rw,sync,root_squash) [root@iscsi ~]# systemctl restart rpcbind [ ~]# systemctl start nfs-server --4 配置客户端 showmount 命令中可用的参数以及作用 -e 显示 NFS 服务器的共享列表 -a 显示本机挂载的文件资源的情况 -v 显示版本号 [root@iscsi ~]# showmount -e 10.15.7.20 #查询nfs服务器的远程共享信息 Export list for 10.15.7.20: /nfsfile 10.15.7.* 在 NFS 客户端创建一个挂载目录,使用 mount 命令并结合-t 参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的 IP 地址、 服务器上的共享目录以及要挂载到本地系统(即客户端)的目录。 [root@localhost ~]# mkdir /nfsfile [ ~]# mount -t nfs 10.15.7.20:/nfsfile /nfsfile [ ~]# vim /etc/fstab 10.15.7.20:/nfsfile /nfsfile nfs defaults 0 0 [root@localhost ~]# df -h //10.15.7.20/database 40G 6.2G 34G 16% /database 10.15.7.20:/nfsfile 40G 6.2G 34G 16% /nfsfile [root@localhost ~]# cd /nfsfile/ [ nfsfile]# ll total 4 -rw-r--r--. 1 root root 9 Jul 19 23:20 readme [root@localhost nfsfile]# cat readme i love x [root@localhost nfsfile]# echo "i‘m xxiuerm luer" >> readme -bash: readme: Permission denied [root@localhost nfsfile]# touch 1.txt [ nfsfile]# echo "1234" > 1.txt [localhost nfsfile]# more 1.txt 1234 [root@iscsi ~]# cd /nfsfile/ [ nfsfile]# ll total 8 -rw-r--r-- 1 nfsnobody nfsnobody 5 Jul 20 14:24 1.txt ###nfs客户端创建的文件 -rw-r--r-- 1 root root 15 Jul 20 11:32 readme ##nfs服务器端创建的文件 [ nfsfile]# echo "222">> 1.txt
其他全市默认配置。5.在Ubuntu中建立共享文件夹,命名为share,然后进入VirtualBox菜单选择Deivce=》Shared Folder Settings 里面指定创建的share路径。