CIFS是一种通用网络文件系统,主要用于网络设备之间的文件共享。CIFS可以在linux系统和windows系统之间共享文件,因此这种文件系统主要用于客户端是windows系统。
提供CIFS的服务是SAMBA,下文将介绍SAMBA服务的一些配置以及用法。
1、SAMBA的安装和配置
"yum install samba samba-common samba-client -y"。安装SAMBA服务。
"systemctl start smb",开启SAMBA服务。"systemctl enable smb",开机启动SAMBA服务。"systemctl stop firewalld",关闭防火墙,也可以对防火墙进行配置。
"smbpasswd -a student",在SAMBA服务中添加一个用户,这个用户必须为主机中真是存在的用户。"pdbedit -L",可以查看添加了哪些用户。
"smbclient -L //172.25.254.202 -U student",输入密码后可以看到SAMBA用户"student"共享了哪些目录,如下图,默认会共享用户的家目录。
"smbclient //172.25.254.202/student -U student",输入密码后可以查看共享目录"student"下的文件。但是在SElinux开启的情况下,是无法看到里面文件的,需要"setsebool -P samba_enable_home_dirs on"开启这个功能之后即可查看。
"mount -o username=student,password=student //172.25.254.202/student /mnt",可以将这个"student"目录挂载在其他目录下,在这个目录下写入文件就会自动储存到"student"目录。
"vim /etc/samba/smb.conf",在配置文件中,修改第89行的"workgroup"可以改变域名,例如下图,设置"workgroup = text"。重启服务后生效。
可以在第96行加入"hosts deny = IP"或者"hosts allow = IP"来阻止或者允许该IP登陆。如下图所示,主机名"singlenet"的IP为"172.25.254.202"。
2、共享其他目录
默认的共享目录是家目录,如果需要共享其他目录,如自建一个目录"/we",里面有"wefile{1..3}"三个文件。
此时需要如下步骤:
a、"vim /etc/samba/smb.conf"。在第322行至第324行输入以下内容:
[DATA]
comment = local directory /we
path = /we
"[DATA]"为共享目录目标,可以自己编写。重启服务。"smbclient -L //172.25.254.202 -U student",可以看到这个"DATA"目录,但是却无法通过"smbclient //172.25.254.202/DATA -U student"看到这个目录里面的内容。这是因为SElinux的影响。
b、"semanage fcontext -a -t samba_share_t ‘/we(/.*)?‘"。修改自建目录"/we"的安全上下文,并通过"restorecon -RvvF /we"刷新。
完成后重启服务就可以通过"smbclient //172.25.254.202/DATA -U student"看到这个目录里面的内容了。
上述的步骤适合于自建目录,但是如果是系统的目录呢?就无法修改目录的安全上下文了。例如下图第326行至第328行,共享"/mnt"目录,目录下有"mntfile{1..3}"三个文件。
此时就需要用"setsebool -P samba_export_all_ro on"关闭在SAMBA中的安全上下文功能。完成后就可以看到"/mnt"下的文件了。需要注意的是,"samba_export_all_ro"打开后,因为安全上下文失效,所以共享自建目录也不需要再修改安全上下文了。
3、匿名用户登陆
在配置文件"/etc/samba/smb.conf"中共享文件后输入"browseable = no"就会在查询是不显示这个目录,但是这个目录依旧存在,可以看到其中的文件。如下图第325行所示。
SAMBA也是可以通过匿名用户登陆的,需要在配置文件"/etc/samba/smb.conf"中加入"guest ok = yes",如下图第326行所示,这是开启了匿名用户登陆。
重启服务后就可以不通过用户,而直接输入"smbclient //172.25.254.202/DATA"直接登陆查看里面的文件。
但是,上述设置之后虽然可以匿名登陆,但是无法挂载在某个目录下,此时需要在配置文件中输入"map to guest = bad user",这是使匿名用户登陆或者挂载时以"guest"用户进行。重启服务后就可以进行挂载了。
如果匿名用户挂载需要开机自动挂载,则在"/etc/fstab"文件中输入"//172.25.254.202/DATA /mnt cifs defaults,username=guest 0 0"即可。
4、目录挂载后的写权限
4.1、开启写权限
如下图所示,目录挂载之后并不能在其中建立或者删除文件。这是因为并没有开启写权限。
开启写权限需要在配置文件中输入第327行的"writable = yes",并给予共享目录"/we"777权限,完成后还必须修改"/we"目录的安全上下文。完成后重新挂载就可以进行文件的建立和删除了。
与共享系统目录时相同,系统目录无法修改安全上下文,此时需要输入"setsebool -P samba_export_all_rw on"开启SElinux中的写权限功能,修改后系统目录挂载后就可以建立和删除文件了。开启功能后,自建目录也不需要再修改安全上下文。
4.2、写权限的限定
上述配置是使所有用户在挂载时都可以建立或者删除文件,有时还需要对一些用户进行限制,例如现有两个用户"student"和"class",想要"student"可以建立文件,而"class"用户不可以。则需要在配置文件中输入"write list = student",这时只有"student"用户拥有写权限,则可以解决这个问题。
还可以在将配置文件"write list = "后的"student"该为"+student",这表示属于student用户组的用户拥有写权限,如下图所示,将student用户组添加为"class"用户的附加组,此时"class"用户就可以进行文件的建立和删除了。
4.3、建立文件的归属
共享目录挂载之后建立的文件默认的是以哪个用户的身份登陆,文件的所有人就为哪个用户。可以在配置文件中输入下图第335行的"admin users = class",就可以使得以class用户在挂载这个共享目录后,以root用户的身份进行操作,如下图所示。可以看出设置之后建立的文件"file1"的文件所有人为"root",而之前以student用户挂载建立的文件"file3"的文件所有人为"student"。
5、用户的权限管理
如下图所示,以root用户挂载一个共享目录,但是切换到普通用户kiosk,发现这个普通用户也可以看到里面的文件,这显然是很不安全的,也不合理,所以需要对客户端的用户进行权限管理。即客户端的其他用户需要进行认证才可以查看挂载内容。
其设置步骤如下所示:
"yum install cifs-utils -y"。在客户端上,管理的软件是"cifs-utils"。
"vim /root/smbpassword"。在这个文件中写入SAMBA服务上真实存在的用户和密码,文件名称可以自行编辑,完成后为了安全给予600权限。
"mount -o credentials=/root/smbpassword,multiuser,sec=ntlmssp //172.25.254.202/SYSTEM /mnt"。如下图所示,以此命令进行挂载,挂载后kiosk用户无法看到挂载目录的文件。
如果kiosk用户需要看到里面的文件,则需要进行用户身份验证,kiosk用户输入"cifscreds add -u class 172.25.254.202"输入密码后即可完成认证,认证可以输入SAMBA服务中的任意一个真实存在的用户。
kiosk用户在挂载目录下建立一个文件"kioskfile",如下图,在客户端可以看到这个文件是属于kiosk用户的,但在SAMBA服务端,可以看到这个文件是属于class用户的。这是因为kiosk用户建立的文件在SAMBA服务端是属于客户端kiosk用户的uid在服务端所对应的那个用户的。kiosk的uid为1001,在SAMBA服务端,1001的uid对应的用户为class。
上述即是在客户端管理普通用户对共享目录操作的方式。
还可以在配置文件中写入下图第328行中的"valid users = student",这是使得只能以student用户进行挂载,也可以写为"valid users = @student",这是使得只能student用户组内的用户可以进行挂载。
以上就是linux系统和windows系统通用的共享文件系统CIFS的主要内容。SAMBA服务主要用于客户端是windows系统的文件共享。而linux系统之间的文件共享是采用NFS的共享文件系统。